前面的那篇用Praat自动提取基频(Pitch)数据虽然能把程序改成是精确到小数点后三位进行提取,但由于Praat软件本身默认配置的限制,即使改成了精确到小数点后三位,那取出来的数据也只是精确到两位而已,这就造成了得出来的结果的时长基本上都是以0.009结尾的不准确结果。
现在对程序做了一定的修改完善,并附上教程(请一定按照教程后面的步骤设置Praat,否则三位以上小数将不准确)
#程序编写:何京宗 #编写日期:2014-04-17 #程序功能:自动分段提取十点基频数据(可自定义精确小数位) #如有拷贝进行使用请保留版权声明,尊重作者劳动成果,谢谢。 #程序使用方法详见 http://www.hejingzong.cn/blog/ViewBlog_49.aspx #(需要精确到三位小数的请看教程,按步骤进行设置) form 请输入 comment 提取音频的总长度: positive audioLength 6.0 comment 提取音频时长精确度(小数位数越多运行越缓慢): sentence stepTimeStr 0.01 endform empty$="" echo 'empty$' print 'newline$' Show all stepTime=extractNumber(stepTimeStr$,"") exactness=length(stepTimeStr$)-2 beginTime=stepTime pitch=Get pitch n=0 perLength$="" while beginTime+stepTime*5<audioLength and n<30 while pitch=undefined and beginTime<audioLength beginTime=beginTime+stepTime Move cursor to... 'beginTime' pitch=Get pitch endwhile endTime=beginTime+stepTime pitch=Get pitch while pitch!=undefined and endTime<audioLength endTime=endTime+stepTime Move cursor to... 'endTime' pitch=Get pitch endwhile endTime=endTime-stepTime if endTime>beginTime Select... 'beginTime' 'endTime' nn=n+1 c=endTime-beginTime #print 'nn':'beginTime:3' To 'endTime:exactness' Length:'c:exactness' beginStr$=fixed$(beginTime,exactness) endStr$=fixed$(endTime,exactness) lenStr$=fixed$(c,exactness) print 'nn':'beginStr$' To 'endStr$' Length:'lenStr$' print 'newline$' for i from 0 to 9 currentTime=beginTime+((endTime-beginTime)/9)*i Move cursor to... 'currentTime' pitch = Get pitch print 'pitch:0' if i < 9 printtab endif endfor print 'newline$' print 'newline$' beginTime=endTime+stepTime*2 Move cursor to... 'beginTime' pitch=Get pitch endif n=n+1 endwhile print 'newline$'
以下是教程
1、导入音频后打开图形界面(这步不用图片了吧?)
2、点击菜单栏上的“View”→“Time step settings...”
3、在弹出来的界面上设置“Time step strategy”的值为“fixed”,“Fixed time step”设置为你要精确的小数位数,我这里精确到小数点后三位,那就填写0.001。OK就完成了软件的设置。
将以上的程序拷贝到脚本窗口,运行,会出现以下窗口
在窗口中audioLength中填入你要提取的音频的总时长
在stepTimeStr中填入你要精确的小数位数,图上所示是精确到小数点后三位(注:超过两位小数的要按照上面步骤进行相关的设置,小数位数到3位以上程序就已经运行很慢了,建议不要设置太多小数位数,程序在运行过程中可能会出现未响应的情况,这时请不要关闭软件,脚本运行结束后程序会自动恢复,小数位数多的话可能会需要几分钟的时间)。
本程序旨在自动提取数据,不能去除“弯头和降尾”,如需提取没有弯头降尾的数据,请在Praat中手动去除后再用本程序提取。若是标准音频文件那就可直接运用。
特别说明:该脚本效率非常有限,如音频文件较长,可能会出现程序假死的现象,如需要更高效率的请下载使用最新的Praat汉化版VIP功能。
去除弯头降尾的方法请点击下面:
在Praat中手动去除“弯头降尾”
如您觉得本文对您有帮助,可以赞助博主一杯奶茶吗