form Measure formant values for segments in a textgrid
sentence Sound_dir ./seoulcorpus
sentence Output result2
sentence Sound .wav
positive maximum_formant 5500
positive number_of_formants 5
boolean Vowel_analysis 0
boolean fricative_analysis 1
endform
if fileReadable ("'output$'.txt")
deleteFile: "'output$'.txt"
endif
debug = 0
if vowel_analysis = 1
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"
endif
if fricative_analysis = 1
appendFileLine: "'output$'.txt",
... "fric_Dur", tab$, "intensity", tab$,
... "cog", tab$, "deviation", tab$, "skewness", tab$, "kurtosis"
endif
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$
selectObject: "Sound 'basename$'"
To Formant (burg): 0, 'number_of_formants', 'maximum_formant', 0.025, 50
;selectObject: "Sound 'basename$'"
;To Pitch: 0, 75, 500
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
if phone$ != "" and phone$ != "sp"
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
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: left$, tab$, phone$, tab$, right$, tab$, word$, tab$
@fricative_cue: start_left, end_left
endif
endif
endif
endfor
selectObject: "Sound 'basename$'"
plusObject: "TextGrid 'basename$'"
plusObject: "Formant 'basename$'"
Remove
endfor
select all
Remove
procedure fricative_cue: start_left, end_left
fric_dur_ms = (end_left - start_left)*1000
selectObject: "Sound 'basename$'"
Extract part: start_left, end_left, "rectangular", 1, 0
Resample: 22050, 50
Rename: "'basename$'_part_f"
selectObject: "Sound 'basename$'_part_f"
select Sound 'basename$'_part_f
To Spectrum: "yes"
Cepstral smoothing: 200
Rename: "'basename$'_part_f_smooth"
select Spectrum 'basename$'_part_f_smooth
f_cog = Get centre of gravity: 2
f_std = Get standard deviation: 2
f_skew = Get skewness: 2
f_kurt = Get kurtosis: 2
selectObject: "Sound 'basename$'_part_f"
f_intensity = Get intensity (dB)
appendInfoLine: f_cog, tab$, f_std, tab$, f_skew, tab$, f_kurt
appendFileLine: "'output$'.txt",
... fixed$ (fric_dur_ms, 2), tab$, fixed$ (f_intensity, 2), tab$,
... fixed$ (f_cog, 2), tab$, fixed$ (f_std, 2), tab$, fixed$ (f_skew, 2), tab$,
... fixed$ (f_kurt, 2)
selectObject: "Sound 'basename$'_part_f"
plusObject: "Spectrum 'basename$'_part_f"
plusObject: "Spectrum 'basename$'_part_f_smooth"
Remove
endproc