#脚本功能:用非滤波和滤波法两种方法提取目标层非空Interval谱重心COG(单位:赫兹/Hz)、STD离散度(单位:赫兹/Hz)、SKW偏度、KUR峰度 # 其中滤波法Using a filter is a suggestion by Ricard Herrero and Daniel Recasens #使用前提:①只适用于Windows操作系统,Praat版本最好是在6.0及以上;②必须对声音文件标注,有同名的声音文件(WAV格式)和TextGrid标注文件 #脚本作者:张明辉(北京华睿宝科技有限公司),脚本撰写不易,若您使用此脚本进行学术研究,请在脚注中予以说明或在参考文献中进行援引,多谢! #写作时间:2020年2月12日 #参数查询:更多关于谱重心(Centre of Gravity)、离散度(Standard Deviation)、偏度(Skewness)和峰度(Kurtosis)的算法和参数设置,可以在Praat Help中查询。 form 参数设置 sentence openPath integer targetedTier 2 real onset 0 (= 0 ≤ onset < 1) positive offset 1 (= 0 < offset ≤1) integer filtMinFreq 1000 integer filtMaxFreq 11000 integer filtSmoothFreq 100 endform tn = targetedTier if right$(openPath$,1) <> "\" openPath$ = openPath$ + "\" endif outputfilename$ = "'openPath$'Output" outputfilename$ = outputfilename$ + ".txt" filedelete 'outputfilename$' fileappend "'outputfilename$'" Filename'tab$'Label'tab$'Duration'tab$'COGnonfilt'tab$'STDnonfilt'tab$'SKWnonfilt'tab$'KURnonfilt'tab$'COGfilt'tab$'STDfilt'tab$'SKWfilt'tab$'KURfilt fileappend "'outputfilename$'" 'newline$' fileType$="wav" Create Strings as file list: "fileList", "'openPath$'*.'fileType$'" numberOfFiles = Get number of strings for i from 1 to numberOfFiles selectObject: "Strings fileList" filename$ = Get string: i openwavFileName$ = openPath$ + filename$ - fileType$ + "wav" openTextGridFileName$ = openPath$ + filename$ - fileType$ + "TextGrid" if fileReadable (openwavFileName$) and fileReadable (openTextGridFileName$) Open long sound file: openwavFileName$ name$ = selected$("LongSound") Read from file: openTextGridFileName$ selectObject: "TextGrid 'name$'" else exitScript: "不存在同名的WAV和TextGrid文件" endif selectObject: "TextGrid 'name$'" intNumT1 = Get number of intervals: 1 intNumTn = Get number of intervals: tn j = 1 while j <= intNumTn selectObject: "TextGrid 'name$'" a$ = Get label of interval: tn, j a = index_regex(a$, "\S") if a <> 0 startTime = Get start time of interval: tn, j endTime = Get end time of interval: tn, j dur = endTime - startTime duration = dur * 1000 cutStart = startTime + (endTime - startTime) * onset cutEnd = startTime + (endTime - startTime) * offset selectObject: "LongSound 'name$'" Extract part: cutStart, cutEnd, "yes" partName$ = selected$("Sound") Filter (pass Hann band): filtMinFreq, filtMaxFreq, filtSmoothFreq bandName$ = selected$("Sound") selectObject: "Sound 'partName$'" To Spectrum: "yes" cog1 = Get centre of gravity: 2 std1 = Get standard deviation: 2 skw1 = Get skewness: 2 kur1 = Get kurtosis: 2 selectObject: "Spectrum 'partName$'" plusObject: "Sound 'partName$'" Remove selectObject: "Sound 'bandName$'" To Spectrum: "yes" cog2 = Get centre of gravity: 2 std2 = Get standard deviation: 2 skw2 = Get skewness: 2 kur2 = Get kurtosis: 2 selectObject: "Spectrum 'bandName$'" plusObject: "Sound 'bandName$'" Remove fileappend "'outputfilename$'" 'name$''tab$''a$''tab$''duration:0''tab$''cog1:0''tab$''std1:0''tab$''skw1:2''tab$''kur1:2''tab$''cog2:0''tab$''std2:0''tab$''skw2:2''tab$''kur2:2' fileappend "'outputfilename$'" 'newline$' j = j + 1 else j = j + 1 endif endwhile selectObject: "TextGrid 'name$'" Save as text file: "'openPath$''name$'.TextGrid" plusObject: "LongSound 'name$'" Remove endfor selectObject: "Strings fileList" Remove echo 参数提取完毕!