[更新日期:2020年04月20日 本站所有Praat脚本都不再提供更新,请大家移步https://github.com/feelins/Praat_Scripts下载最新的代码,可以采用git clone到本地的方法(具体操作要熟悉github相关操作),也可以点击页面的Clone or download,然后选择Download Zip下载整个Praat脚本目录到本地直接打开使用。]
Praat脚本具有强大的功能,对语音文件标注完成后,下面的任务就是把成百上千的语音文件中的参数提取出来,最基本的就是时长,和基频,其它还有元音可能要提取共振峰,如果对这些文件全部手工提取,工作量可想而知,而使用Praat脚本即可以批量提取,便于统一整理。这里先介绍如何提取时长和基频的脚本,随后以如何绘制汉字声调图为例,说明一个小的应用。
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这一部分。
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
解释:这一段是为了提取该音素所在的单词,因为整个脚本是以音素层为参考,然后提取每个音素所在的单词,所以这里的代码是为了提取这个音素所在的单词。
语音文件使用的是http://www.phonetics.ucla.edu/course/contents.html页面上的声音。标注文件是随手标的,请忽略不准确,或者错误。
在result.txt,如下面的格式:
下面以一个小的例子,即如何绘制汉字普通话的声调图,说明如何应用这个脚本进行一些简单的操作。同样的应用可以用到如何提取汉语普通话的连读变调图,以及未知方言的声调提取,以及句子单位的语调提取都是同样的道理。
该示例请在如下地址下载,包括两个汉字的标注示例,提取脚本,提取出来的结果文件,以及在Excel绘制的声调图。积分会在评论后返还,欢迎下载后评论,谢谢:
示例说明:
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,原因是这里只有一个字,很难代表整体,有兴趣的朋友可以多找一些样例平均)
# 关注
关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。

# 版权说明
1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;
2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;
3、转载或者引用本文内容请注明来源及原作者;
4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。
MB的到底LIBS+=如何用!!!!!!语法是 LIBS+= -L直接打地址 -l直接打库名注意点:-L后面没有空格,直接跟着地址,然后空格,-l后面是去掉lib之后的文件名。(真TMDSB!) 一个例子:如我们有E:CLibrariesNewmatLdebuglibNewmatL.a这个文件,则: LIBS += -LE:CLibrariesNewmatLdebug -l
如何做好企业销售数据分析,基于低代码平台实现的智能销售系统,以四大数据引擎为支撑,助力企业数据管理。
第一章 前言与概述web服务器做什么?答:接收客户请求,然后向客户返回结果web客户做什么?答:此处客户指浏览器,web客户允许用户请求服务器上的某个资源,并向用户展现请求的结果。html 客户与服务器间的语言http 客户域服务器间传输的通道HTTP是一个简单的请求/响应序列:请求流的关键要素HTTP方法(要完成的动作)要访问的页面(URL)表单参数(如方法采纳数)响应流的关键要素
UGUI之修改Text字间距
你的第一桶金是如何赚到的? auxten 面向工资编程 想来到现在走出校园已经5年了。 当时卡上躺着100w现金,还是蛮激动的。 大三的时候“混进”一家叫豆瓣的小公司实习,中午和几个小伙伴吃饭,那时候就在想,他们好厉害。一个月7~8千,但怎么好像跟我差不...
要用ASP来操作SQLite数据库,先在服务器上安装SQLite的ODBC驱动程序,可到这个站点上下载安装:http://www.ch-werner.de/sqliteodbc/下边是一个SQLite数据库结构:引用内容Create TABLE admin(username text,age integer);我们再来用ASP演示下如何对SQLite数据库进行记录的增、查、改、
zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来HTTP协议几乎能够取代任何基于TCP的上层协议,如今基于互联网的绝大多数移动应用,他们使用的都是HTTP协议,甚至苹果专用的流媒体传输协议HLS,使用的也是HTTP协议,同时现在非常流行的所谓小程序,它们也要基于HTTP协议实现客户端与服务...
1、前言现在好多手机都有APP推送功能,也有好多第三方的SDK,那为什么还要集成只有小米手机好使的“小米推送”呢?因为在小米手机中,小米推送是“系统级通道”,就是在APP关闭的情况下,也能很快的到达。而第三方SDK只能通过自己的代码进行保活,效果远远达不到小米推送的效果,所以如果是小米手机,用小米推送效果会更好。完美推送功能总结+集成极光推送:https://blog.csdn.net/f...
点击上方“程序人生”,选择“置顶公众号”第一时间关注程序猿(媛)身边的故事首著惊爆降临 荟萃微博自动化实践精华腾讯|滴滴|美团|清华产学界翘楚瞩目力荐智能运维即未来 AI...
Field[] fields = object.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组当使用上面方法获取类的属性时候仅仅会返回本身的属性,想要获取其父类属性可以使用下列代码if(null==object) return;Class clazz = object.getClass();List<Field> fieldsList = new ArrayList<Field>();while (cla
Windows CE下的串口通讯实例 串行通讯是目前计算机、通信和控制领域最基本的通信方式。在CSDN的“嵌入式开发/WINCE”社区中,经常有人提问该到哪找串口通讯例子,其实这个问题我自己也问过。:)而一般的回答是给你提供一个Pocket PC 2002的SDK例子程序。但到底SDK的程序和MFC的结构有很大的不同,对于想用MFC编写通信程序的人来说也不是很便利。另一方面,由于Windows CE是一个基于Unicode的操作系统,并且Windows CE不支持Windows下常用的串行通信重叠I/O方式
事务ACID特性 事务(Transaction)是并发控制的基本单位。 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。 数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)