Script Plot F1 and F2 To Draw Acoustic Acoustic Vowel Space Chart

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

# Draw one formant point as a one-Bark circle on a Bark-scale F1/F2 chart

#
# This script is distributed under the GNU General Public License.
# Copyright Mietta Lennes 5.11.2004
#

form Draw one-Bark formant circle on a Bark-scale F1/F2 formant chart


boolean Clear_Picture_window_first yes
comment Formant values (Hz):
real f1 500
real f2 1500
comment Formant chart minima and maxima (Hz):
real f1_minimum 200
real f1_maximum 1000
real f2_minimum 600
real f2_maximum 2500
sentence Vowel_label a
optionmenu Line_style 1
option Plain line
option Dashed line
optionmenu Colour 1
option Black
option Grey
option Silver
option Red
option Blue
option Green
option Cyan
option Lime
option Purple
endform

if clear_Picture_window_first = 1
Erase all
endif

Black
Times
Line width... 1
Font size... 16

call AddBarkScale f1_minimum f1_maximum f2_minimum f2_maximum 1

Line width... 3

# switch to Bark scale:


f1bark = hertzToBark (f1)
f2bark = hertzToBark (f2)

f1low = f1bark - 0.5


f1high = f1bark + 0.5
f2low = f2bark - 0.5
f2high = f2bark + 0.5

'colour$'
'line_style$'
Draw ellipse... -f2high -f2low -f1high -f1low
Paint ellipse... White -f2high -f2low -f1high -f1low
Black
Plain line
Text... -f2bark Centre -f1bark Half 'vowel_label$'

#------

procedure AddBarkScale f1min f1max f2min f2max garnish

# This procedure adds Bark scale tick marks and lines to a


# reversed-and-inverted-axes F1/F2 formant chart (the traditional style).
# The input parameters for minima and maxima must be in Hertz.
#
# Remember that if you want to use Hertz scale for drawing after this
# procedure, you have to redefine the axes!!!

Draw inner box

if garnish = 1
Text top... no Bark
Text right... no Bark
endif

f1min_Bark = hertzToBark (f1min)


f1max_Bark = hertzToBark (f1max)
f2min_Bark = hertzToBark (f2min)
f2max_Bark = hertzToBark (f2max)

Axes... -f2max_Bark -f2min_Bark -f1max_Bark -f1min_Bark

Marks top every... 1 1 no yes yes


Marks right every... 1 1 no yes yes

if garnish = 1
One mark left... -f1max_Bark no no no 'f1max:0'
One mark left... -f1min_Bark no no no 'f1min:0'
One mark bottom... -f2max_Bark no no no 'f2max:0'
One mark bottom... -f2min_Bark no no no 'f2min:0'
endif

f1scale = floor ((f1max - f1min) / 100)


f2scale = floor ((f2max - f2min) / 100)

for x to f2scale
f2value = hertzToBark (f2min + (x * 100))
if (f2min + (x * 100) = 1000 or f2min + (x * 100) = 2000) and garnish = 1
mark = f2min + (x * 100)
mark$ = "'mark:0'"
else
mark$ = ""
endif
One mark bottom... -f2value no yes no 'mark$'
endfor

for y to f1scale
f1value = hertzToBark (f1min + (y * 100))
if (f1min + (y * 100) = 500 or f1min + (y * 100) = 1000) and garnish = 1
mark = f1min + (y * 100)
mark$ = "'mark:0'"
else
mark$ = ""
endif
One mark left... -f1value no yes no 'mark$'
endfor

endproc

You might also like