############################################################
### By Shaopf 2013年1月15日 feipengshao@163.com
############################################################
form 提取时长基频
comment 输入文件所在的目录(包括声音文件和标注文件):
text read_path E:\L2-ARCTIC corpus (v3.0)\data
comment 输入音段层:
positive phon_tier 2
comment 输入单词层:
positive word_tier 1
comment 输入保存结果的路径
text save_path E:\L2-ARCTIC corpus (v3.0)\data\result.txt
endform
if right$(read_path$, 1) = "\"
read_path$ = read_path$ - "\"
endif
deleteFile: save_path$
appendFileLine: save_path$, "文件名称" + tab$ + "音素" +tab$ + "时长" + tab$ + "所在词" + tab$ + "所在词时长" + tab$ + "基频点1" + tab$ + "基频点2" + tab$ + "基频点3" + tab$ + "基频点4" + tab$ + "基频点5" + tab$ + "基频点6" + tab$ + "基频点7" + tab$ + "基频点8" + tab$ + "基频点9" + tab$ + "基频点10"
Create Strings as file list: "fileList", read_path$ + "\*.TextGrid"
numberOfFiles = Get number of strings
for iFile from 1 to numberOfFiles
selectObject: "Strings fileList"
fileName$ = Get string: iFile
simpleName$ = fileName$ - ".TextGrid"
textGridFileName$ = read_path$ + "\" + simpleName$ + ".TextGrid"
wavFileName$ = read_path$ + "\" + simpleName$ + ".wav"
pitchFileName$ = read_path$ + "\" + simpleName$ + ".Pitch"
pitchtierFileName$ = read_path$ + "\" + simpleName$ + ".PitchTier"
Read from file: textGridFileName$
Read from file: wavFileName$
if fileReadable(pitchtierFileName$)
Read from file: pitchtierFileName$
else
To Pitch: 0, 75, 600
Interpolate
Smooth: 10
Down to PitchTier
selectObject: "Pitch " + simpleName$
Remove
selectObject: "Pitch " + simpleName$
Remove
selectObject: "Pitch " + simpleName$
Remove
endif
selectObject: "TextGrid " + simpleName$
numberOfIntervals = Get number of intervals: phon_tier
for iInterval from 1 to numberOfIntervals
selectObject: "TextGrid " + simpleName$
sTime = Get start point: phon_tier, iInterval
eTime = Get end point: phon_tier, iInterval
duration = eTime-sTime
labelOfInterval$ = Get label of interval: phon_tier, iInterval
intervalWordTier = Get interval at time: word_tier, sTime
sTimeWord = Get start point: word_tier, intervalWordTier
eTimeWord = Get end point: word_tier, intervalWordTier
durationWord = eTimeWord - sTimeWord
labelOfIntervalWord$ = Get label of interval: word_tier, intervalWordTier
output$ = simpleName$ + tab$ + labelOfInterval$ + tab$ + fixed$(duration, 3) + tab$ + labelOfIntervalWord$ + tab$ + fixed$(durationWord, 3) + tab$
output2$ = simpleName$ + tab$ + labelOfInterval$ + tab$ + fixed$(duration, 3) + tab$ + labelOfIntervalWord$ + tab$ + fixed$(durationWord, 3) + tab$
stepTime = duration / 9
for i from 1 to 10
selectObject: "PitchTier " + simpleName$
tmpTime = sTime + stepTime * (i - 1)
pitchValue = Get value at time: tmpTime
output$ = output$ + fixed$(pitchValue, 0)
output2$ = output2$ + fixed$(tmpTime, 3)
if i <> 10
output$ = output$ + tab$
output2$ = output2$ +tab$
endif
endfor
appendFileLine: save_path$, output$
appendFileLine: save_path$, output2$
endfor
selectObject: "TextGrid " + simpleName$
Remove
selectObject: "Sound " + simpleName$
Remove
selectObject: "PitchTier " + simpleName$
Remove
endfor
selectObject: "Strings fileList"
Remove
exit 脚本运行结束!