《最新pratt手册中的脚本程序.doc》由会员分享,可在线阅读,更多相关《最新pratt手册中的脚本程序.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品资料pratt手册中的脚本程序.(一)提取二维频谱中某个频率位置的能量值# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),再在二维频谱对象上将游标定位到您需要测量其能量的频率位置;# 然后按脚本编辑器的Run 菜单下的Run 按钮;# 执行结束后,您将在弹出的信息窗口中看见该频率位置的能量值。clearinfospectrumN$=selected$(Spectrum)editor Spectrum spec
2、trumN$pitchV=Get cursorendeditorbinNum=Get number of binsbinW=Get bin widthbinN=Get bin number from frequency. pitchVbinNQ=floor(binN)binNH=ceiling(binN)pitchQ=Get frequency from bin number. binNQpitchH=Get frequency from bin number. binNHif pitchH-pitchQ0rV=Get real value in bin. binNQrV=rViV=Get i
3、maginary value in bin. binNQiV=iVshengYaQ=(rV*rV+iV*iV)0.5dBQ=20*log10(shengYaQ/2*105)+15rV=Get real value in bin. binNHrV=rViV=Get imaginary value in bin. binNHiV=iVshengYaH=(rV*rV+iV*iV)0.5dBH=20*log10(shengYaH/2*105)+15juli=(pitchV-pitchQ)/(pitchH-pitchQ)dB=dBQ+(dBH-dBQ)*juliendifif pitchH-pitchQ
4、=0rV=Get real value in bin. binNrV=rViV=Get imaginary value in bin. binNiV=iVshengYa=(rV*rV+iV*iV)0.5dB=20*log10(shengYa/2*105)+15endifprint dB(二)提取二维频谱中前n 个谐波峰的能量值# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),并测量其第10 个谐波的中心频率,再除
5、以10 以得到这个时点的基频值;# 然后按脚本编辑器的Run 菜单下的Run 按钮,接下来在弹出的对话窗口里输入您刚才测定的基频值和需要测量的谐波峰数目n;# 执行结束后,您将在弹出的信息窗口中看见n 个谐波峰位置的能量值。form 对话框positive Frequency_Zero_(Hz) 100positive The_Number_of_harmonics 10endformfZero=frequency_ZerofNum=the_Number_of_harmonicsprint fNumclearinfofor j from 1 to fNumpitchV=fZero*jbinNu
6、m=Get number of binsbinW=Get bin widthbinN=Get bin number from frequency. pitchVbinNQ=floor(binN)binNH=ceiling(binN)pitchQ=Get frequency from bin number. binNQpitchH=Get frequency from bin number. binNHif pitchH-pitchQ0rV=Get real value in bin. binNQrV=rViV=Get imaginary value in bin. binNQiV=iVshen
7、gYaQ=(rV*rV+iV*iV)0.5dBQ=20*log10(shengYaQ/2*105)+15rV=Get real value in bin. binNHrV=rViV=Get imaginary value in bin. binNHiV=iVshengYaH=(rV*rV+iV*iV)0.5dBH=20*log10(shengYaH/2*105)+15juli=(pitchV-pitchQ)/(pitchH-pitchQ)dB=dBQ+(dBH-dBQ)*juliendifif pitchH-pitchQ=0rV=Get real value in bin. binNrV=rV
8、iV=Get imaginary value in bin. binNiV=iVshengYa=(rV*rV+iV*iV)0.5dB=20*log10(shengYa/2*105)+15endifprint dB newline$endfor(三)提取二维频谱中各频率成分的能量值# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 然后在对象列表窗口中选定一个二维频谱对象(Spectrum);# 然后按脚本编辑器的Run 菜单下的Run 按钮;# 执行结束后,您将在C:/temp.txt文件中
9、得到各频率成分的能量值。saveFileName$= c:/temp.txtfiledelete saveFileName$binNum=Get number of binsbinW=Get bin widthfileappend saveFileName$ Hzfileappend saveFileName$ ,fileappend saveFileName$ dBfileappend saveFileName$ newline$for i from 1 to binNumrV=Get real value in bin. iiV=Get imaginary value in bin. is
10、hengYa=(rV*rV+iV*iV)0.5dB=20*log10(shengYa/2*105)+15pitchV=(i-1)*binWfileappend saveFileName$ pitchVfileappend saveFileName$ ,fileappend saveFileName$ dBfileappend saveFileName$ newline$endforendfor(四)将共振峰频率数据提取到TextGrid 对象中# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;
11、# 打开一个声音,并按对象列表右侧的Edit 按钮来编辑这个声音,选择ShowSpectrogram 和Show Formant 按钮前的对钩。并将显示窗口调整到合适的横轴显示比例,将游标定位到需要测量共振峰的位置上(一般定位在共振峰数据比较稳定的地方或发生变化的地方,而不能放在那些红点散乱的位置);# 然后按脚本编辑器的菜单Run下的Run按钮即可执行;# 运行这段程序后,会出现一个对话框,询问您要提取多少个共振峰数据,默认为3 个,另外还要询问您是否需要新建一个TextGrid对象来保存共振峰数据,如果在对象列表窗口中没有对应于声音对象的TextGrid 对象,请选择CreateTextG
12、rid (for First Time)按钮前的复选框,然后按OK按钮运行即可;如果已经有了TextGrid 对象,则不必选择Create TextGrid (for First Time)按钮前的复选框,直接按OK按钮运行即可。另外请保持Formant Number 与第一次设定的个数一致,后面的操作过程不必修改它;# 这个程序将提取出游标位置的共振峰频率数据和带宽数据,并把它写到一个TextGrid 类型的文件之中,在TextGrid 对象中它们之间用“-”分开,“-”之前表示共振峰的中心频率值,“-”之后表示共振峰的带宽;如果所提取出来的数据不够准确,请在TextGrid 对象中进行修改
13、,最后请记作保存TextGrid 对象。form 对话框positive Formant_Number_(no_more_than_5) 3boolean Create_TextGrid_(for_First_Time) 0endformnf=formant_NumbercreateTextgrid=create_TextGridsoundN$=selected$(Sound)textGridN$=soundN$+_Formanteditor Sound soundN$Show analyses. yes no no yes no 10time=Get cursorfor i from 1 t
14、o nffi=Get formant. ibi=Get bandwidth. iendforendeditorif createTextgrid=1if nf=5To TextGrid. F5 F4 F3 F2 F1 F5 F4 F3 F2 F1endifif nf=4To TextGrid. F4 F3 F2 F1 F4 F3 F2 F1endifif nf=3To TextGrid. F3 F2 F1 F3 F2 F1endifRename. textGridN$endifselect TextGrid textGridN$for i from 1 to nffV=floor(fi)bV=
15、floor(bi)txt$=fixed$(fV,0)+-+fixed$(bV,0)Insert point. nf+1-i time txt$endforendifselect Sound soundN$(五)将TextGrid 对象中的共振峰数据转换成文本文件# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 再在对象列表窗口中选定一个用来登记共振峰数据的TextGrid 对象;# 然后按脚本编辑窗口的Run 菜单下的Run 按钮执行程序;# 执行结束后,您将在C:/temp.txt文件中
16、得到这个TextGrid 对象内的数据,您可以使用Excell 表格读取该文件。saveFileName$= c:/temp.txtfiledelete saveFileName$tN=Get number of tiersfor i from 1 to tNnF=Get tier name. ipN=Get number of points. ifor j from 1 to pNlP$=Get label of point. i jif index(lP$,-)0a=index(lP$,-)-1b=length(lP$)b=b-a-1fPij=extractNumber(left$(lP$
17、,a),)bPij=extractNumber(right$(lP$,b),)elsefPij=extractNumber(lP$,)bPij=100endiftPj =Get time of point. i jendforendforfileappend saveFileName$ 时点(ms)fileappend saveFileName$ ,for i from 1 to tNa=tN+1-ifileappend saveFileName$ Ffileappend saveFileName$ afileappend saveFileName$ ,endforfor i from 1 t
18、o tNa=tN+1-ifileappend saveFileName$ Bandwidthfileappend saveFileName$ afileappend saveFileName$ ,endforfileappend saveFileName$ newline$for j from 1 to pNtt=floor(tPj*1000)fileappend saveFileName$ ttfileappend saveFileName$ ,for i from 1 to tNll=fPijfileappend saveFileName$ llfileappend saveFileNam
19、e$ ,endforfor i from 1 to tNll=bPijfileappend saveFileName$ llfileappend saveFileName$ ,endforfileappend saveFileName$ newline$endfor(六)制作声学元音图# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 然后按脚本编辑窗口的Run 菜单下的Run 按钮执行程序;运行时,会弹出一个对话框,如下图所示:# 如果您要自己输入元音的音标及其F1 和F2 的值,则分别在
20、对话框的前三个输入窗口中输入;如果您不准备自己手工输入(即由程序自动从声音编辑窗口和标注窗口中提取您所指定位置的数据),则保持对话框的前三个输入窗口的数据不变。对话框的第四个窗口用来输入F1 的范围,对话框的第五个窗口用来输入F2 的范围,这两个值一般根据您所画元音里的F1 和F2 的最大值来决定,通常可以保持不变。对话框的第六个窗口用来输入声学元音图的宽度,对话框的第七个窗口用来输入声学元音图的高度,一般也可以保持不变。对话框最底下的那个复选框用来确定是否重新作图,只在做第一个元音图时打钩,接下来做其他元音时就不能再打钩了,否则前面所做好的图就被取消了。设置好之后,按对话框上的“OK”按钮提
21、交运行即可。# 如果您不是手工输入元音的音标及其F1 和F2 的值,那么您需要在对象列表窗口中选定声音文件对象和相应的标注文件,并将它们合并在一起打开来编辑,在编辑窗口分析显示出声音的共振峰数据,还需要在相应的标注文件里标注出该元音的音标,然后把游标定位到合适的共振峰位置上,设置好这些之后再运行这个脚本程序。运行时,还可以在上图1、2、3 位置修改元音的音标及其F1和F2 的值。form 输入框comment If you think the values token from the editor are wrong,comment please input the correct valu
22、es in the following textbox:sentence Vowel_Symbol originalreal Frequency_of_First_Formant_(Hz) 0 (=auto input)real Frequency_of_Second_Formant_(Hz) 0 (=auto input)positive Maximum_Frequency_of_First_Formant_(Hz) 1000positive Maximum_Frequency_of_Second_Formant_(Hz) 3000positive Width_of_the_picture
23、5positive Height_of_the_picture 5boolean Draw_the_vowel_on_a_new_picture 0endformvowelN$=vowel_Symbol$fff=frequency_of_First_Formantfsf=frequency_of_Second_FormantnewPic=draw_the_vowel_on_a_new_picturehyu=maximum_Frequency_of_Second_Formantzyu=maximum_Frequency_of_First_FormantwP=width_of_the_pictur
24、ehP=height_of_the_picturewP=wP+0.5hP=hP+0.5hjiange=hyu/10000zjiange=zyu/10000if vowelN$=originaltextName$=selected$(TextGrid)editor TextGrid textName$txt$= Get label of intervalendeditorelsetxt$=vowelN$endifif fff=0textName$=selected$(TextGrid)editor TextGrid textName$ff= Get first formantendeditore
25、lseff=fffendifif fsf=0textName$=selected$(TextGrid)editor TextGrid textName$fs= Get second formantendeditorelsefs=fsfendifff=1-ff/zyufs=1-fs/hyuif newPic=1Erase allViewport. 0.5 wP 0.5 hPBlackPlain lineDraw line. 0 0 1 0Draw line. 0 1 1 1Draw line. 1 1 1 0Draw line. 0 1 0 0for i from 0 to 10a=i/10b=
26、(10-i)*hjiangeb=b:2BlackPlain lineText special. a Centre 1 Bottom Times 10 0 bGreyDotted lineif a0 and a1Draw line. a 1 a 0endifendforfor i from 0 to 9a=i/10b=(10-i)*zjiangeb=b:2Plain lineBlackText special. 1 Left a Bottom Times 10 0 bGreyDotted lineif a0 and a1Draw line. 1 a 0 aendifendforPlain lin
27、eBlackText special. 1 Left 1 Bottom Times 10 0 KendifPlain lineBlackDraw circle. fs ff 0.006a=ff/zjiangeb=floor(a)c=ceiling(a)d=(b+c)/2if adtf=ff-0.02elsetf=ff+0.02endifa=fs/hjiangeb=floor(a)c=ceiling(a)d=(b+c)/2if adts=fs-0.02elsets=fs+0.02endifBlueText special. ts Centre tf Half Times 14 0 txt$(七)
28、提取标注对象中的数据# 点击主窗口的Control 菜单下的New praat script 按钮,以建立一个新的脚本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;# 执行这个程序,你需要在C 盘temp 文件夹下存放TextGrid 文件,TextGrid对象需要标注音节和声韵母等数据;# 然后按脚本编辑窗口的Run 菜单下的Run 按钮执行程序;运行时,会弹出一个对话框,如下图所示:# 请在上图1 位置输入音节层的标注层级;请在上图2 位置输入声韵母层的标注层级;请在上图3 位置输入重音层的标注层级;请在上图4 位置输入间断层的标注层级;如果在您的标注文件中没有标注上面的内容,请保
29、留“0”不变。设置好之后请按上图5 的“OK”按钮继续运行。# 运行结束后,您将在C 盘temp 文件夹下找到提取出来的数据文件,其名称是TextGrid 文件的名称加上“_TextGrid”,类型是文本文件。您可以使用Excel表格打开刚才得到的数据文件,以观察和分析数据。dirPath$ = C:tempCreate Strings as file list. list dirPath$*.TextGridfileNum= Get number of stringsif fileNum0form 对话框real the_PinYin_TierIndex_in_TextGrid 0real
30、the_ShengYun_TierIndex_in_TextGrid 0real the_Stress_TierIndex_in_TextGrid 0real the_Break_TierIndex_in_TextGrid 0endformpinYintierNum= the_PinYin_TierIndex_in_TextGridshengYuntierNum= the_ShengYun_TierIndex_in_TextGridstresstierNum= the_Stress_TierIndex_in_TextGridbreaktierNum= the_Break_TierIndex_i
31、n_TextGridfor ifile to fileNumselect Strings listfileName$ = Get string. ifilenewFileName$ = fileName$ - .TextGridtextGridFileName$= newFileName$ +.TextGridtextGridFileName$ = dirPath$ +textGridFileName$saveFileName$= newFileName$ +_TextGrid.txtsaveFileName$ = dirPath$ +saveFileName$filedelete saveF
32、ileName$fileappend saveFileName$ 文件名fileappend saveFileName$ ,fileappend saveFileName$ 音节名称fileappend saveFileName$ ,fileappend saveFileName$ 音节起点fileappend saveFileName$ ,fileappend saveFileName$ 音节末点fileappend saveFileName$ ,fileappend saveFileName$ 音节时长fileappend saveFileName$ ,fileappend saveFil
33、eName$ 声母名称fileappend saveFileName$ ,fileappend saveFileName$ 声母起点fileappend saveFileName$ ,fileappend saveFileName$ 声母末点fileappend saveFileName$ ,fileappend saveFileName$ 声母时长fileappend saveFileName$ ,fileappend saveFileName$ 韵母名称fileappend saveFileName$ ,fileappend saveFileName$ 韵母起点fileappend sav
34、eFileName$ ,fileappend saveFileName$ 韵母末点fileappend saveFileName$ ,fileappend saveFileName$ 韵母时长fileappend saveFileName$ ,fileappend saveFileName$ 音节底层调类fileappend saveFileName$ ,fileappend saveFileName$ 音节表层调类fileappend saveFileName$ ,fileappend saveFileName$ 音节重音层级fileappend saveFileName$ ,fileapp
35、end saveFileName$ 音节左边界层级fileappend saveFileName$ ,fileappend saveFileName$ 音节右边界层级fileappend saveFileName$ newline$Read from file. textGridFileName$select TextGrid newFileName$pinYinDataNumber=0breakDataNumber=0if pinYintierNum0dd=Is interval tier. pinYintierNumif dd=1intervalNum= Get number of int
36、ervals. pinYintierNumfor interNum from 1 to intervalNumpinYinDatalabelinterNum$=Get label of interval. pinYintierNum interNumpinYinDatalBeginterNum=Get starting point. pinYintierNum interNumpinYinDataEndinterNum=Get end point. pinYintierNum interNumendforendifpinYinDataNumber=intervalNumendifif brea
37、ktierNum0dd=Is interval tier. breaktierNumif dd=0intervalNum= Get number of points. breaktierNumfor interNum from 1 to intervalNumbreakDatalabelinterNum$= Get label of point. breaktierNum interNumbreakDataTimeinterNum=Get time of point. breaktierNum interNumendforendifbreakDataNumber=intervalNumendi
38、fif pinYinDataNumber0for interNum from 1 to pinYinDataNumberfileappend saveFileName$ textGridFileName$fileappend saveFileName$ ,lN$=pinYinDatalabelinterNum$fileappend saveFileName$ lN$fileappend saveFileName$ ,bT=pinYinDatalBeginterNumfileappend saveFileName$ bTfileappend saveFileName$ ,eT=pinYinDat
39、aEndinterNumfileappend saveFileName$ eTfileappend saveFileName$ ,sL=pinYinDataEndinterNum-pinYinDatalBeginterNumfileappend saveFileName$ sLfileappend saveFileName$ ,if shengYuntierNum 0shengBig=bT+0.005shengInterNum= Get interval at time. shengYuntierNum shengBigshengMulabel$= Get label of interval.
40、 shengYuntierNum shengInterNumshengMuBeg=Get starting point. shengYuntierNum shengInterNumshengMuEnd=Get end point. shengYuntierNum shengInterNumsL=shengMuEnd-shengMuBegfileappend saveFileName$ shengMulabel$fileappend saveFileName$ ,fileappend saveFileName$ shengMuBegfileappend saveFileName$ ,fileap
41、pend saveFileName$ shengMuEndfileappend saveFileName$ ,fileappend saveFileName$ sLfileappend saveFileName$ ,yunEnd=eT-0.005yunInterNum= Get interval at time. shengYuntierNum yunEndyunMulabel$= Get label of interval. shengYuntierNum yunInterNumyunMuBeg=Get starting point. shengYuntierNum yunInterNumy
42、unMuEnd=Get end point. shengYuntierNum yunInterNumsL=yunMuEnd-yunMuBegfileappend saveFileName$ yunMulabel$fileappend saveFileName$ ,fileappend saveFileName$ yunMuBegfileappend saveFileName$ ,fileappend saveFileName$ yunMuEndfileappend saveFileName$ ,fileappend saveFileName$ sLfileappend saveFileName
43、$ ,diaoD$=right$(lN$,1)diaoZi$=if diaoD$=0 or diaoD$=1 or diaoD$=2 or diaoD$=3 or diaoD$=4 ordiaoD$=5diaoZi$=diaoD$fileappend saveFileName$ diaoD$fileappend saveFileName$ ,elsediaoD$=fileappend saveFileName$ diaoD$fileappend saveFileName$ ,endifdiaoD$=right$(yunMulabel$,1)if diaoD$=0 or diaoD$=1 or diaoD$=2 or diaoD$=3 or diaoD$=4 ordiaoD$=5fileappend saveFileName$ diaoD$fileappend saveFileName$ ,elsefileappend saveFileName$ diaoZi$fileappend saveFileName$ ,endifendifif stresstierNum 0stresslabel$=0m