Praat脚本提取时长及基频并示例如何绘制声调图

Praat脚本提取时长及基频并示例如何绘制声调图

2016年03月29日 17:21:04 不太会编程 阅读数:13986 标签: Praat脚本声调图汉字声调五度值 更多

个人分类: Praat

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shaopengfei/article/details/51007530

[更新日期:20161027  以前的资源里竟然没有脚本,抱歉下载过的朋友,我重新更新了一下资源]

Praat脚本具有强大的功能,对语音文件标注完成后,下面的任务就是把成百上千的语音文件中的参数提取出来,最基本的就是时长,和基频,其它还有元音可能要提取共振峰,如果对这些文件全部手工提取,工作量可想而知,而使用Praat脚本即可以批量提取,便于统一整理。这里先介绍如何提取时长和基频的脚本,随后以如何绘制汉字声调图为例,说明一个小的应用。

1. 基本的读文件以及文件名操作(略)

2. 基频处理

if fileReadable(pitchtierFileName$)
  Read from file: pitchtierFileName$
else
  To Pitch: 0, 75, 600
  Interpolate
  Smooth: 10
  Down to PitchTier
  selectObject: "Pitch " + simpleName$
  Remove
  selectObject: "Pitch " + simpleName$
  Remove
  selectObject: "Pitch " + simpleName$
  Remove
endif

解释:这部分是针对基频的提取处理,如果有修正好的基频文件,这里是需要使用Praat保存的格式*.PitchTier格式。所谓的修基频是需要通过Praat生成一个Pitch文件,然后对里面的清、浊出错比较明显的位置给予修正。如果不修基频,最后的结果难免有很多数值点影响整体效果。如果没有提供修正的基频文件,脚本会自动创建一个基频文件。如上面代码里的To Pitch这一部分。

3. 提取音素所在的单词

   intervalWordTier = Get interval at time: word_tier, sTime
   sTimeWord = Get start point: word_tier, intervalWordTier
   eTimeWord = Get end point: word_tier, intervalWordTier
   durationWord = eTimeWord - sTimeWord
   labelOfIntervalWord$ = Get label of interval: word_tier, intervalWordTier

解释:这一段是为了提取该音素所在的单词,因为整个脚本是以音素层为参考,然后提取每个音素所在的单词,所以这里的代码是为了提取这个音素所在的单词。

4. 最后附上整个Praat脚本的下载页. 

该脚本在Praat6.0.14测试成功。适用版本包括Praat5.2.*以上。

http://download.csdn.net/detail/shaopengfei/9475768[这一个是老的,没有脚本]

http://download.csdn.net/detail/shaopengfei/9665610【最新的】

5. 测试的文件如下图。

语音文件使用的是http://www.phonetics.ucla.edu/course/contents.html页面上的声音。标注文件是随手标的,请忽略不准确,或者错误。

6. 生成的文件

在result.txt,如下面的格式:

7. 举例:

下面以一个小的例子,即如何绘制汉字普通话的声调图,说明如何应用这个脚本进行一些简单的操作。同样的应用可以用到如何提取汉语普通话的连读变调图,以及未知方言的声调提取,以及句子单位的语调提取都是同样的道理。

该示例请在如下地址下载,包括两个汉字的标注示例,提取脚本,提取出来的结果文件,以及在Excel绘制的声调图。积分会在评论后返还,欢迎下载后评论,谢谢:

http://download.csdn.net/detail/shaopengfei/9612368[老的,没有脚本]

http://download.csdn.net/detail/shaopengfei/9665610【最新更新的】

 示例说明:

1. 标注的时候如图,只给了简单的两层,注意韵母a的标注,我刻意没有保留结尾的那段,因为为了描述大概的声调走向,只保留了比较稳定的一段,其它使用者在实际标注时可根据自己的需要确定如何标注。

2. 标注好之后,使用上述的脚本,即可提取出结果result.txt,脚本运行的时候,音段层为2,单词层是1,文件所在的目录是data,然后输入一个结果文件的正确路径和名称。

3.将结果文件都拷贝到excel里,只保留跟要绘制声调相关的韵母那些行,这样只保留了a相关的数据行,这里只是为了演示,只有两个字的数据,实际操作时,每一个韵母的每一类声调都可能有N多的数据,这样就可以放到一块,进行一下平均,平均的时候是对基频10个点分别平均,这样保证得到的是10个点的基频。这样的操作也称为对时长的归一化。如下图所示,当提取两个韵母的基频时,因为每一个情况下的发音时长是肯定不同的,即使是同一个人,在发同一个韵母的时候,也不能保证时长是相同的,在这样的情况下,只能做一个时长归一化,保证都是10个点的时长,大概的描述这个发音的时长,而归一化的方式,就是把整体时长比如平均分9份,每隔一份的间隔提取一个值,这样无论在什么情况下,每一个样本都提取10个值,这就是时长归一化。当然同样的道理,你也可以选择提取15个值,5个值。。。但是其实就稳定的发音段来说,无论多少值,都区别不大。建议在标注的时候尽量保留稳定段,而且要尽量多的数据平均,这样绘制出来的图像是更有普遍意义的。

4.最终当前这两个字的声调图如下:

5.目前学术研究上流行五度值描述汉语的声调,这样相当于又是一个归一化的过程,相当于把不同的人,不同的性别的人,不同地区的人,任何的差异都抹掉,全部都归一化到1-5的范围内来描述声调,这样适合于进行一个汉语方言区的调查,而条件是必须有足够多的数据,优点是更直观,描述起来大家都容易接受,缺点就是看不到个体的差异。现在比较公认是采用以下的公式进行归一化:

Value =5* (log(x)-log(min))/(log(max)-log(min))

5是归一化到1-5的范围内,而对每一个基频取log值,则是因为有学术研究表现在log域上更接受于人的听感,而max,min代表是样本整体的最大值,最小值,x是指当前原始值。

还是上述数据,经过归一化计算之后,得到如下的声调图。那么我们可以描述,阴平调为55,阳平调为15(其它地方可能描述为25,35,原因是这里只有一个字,很难代表整体,有兴趣的朋友可以多找一些样例平均)

 

以上所有数据都可以在资源包里下载到:

http://download.csdn.net/detail/shaopengfei/9612368[老的,没有脚本]

http://download.csdn.net/detail/shaopengfei/9665610【最新更新】

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值