pratt手册中的脚本程序范文.docx

上传人:b****0 文档编号:12831396 上传时间:2023-04-22 格式:DOCX 页数:63 大小:139.99KB
下载 相关 举报
pratt手册中的脚本程序范文.docx_第1页
第1页 / 共63页
pratt手册中的脚本程序范文.docx_第2页
第2页 / 共63页
pratt手册中的脚本程序范文.docx_第3页
第3页 / 共63页
pratt手册中的脚本程序范文.docx_第4页
第4页 / 共63页
pratt手册中的脚本程序范文.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

pratt手册中的脚本程序范文.docx

《pratt手册中的脚本程序范文.docx》由会员分享,可在线阅读,更多相关《pratt手册中的脚本程序范文.docx(63页珍藏版)》请在冰豆网上搜索。

pratt手册中的脚本程序范文.docx

pratt手册中的脚本程序范文

(一)提取二维频谱中某个频率位置的能量值

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),再在

二维频谱对象上将游标定位到您需要测量其能量的频率位置;

#然后按脚本编辑器的Run菜单下的Run按钮;

#执行结束后,您将在弹出的信息窗口中看见该频率位置的能量值。

clearinfo

spectrumN$=selected$("Spectrum")

editorSpectrum'spectrumN$'

pitchV=Getcursor

endeditor

binNum=Getnumberofbins

binW=Getbinwidth

binN=Getbinnumberfromfrequency...'pitchV'

binNQ=floor(binN)

binNH=ceiling(binN)

pitchQ=Getfrequencyfrombinnumber...'binNQ'

pitchH=Getfrequencyfrombinnumber...'binNH'

ifpitchH-pitchQ>0

rV=Getrealvalueinbin...'binNQ'

rV=rV

iV=Getimaginaryvalueinbin...'binNQ'

iV=iV

shengYaQ=(rV*rV+iV*iV)^0.5

dBQ=20*log10(shengYaQ/2*10^5)+15

rV=Getrealvalueinbin...'binNH'

rV=rV

iV=Getimaginaryvalueinbin...'binNH'

iV=iV

shengYaH=(rV*rV+iV*iV)^0.5

dBH=20*log10(shengYaH/2*10^5)+15

juli=(pitchV-pitchQ)/(pitchH-pitchQ)

dB=dBQ+(dBH-dBQ)*juli

endif

ifpitchH-pitchQ=0

rV=Getrealvalueinbin...'binN'

rV=rV

iV=Getimaginaryvalueinbin...'binN'

iV=iV

shengYa=(rV*rV+iV*iV)^0.5

dB=20*log10(shengYa/2*10^5)+15

endif

print'dB'

(二)提取二维频谱中前n个谐波峰的能量值

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#然后在对象列表窗口选定并编辑(Edit)一个二维频谱对象(Spectrum),并测

量其第10个谐波的中心频率,再除以10以得到这个时点的基频值;

#然后按脚本编辑器的Run菜单下的Run按钮,接下来在弹出的对话窗口

里输入您刚才测定的基频值和需要测量的谐波峰数目n;

#执行结束后,您将在弹出的信息窗口中看见n个谐波峰位置的能量值。

form对话框

positiveFrequency_Zero_(Hz)100

positiveThe_Number_of_harmonics10

endform

fZero=frequency_Zero

fNum=the_Number_of_harmonics

print'fNum'

clearinfo

forjfrom1tofNum

pitchV=fZero*j

binNum=Getnumberofbins

binW=Getbinwidth

binN=Getbinnumberfromfrequency...'pitchV'

binNQ=floor(binN)

binNH=ceiling(binN)

pitchQ=Getfrequencyfrombinnumber...'binNQ'

pitchH=Getfrequencyfrombinnumber...'binNH'

ifpitchH-pitchQ>0

rV=Getrealvalueinbin...'binNQ'

rV=rV

iV=Getimaginaryvalueinbin...'binNQ'

iV=iV

shengYaQ=(rV*rV+iV*iV)^0.5

dBQ=20*log10(shengYaQ/2*10^5)+15

rV=Getrealvalueinbin...'binNH'

rV=rV

