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

本文介绍如何使用Praat脚本批量提取语音文件的时长和基频,并以绘制汉字声调图为例,展示如何应用这些数据进行声调分析。包括基频处理、音素提取和时长归一化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

个人分类: Praat

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/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.youkuaiyun.com/detail/shaopengfei/9475768[这一个是老的,没有脚本]

http://download.youkuaiyun.com/detail/shaopengfei/9665610【最新的】

5. 测试的文件如下图。

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

6. 生成的文件

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

7. 举例:

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

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

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

http://download.youkuaiyun.com/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.youkuaiyun.com/detail/shaopengfei/9612368[老的,没有脚本]

http://download.youkuaiyun.com/detail/shaopengfei/9665610【最新更新】

<think>好的,我现在需要帮助用户解决关于Praat软件中双字调分析的问题。首先,我需要理解用户的需求。用户提到“双字调”,这可能是指汉语中的双字词声调分析,比如两个音节组合的声调变化。用户可能想了解如何使用Praat进行这样的分析,以及常见错误处理。 首先,我应该回顾Praat的基本操作,特别是基频分析相关的功能。根据提供的引用,尤其是引用[1]、[2]、[4],Praat基频分析涉及设置参数,如基频范围、计算方法等。用户需要的是双字调的具体步骤,可能需要分段标注提取基频数据。 接下来,用户可能遇到的错误可能包括基频曲线提取不准确、标注错误或脚本使用问题。引用[3]提到Praat脚本编程,可能需要检查脚本是否正确处理双字调的情况,比如时间对齐或参数设置。 然后,我需要整理步骤。首先,安装Praat(引用[1]),然后导入音频文件,进行标注(引用[2]中的标注文件步骤)。基频分析部分参考引用[4],选择合适的计算方法方式。可能还需要使用脚本来自动化处理,如引用[3]中的例子,提取基频数据。 错误处理方面,常见问题可能是基频检测错误,比如将谐波误判为基频,这时需要调整基频范围(如引用[4]中的Unit计算方法)。标注错误可能导致分析区域不正确,需要检查标注边界。脚本错误可能需要检查语法或命令是否正确,尤其是路径参数设置。 最后,生成相关问题,可能涉及Praat的其他分析功能、优化方法或其他软件的比较。需要确保问题用户查询相关,帮助用户进一步探索。</think>### Praat双字调分析教程及常见错误处理 #### **一、双字调分析步骤** 1. **音频导入标注** - 打开Praat后,导入音频文件(`Open → Read from file`)。 - 在`Objects`窗口中选择音频文件,点击`View & Edit`进入编辑界面。 - 使用**标注层**(Tier)对双字调进行分段标注- 第一层标注词语边界(如“北京”),第二层标注单个音节(如“北”“京”)。 - 标注时需确保时间对齐,避免边界误差[^2]。 2. **基频提取设置** - 选择菜单`Pitch → Pitch Settings`,设置基频范围(汉语通常为$75-500\ \text{Hz}$)计算方法(推荐`autocorrelation`用于语调分析)[^4]。 - 通过`Pitch → Get Pitch`生成基频曲线,可绘制为平滑线(`curve`)或点(`speckles`)。 3. **数据导出分析** - 使用脚本批量提取基频值(参考示例代码): ```praat selectObject: "Pitch" t1 = Get start time of interval: 1, 1 # 第一个音节起始时间 t2 = Get end time of interval: 1, 2 # 第二个音节结束时间 f0 = Get mean: t1, t2, "Hertz" ``` - 将数据导出为文本或Excel文件,进行声调对比或统计分析--- #### **二、常见错误及解决方法** 1. **基频曲线断裂或异常** - **原因**:背景噪声干扰或发声方式(如气嗓音)导致Praat误判。 - **处理**: - 调整基频范围(如设为$80-300\ \text{Hz}$)。 - 手动修正标注区间,或改用`cross-correlation`方法[^4]。 2. **标注时间错位** - **原因**:手动标注时音节边界未对齐音频信号。 - **处理**: - 放大波形,结合语谱(`Spectrogram`)精确定位共振峰声门脉冲。 3. **脚本执行报错** - **原因**:路径错误或语法不兼容(如中英文符号混用)。 - **处理**: - 使用英文路径,检查脚本命令Praat菜单项是否一致[^3]。 - 示例修正: ```praat # 错误:Save as text file: "C:/用户/文档/data.txt" # 正确:Save as text file: "C:/Users/Documents/data.txt" ``` --- #### **三、双字调分析示例** 1. 语谱基频叠加: $$F_0(t) = \frac{1}{T} \int_{t}^{t+T} f_0(\tau) d\tau$$ 通过观察$F_0(t)$曲线,可分析声调连读变调规律(如上声变调)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值