form Measure formant values for segments in a textgrid
sentence Sound_dir ./seoulcorpus
sentence Output result
sentence Sound .wav
positive maximum_formant 5500
positive number_of_formants 5
endform
if fileReadable ("'output$'.txt")
deleteFile: "'output$'.txt"
endif
debug = 0
appendFileLine: "'output$'.txt",
... "Filename", tab$, "Word", tab$, "Left_Phone", tab$, "Phone", tab$, "Right_Phone", tab$,
... "Phone_Duration", tab$, "Word_Duration", tab$,
... "F1_1", tab$, "F2_1", tab$,
... "F1_2", tab$, "F2_2", tab$,
... "F1_3", tab$, "F2_3", tab$,
... "F1Bark_1", tab$, "F2Bark_1", tab$,
... "F1Bark_2", tab$, "F2Bark_2", tab$,
... "F1Bark_3", tab$, "F2Bark_3", tab$,
... "F0_1", tab$, "F0_2", tab$, "F0_3", tab$,
... "F0st_1", tab$, "F0st_2", tab$, "F0st_3"
strings = Create Strings as file list: "list", sound_dir$ +"/"+ "*.wav"
numberOfFiles = Get number of strings
clearinfo
for ifile to numberOfFiles
selectObject: strings
sound_file$ = Get string: ifile
basename$ = sound_file$ - ".wav"
Read from file: sound_dir$+"/"+sound_file$
Read from file: sound_dir$+"/"+basename$+".TextGrid"
selectObject: "TextGrid 'basename$'"
num_intervals = Get number of intervals... 1
appendInfoLine: num_intervals
; for i from 2 to num_intervals-1
for i from 2 to 100
selectObject: "TextGrid 'basename$'"
phone$ = Get label of interval: 1, i
@textgrid_info: phone$
if left$ == "s0" or left$ == "ss"
if phone$ == "ii" or phone$ == "ee" or phone$ == "xx" or phone$ == "vv" or phone$ == "uu" or phone$ == "oo"
appendInfo: phone$, tab$, left$,tab$, right$, tab$, word$
appendInfo: newline$
endif
endif
endfor
selectObject: "Sound 'basename$'"
plusObject: "TextGrid 'basename$'"
;plusObject: "Formant 'basename$'"
Remove
endfor
select all
Remove
procedure textgrid_info: phone$
start = Get starting point: 1, i
end = Get end point: 1, i
quarter = start + (end-start) / 4
halfway = start + (end-start) / 2
three_quarters = start + (end-start) * 3 / 4
phone_duration = (end-start)*1000
word_index = Get interval at time: 2, halfway
word$ = Get label of interval: 2, word_index
word_start = Get starting point: 2, word_index
word_end = Get end point: 2, word_index
word_duration = (word_end-word_start) * 1000
if start = word_start
left$ = "#"
else
left$ = Get label of interval: 1, i-1
start_left = Get starting point: 1, i-1
end_left = Get end point: 1, i-1
endif
if end = word_end
right$ = "#"
else
right$ = Get label of interval: 1, i+1
endif
endproc