iV=Getimaginaryvalueinbin...'binNH'

iV=iV

shengYaH=(rV*rV+iV*iV)^0.5

dBH=20*log10(shengYaH/2*10^5)+15

juli=(pitchV-pitchQ)/(pitchH-pitchQ)

dB=dBQ+(dBH-dBQ)*juli

endif

ifpitchH-pitchQ=0

rV=Getrealvalueinbin...'binN'

rV=rV

iV=Getimaginaryvalueinbin...'binN'

iV=iV

shengYa=(rV*rV+iV*iV)^0.5

dB=20*log10(shengYa/2*10^5)+15

endif

print'dB''newline$'

endfor

(三)提取二维频谱中各频率成分的能量值

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#然后在对象列表窗口中选定一个二维频谱对象(Spectrum);

#然后按脚本编辑器的Run菜单下的Run按钮;

#执行结束后,您将在"C:

/temp.txt"文件中得到各频率成分的能量值。

saveFileName$="c:

/temp.txt"

filedelete'saveFileName$'

binNum=Getnumberofbins

binW=Getbinwidth

fileappend'saveFileName$'Hz

fileappend'saveFileName$',

fileappend'saveFileName$'dB

fileappend'saveFileName$''newline$'

forifrom1tobinNum

rV=Getrealvalueinbin...'i'

iV=Getimaginaryvalueinbin...'i'

shengYa=(rV*rV+iV*iV)^0.5

dB=20*log10(shengYa/2*10^5)+15

pitchV=(i-1)*binW

fileappend'saveFileName$''pitchV'

fileappend'saveFileName$',

fileappend'saveFileName$''dB'

fileappend'saveFileName$''newline$'

endfor

endfor

(四)将共振峰频率数据提取到TextGrid对象中

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#打开一个声音,并按对象列表右侧的Edit按钮来编辑这个声音,选择Show

Spectrogram和ShowFormant按钮前的对钩。

并将显示窗口调整到合适的横轴显

示比例,将游标定位到需要测量共振峰的位置上(一般定位在共振峰数据比较稳

定的地方或发生变化的地方,而不能放在那些红点散乱的位置);

#然后按脚本编辑器的菜单"Run"下的"Run"按钮即可执行;

#运行这段程序后,会出现一个对话框,询问您要提取多少个共振峰数据,

默认为3个,另外还要询问您是否需要新建一个TextGrid对象来保存共振峰数据,

如果在对象列表窗口中没有对应于声音对象的TextGrid对象,请选择"Create

TextGrid(forFirstTime)"按钮前的复选框,然后按"OK"按钮运行即可;如果已经

有了TextGrid对象,则不必选择"CreateTextGrid(forFirstTime)"按钮前的复选框,

直接按"OK"按钮运行即可。

另外请保持FormantNumber与第一次设定的个数一

致,后面的操作过程不必修改它;

#这个程序将提取出游标位置的共振峰频率数据和带宽数据,并把它写到一

个TextGrid类型的文件之中,在TextGrid对象中它们之间用“-”分开,“-”之

前表示共振峰的中心频率值,“-”之后表示共振峰的带宽;如果所提取出来的数

据不够准确,请在TextGrid对象中进行修改,最后请记作保存TextGrid对象。

form对话框

positiveFormant_Number_(no_more_than_5)3

booleanCreate_TextGrid_(for_First_Time)0

endform

nf=formant_Number

createTextgrid=create_TextGrid

soundN$=selected$("Sound")

textGridN$=soundN$+"_Formant"

editorSound'soundN$'

Showanalyses...yesnonoyesno10

time=Getcursor

forifrom1tonf

f'i'=Getformant...'i'

b'i'=Getbandwidth...'i'

endfor

endeditor

ifcreateTextgrid=1

ifnf=5

ToTextGrid..."F5F4F3F2F1"F5F4F3F2F1

endif

ifnf=4

ToTextGrid..."F4F3F2F1"F4F3F2F1

endif

ifnf=3

ToTextGrid..."F3F2F1"F3F2F1

endif

Rename...'textGridN$'

endif

selectTextGrid'textGridN$'

