pratt手册中的脚本程序范文Word下载.docx
《pratt手册中的脚本程序范文Word下载.docx》由会员分享,可在线阅读,更多相关《pratt手册中的脚本程序范文Word下载.docx(63页珍藏版)》请在冰点文库上搜索。
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
binN'
shengYa=(rV*rV+iV*iV)^0.5
dB=20*log10(shengYa/2*10^5)+15
print'
dB'
(二)提取二维频谱中前n个谐波峰的能量值
#然后在对象列表窗口选定并编辑(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
fNum'
forjfrom1tofNum
pitchV=fZero*j
'
newline$'
endfor
(三)提取二维频谱中各频率成分的能量值
#然后在对象列表窗口中选定一个二维频谱对象(Spectrum);
#执行结束后,您将在"
C:
/temp.txt"
文件中得到各频率成分的能量值。
saveFileName$="
c:
filedelete'
saveFileName$'
fileappend'
Hz
dB
forifrom1tobinNum
i'
pitchV=(i-1)*binW
(四)将共振峰频率数据提取到TextGrid对象中
#打开一个声音,并按对象列表右侧的Edit按钮来编辑这个声音,选择Show
Spectrogram和ShowFormant按钮前的对钩。
并将显示窗口调整到合适的横轴显
示比例,将游标定位到需要测量共振峰的位置上(一般定位在共振峰数据比较稳
定的地方或发生变化的地方,而不能放在那些红点散乱的位置);
#然后按脚本编辑器的菜单"
Run"
下的"
按钮即可执行;
#运行这段程序后,会出现一个对话框,询问您要提取多少个共振峰数据,
默认为3个,另外还要询问您是否需要新建一个TextGrid对象来保存共振峰数据,
如果在对象列表窗口中没有对应于声音对象的TextGrid对象,请选择"
Create
TextGrid(forFirstTime)"
按钮前的复选框,然后按"
OK"
按钮运行即可;
如果已经
有了TextGrid对象,则不必选择"
CreateTextGrid(forFirstTime)"
按钮前的复选框,
直接按"
按钮运行即可。
另外请保持FormantNumber与第一次设定的个数一
致,后面的操作过程不必修改它;
#这个程序将提取出游标位置的共振峰频率数据和带宽数据,并把它写到一
个TextGrid类型的文件之中,在TextGrid对象中它们之间用“-”分开,“-”之
前表示共振峰的中心频率值,“-”之后表示共振峰的带宽;
如果所提取出来的数
据不够准确,请在TextGrid对象中进行修改,最后请记作保存TextGrid对象。
positiveFormant_Number_(no_more_than_5)3
booleanCreate_TextGrid_(for_First_Time)0
nf=formant_Number
createTextgrid=create_TextGrid
soundN$=selected$("
Sound"
textGridN$=soundN$+"
_Formant"
editorSound'
soundN$'
Showanalyses...yesnonoyesno10
time=Getcursor
forifrom1tonf
f'
=Getformant...'
b'
=Getbandwidth...'
ifcreateTextgrid=1
ifnf=5
ToTextGrid..."
F5F4F3F2F1"
F5F4F3F2F1
ifnf=4
F4F3F2F1"
F4F3F2F1
ifnf=3
F3F2F1"
F3F2F1
Rename...'
textGridN$'
selectTextGrid'
fV=floor(f'
bV=floor(b'
txt$=fixed$(fV,0)+"
-"
+fixed$(bV,0)
Insertpoint...nf+1-itime'
txt$'
selectSound'
(五)将TextGrid对象中的共振峰数据转换成文本文件
#再在对象列表窗口中选定一个用来登记共振峰数据的TextGrid对象;
#然后按脚本编辑窗口的Run菜单下的Run按钮执行程序;
文件中得到这个TextGrid对象内的数据,
您可以使用Excell表格读取该文件。
tN=Getnumberoftiers
forifrom1totN
nF=Gettiername...'
pN=Getnumberofpoints...'
forjfrom1topN
lP$=Getlabelofpoint...'
j'
ifindex(lP$,"
)>
a=index(lP$,"
)-1
b=length(lP$)
b=b-a-1
fP'
'
=extractNumber(left$(lP$,a),"
"
bP'
=extractNumber(right$(lP$,b),"
else
=extractNumber(lP$,"
=100
tP'
=Gettimeofpoint...'
时点(ms)
a=tN+1-i
F
a'
Bandwidth
tt=floor(tP'
*1000)
tt'
ll=fP'
ll'
ll=bP'
(六)制作声学元音图
运行时,会弹
出一个对话框,如下图所示:
#如果您要自己输入元音的音标及其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
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
txt$=vowelN$
iffff=0
ff=Getfirstformant
ff=fff
iffsf=0
fs=Getsecondformant
fs=fsf
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'
Textspecial...'
Centre1BottomTimes100'
Grey
Dottedline
ifa<
>
0anda<
1
Drawline...'
1'
0
forifrom0to9
b=(10-i)*zjiange
Textspecial...1Left'
BottomTimes100'
Drawline...1'
0'
Textspecial...1Left1BottomTimes100K
Drawcircle...'
fs'
ff'
0.006
a=ff/zjiange
b=floor(a)
c=ceiling(a)
d=(b+c)/2
ifa>
d
tf=ff-0.02
tf=ff+0.02
a=fs/hjiange
ts=fs-0.02
ts=fs+0.02
Blue
ts'
Centre'
tf'
HalfTimes140'
(七)提取标注对象中的数据
#执行这个程序,你需要在C盘temp文件夹下存放TextGrid文件,TextGrid
对象需要标注音节和声韵母等数据;
#请在上图1位置输入音节层的标注层级;
请在上图2位置输入声韵母层的
标注层级;
请在上图3位置输入重音层的标注层级;
请在上图4位置输入间断层
的标注层级;
如果在您的标注文件中没有标注上面的内容,请保留“0”不变。
设置好之后请按上图5的“OK”按钮继续运行。
#运行结束后,您将在C盘temp文件夹下找到提取出来的数据文件,其名
称是TextGrid文件的名称加上“_TextGrid”,类型是文本文件。
您可以使用Excel
表格打开刚才得到的数据文件,以观察和分析数据。
dirPath$="
\temp\"
CreateStringsasfilelist...list'
dirPath$'
\*.TextGrid
fileNum=Getnumberofstrings
iffileNum>
realthe_PinYin_TierIndex_in_TextGrid0
realthe_ShengYun_TierIndex_in_TextGrid0
realthe_Stress_TierIndex_in_TextGrid0
realthe_Break_TierIndex_in_TextGrid