关于用Praat自动提取基频(Pitch)数据的补充完善

分类:Praat
 标签:Praat,基频,Pitch,音频
   修改 | 阅读(6180)| 评论(6)


    前面的那篇虽然能把程序改成是精确到小数点后三位进行提取,但由于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功能。


去除弯头降尾的方法请点击下面:
 

如您觉得本文对您有帮助,可以赞助博主一杯奶茶吗

    



如有问题点这里(如需寻求帮助请在邮件中作简短自我介绍)

【HYF @Phoebe】评论于:2015-12-15 17:17:36    [回复本评论]

很有幸能看到您的博客,对我有很大帮助。想咨询您两个问题:

       1.关于用Praat自动提取基频(Pitch)数据脚本文件,18行<show all>会出错     

       2.有没有可能写一个共振峰自动提取的脚本?

顺祝安好!

1、出错是因为您运行脚本的地方不对,这个脚本应该在Sound窗口运行。

2、这个是可以的。

【逍遥乐网博客】于15-12-26 14:19回复

您好!我在sound窗口运行此脚本, 也出现了第18行show all 出错的问题,请问这个怎么解决?

【老婆子】于17-11-13 18:17回复

您好~我也是在sound 窗口运行的,但是出现show all 然后出错,请问您后来找到解决办法了吗

【张舒】于18-05-13 11:58回复
【MarxYANG】评论于:2015-7-13 17:34:35    [回复本评论]

您好!向您请教个问题,如何用praat修改基频曲线(删掉或连接上)然后再提取十个点的赫兹值?谢谢!

您好,您可以将音频文件转换为基频[Pitch]文件,然后可以对基频文件的基频点进行修改。

【逍遥乐网博客】于15-07-30 09:37回复
您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新