forifrom1tonf

fV=floor(f'i')

bV=floor(b'i')

txt$=fixed$(fV,0)+"-"+fixed$(bV,0)

Insertpoint...nf+1-itime'txt$'

endfor

endif

selectSound'soundN$'

(五)将TextGrid对象中的共振峰数据转换成文本文件

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#再在对象列表窗口中选定一个用来登记共振峰数据的TextGrid对象;

#然后按脚本编辑窗口的Run菜单下的Run按钮执行程序;

#执行结束后,您将在"C:

/temp.txt"文件中得到这个TextGrid对象内的数据,

您可以使用Excell表格读取该文件。

saveFileName$="c:

/temp.txt"

filedelete'saveFileName$'

tN=Getnumberoftiers

forifrom1totN

nF=Gettiername...'i'

pN=Getnumberofpoints...'i'

forjfrom1topN

lP$=Getlabelofpoint...'i''j'

ifindex(lP$,"-")>0

a=index(lP$,"-")-1

b=length(lP$)

b=b-a-1

fP'i''j'=extractNumber(left$(lP$,a),"")

bP'i''j'=extractNumber(right$(lP$,b),"")

else

fP'i''j'=extractNumber(lP$,"")

bP'i''j'=100

endif

tP'j'=Gettimeofpoint...'i''j'

endfor

endfor

fileappend'saveFileName$'时点(ms)

fileappend'saveFileName$',

forifrom1totN

a=tN+1-i

fileappend'saveFileName$'F

fileappend'saveFileName$''a'

fileappend'saveFileName$',

endfor

forifrom1totN

a=tN+1-i

fileappend'saveFileName$'Bandwidth

fileappend'saveFileName$''a'

fileappend'saveFileName$',

endfor

fileappend'saveFileName$''newline$'

forjfrom1topN

tt=floor(tP'j'*1000)

fileappend'saveFileName$''tt'

fileappend'saveFileName$',

forifrom1totN

ll=fP'i''j'

fileappend'saveFileName$''ll'

fileappend'saveFileName$',

endfor

forifrom1totN

ll=bP'i''j'

fileappend'saveFileName$''ll'

fileappend'saveFileName$',

endfor

fileappend'saveFileName$''newline$'

endfor

(六)制作声学元音图

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#然后按脚本编辑窗口的Run菜单下的Run按钮执行程序;运行时,会弹

出一个对话框,如下图所示:

#如果您要自己输入元音的音标及其F1和F2的值,则分别在对话框的前三

个输入窗口中输入;如果您不准备自己手工输入(即由程序自动从声音编辑窗口

和标注窗口中提取您所指定位置的数据),则保持对话框的前三个输入窗口的数

据不变。

对话框的第四个窗口用来输入F1的范围,对话框的第五个窗口用来输

入F2的范围,这两个值一般根据您所画元音里的F1和F2的最大值来决定,通

常可以保持不变。

对话框的第六个窗口用来输入声学元音图的宽度,对话框的第

七个窗口用来输入声学元音图的高度,一般也可以保持不变。

对话框最底下的那

个复选框用来确定是否重新作图,只在做第一个元音图时打钩,接下来做其他元

音时就不能再打钩了,否则前面所做好的图就被取消了。

设置好之后,按对话框

上的“OK”按钮提交运行即可。

#如果您不是手工输入元音的音标及其F1和F2的值,那么您需要在对象列

表窗口中选定声音文件对象和相应的标注文件,并将它们合并在一起打开来编

辑,在编辑窗口分析显示出声音的共振峰数据,还需要在相应的标注文件里标注

出该元音的音标,然后把游标定位到合适的共振峰位置上,设置好这些之后再运

行这个脚本程序。

运行时,还可以在上图1、2、3位置修改元音的音标及其F1

和F2的值。

form输入框

commentIfyouthinkthevaluestokenfromtheeditorarewrong,

commentpleaseinputthecorrectvaluesinthefollowingtextbox:

sentenceVowel_Symboloriginal

realFrequency_of_First_Formant_(Hz)0(=autoinput)

realFrequency_of_Second_Formant_(Hz)0(=autoinput)

positiveMaximum_Frequency_of_First_Formant_(Hz)1000

positiveMaximum_Frequency_of_Second_Formant_(Hz)3000

positiveWidth_of_the_picture5

positiveHeight_of_the_picture5

booleanDraw_the_vowel_on_a_new_picture0

endform

vowelN$=vowel_Symbol$

fff=frequency_of_First_Formant

fsf=frequency_of_Second_Formant

newPic=draw_the_vowel_on_a_new_picture

hyu=maximum_Frequency_of_Second_Formant

zyu=maximum_Frequency_of_First_Formant

wP=width_of_the_picture

hP=height_of_the_picture

wP=wP+0.5

hP=hP+0.5

hjiange=hyu/10000

zjiange=zyu/10000

ifvowelN$="original"

textName$=selected$("TextGrid")

editorTextGrid'textName$'

txt$=Getlabelofinterval

endeditor

else

txt$=vowelN$

endif

iffff=0

textName$=selected$("TextGrid")

editorTextGrid'textName$'

ff=Getfirstformant

endeditor

else

ff=fff

endif

iffsf=0

textName$=selected$("TextGrid")

editorTextGrid'textName$'

fs=Getsecondformant

endeditor

else

fs=fsf

endif

ff=1-ff/zyu

fs=1-fs/hyu

ifnewPic=1

Eraseall

Viewport...0.5'wP'0.5'hP'

Black

Plainline

Drawline...0010

Drawline...0111

Drawline...1110

Drawline...0100

forifrom0to10

a=i/10

b=(10-i)*hjiange

b='b:

2'

Black

Plainline

Textspecial...'a'Centre1BottomTimes100'b'

Grey

Dottedline

ifa<>0anda<>1

Drawline...'a'1'a'0

endif

endfor

forifrom0to9

a=i/10

b=(10-i)*zjiange

b='b:

2'

Plainline

Black

Textspecial...1Left'a'BottomTimes100'b'

Grey

Dottedline

ifa<>0anda<>1

Drawline...1'a'0'a'

endif

endfor

Plainline

Black

Textspecial...1Left1BottomTimes100K

endif

Plainline

Black

Drawcircle...'fs''ff'0.006

a=ff/zjiange

b=floor(a)

c=ceiling(a)

d=(b+c)/2

ifa>d

tf=ff-0.02

else

tf=ff+0.02

endif

a=fs/hjiange

b=floor(a)

c=ceiling(a)

d=(b+c)/2

ifa>d

ts=fs-0.02

else

ts=fs+0.02

endif

Blue

Textspecial...'ts'Centre'tf'HalfTimes140'txt$'

(七)提取标注对象中的数据

#点击主窗口的Control菜单下的Newpraatscript按钮,以建立一个新的脚

本语言编辑窗口,然后将脚本语言拷贝到脚本语言编辑窗口中;

#执行这个程序,你需要在C盘temp文件夹下存放TextGrid文件,TextGrid

对象需要标注音节和声韵母等数据;

#然后按脚本编辑窗口的Run菜单下的Run按钮执行程序;运行时,会弹

出一个对话框,如下图所示:

#请在上图1位置输入音节层的标注层级;请在上图2位置输入声韵母层的

标注层级;请在上图3位置输入重音层的标注层级;请在上图4位置输入间断层

的标注层级;如果在您的标注文件中没有标注上面的内容,请保留“0”不变。

设置好之后请按上图5的“OK”按钮继续运行。

#运行结束后,您将在C盘temp文件夹下找到提取出来的数据文件,其名

称是TextGrid文件的名称加上“_TextGrid”,类型是文本文件。

您可以使用Excel

表格打开刚才得到的数据文件,以观察和分析数据。

dirPath$="C:

\temp\"

CreateStringsasfilelist...list'dirPath$'\*.TextGrid

fileNum=Getnumberofstrings

iffileNum>0

form对话框

realthe_PinYin_TierIndex_in_TextGrid0

realthe_ShengYun_TierIndex_in_TextGrid0

realthe_Stress_TierIndex_in_TextGrid0

realthe_Break_TierIndex_in_TextGrid

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1