首页 / 资讯中心 / 文章详情

Praat中文学习手册:语音标注与基频共振峰提取

Praat中文学习手册:语音标注与基频共振峰提取 ★ FEATURED ARTICLE
简介《Praat中文学习手册》面向语音学、语言学、心理学及听力学领域的研究者、学生与初学者针对Praat英文界面和功能体系上手门槛较高的问题以中文系统梳理软件操作与语音分析流程。压缩包共214个文件均为html页面整体约281KB内容按主题组织涵盖基本界面、语音导入导出、波形与频谱分析、声调韵律、元音辅音测量、语音合成、脚本编程及教学演示等模块适合离线查阅与按需检索。已有924人学习说明其在语音学入门与软件实操场景中具有一定参考价值。手册通过实例和分步说明将参数含义、操作入口与分析思路对应起来读者可据此完成从声音载入、标注测量到批量脚本处理的练习也可把它当作课程教学和科研分析的辅助资料在反复实践中逐步熟悉Praat的核心工作流。1. 语音分析卡在第一步往往不是技术问题录音采了三十条打开 Praat 却不知道先点哪里好不容易画出语图基频曲线却上下乱跳标注做到一半发现 TextGrid 和音频对不上。这些场景我见过太多问题通常不在理论而在没人把英文界面、对象逻辑和参数含义串成一条能走通的路。这份Praat 中文学习手册做的事情就是拆掉这层门槛把菜单、对话框、脚本命令逐条对译用中文说明每个对象创建后该看什么、改什么、存什么。它适合语言学方向的学生、做语音信号处理的工程师以及需要批量提取声学参数但不想被界面劝退的从业者。手册不替代信号处理教材但它能让你在半小时内跑通“录音→标注→取参数”的完整链路少翻几次词典少走几段弯路。2. 拿到手册先别翻页Praat 的界面逻辑与三个核心对象2.1 为什么 Praat 不是“打开音频就能画图”的软件很多第一次接触 Praat 的人会下意识找“文件→打开→显示波形”这类路径结果在对象窗口里愣住。Praat 采用对象式操作你先把声音、标注、分析结果创建成独立对象再对选中对象执行动作。Sound 对象承载波形TextGrid 对象承载区间标注Pitch、Formant、Intensity 则是从 Sound 派生出来的分析结果。手册的第一部分用一张对象关系图把这件事讲清楚后面所有操作都围绕“先选对象再选动作”展开。理解这一点后面看脚本就不会觉得命令是天上掉下来的。常见做法是打开 Praat 后先看 Objects 窗口再决定是 New 一个 Sound还是 Read from file 载入音频。不要一上来就点 View Edit那是针对已有 Sound 对象的动作。2.2 三个核心对象Sound、TextGrid、Pitch/Formant手册里反复强调的三类对象对应三个落地目标Sound 是输入TextGrid 是时间对齐的标签Pitch/Formant 是量化结果。下表是手册中整理的对象创建路径和常用动作我按实际使用频率做了排序。对象类型创建方式菜单/命令典型动作用途SoundRead from file / New → Sound → Create Sound from formulaView Edit、Save as WAV、To Pitch、To Formant载入或生成音频TextGridNew → TextGrid → Create TextGridView Edit、Save as TextGrid、Duplicate tier区间和点标注Pitch选中 Sound → Analyse periodicity → To PitchGet value at time、Down to PitchTier基频提取Formant选中 Sound → Analyse spectrum → To Formant (burg)Get value at time、Track共振峰提取这张表不是让你背而是让你在手册目录里快速定位。比如你要做标注直接翻到 TextGrid 章节要提取基频翻到 Pitch 章节。每个章节开头都有“前置对象”提示避免在空对象上执行动作导致报错。2.3 界面分区与手册的对照读法Praat 主窗口分三块Objects 列表、动态菜单栏、Info 窗口。动态菜单栏会随选中对象变化这是新手最容易迷路的地方。手册的用法是左边放英文截图右边用中文标注“当前选中 Sound 时出现 View Edit选中 TextGrid 时出现 View Edit 和 Modify”。读手册时不要只看文字要同步打开软件按章节里的编号点一遍。我一般会建议先读第 2 章“对象与菜单”再跳到第 3 章“标注流程”因为标注是多数人最刚需的场景能快速建立正反馈。遇到不认识的按钮先看手册附录的菜单索引不要直接搜网络版本差异容易让你点到废弃功能。3. 从录音到标注用手册里的流程跑通第一段语音3.1 载入音频与采样率检查第一步不是急着画图而是确认采样率。手册里给了一个固定动作载入 Sound 后在 Objects 窗口选中它点 Info 按钮看 “Sampling frequency” 一行。常见录音笔是 44.1 kHz 或 48 kHz而语音分析通常重采样到 16 kHz 或 22.05 kHz 就够了。重采样不是必须但如果你后续要和另一批 16 kHz 的音频做对比统一采样率能避免共振峰上限不一致。手册里推荐用 Resample 命令并给出参数New sampling frequency 填 16000勾选 “Resample” 后点 OK。注意不要直接改原文件重采样后另存为新 Sound 对象保留原始录音。# 载入音频并重采样到 16 kHz Read from file: /path/to/recording.wav sound selected(Sound) Resample: 16000 resampled selected(Sound) Rename: recording_16k上面这段是 Praat 脚本的写法前三行是对象操作selected(Sound)取当前选中的 Sound 对象 IDResample执行重采样Rename改对象名方便后续引用。参数 16000 是目标采样率单位 Hz。如果你的音频本身是 16 kHz这一步可以跳过。脚本里路径要换成你本地的实际路径Windows 下注意用双反斜杠或正斜杠。3.2 创建 TextGrid 并划分标注层标注层tier的设计取决于研究问题。手册建议至少建两层单词层和音素层。实操时先选中 Sound 对象点 Annotate → To TextGrid在弹出的对话框里填 Tier names比如 “word phone”点 OK 后就会生成一个与音频等长的空 TextGrid。然后选中 TextGrid点 View Edit进入标注界面。手册里给了一套快捷键Tab 切换焦点Enter 在光标处插入边界CtrlEnter 删除边界。标注时先把单词边界打出来再在单词层内部细分音素这样不容易乱。每标完一段点 File → Save as TextGrid存成 TextGrid 格式不要存成 txt否则时间信息会丢。# 为选中的 Sound 创建两层 TextGrid sound selected(Sound) To TextGrid: word phone, # 第一个参数是层名空格分隔第二个参数是点层名空表示没有点层To TextGrid的第一个参数是区间层名称用空格分隔多个层第二个参数是点层名称这里留空。创建后 TextGrid 会自动和 Sound 等长。如果你需要点标注比如辅音释放时刻可以在第二个参数里写 “release”但新手建议先用区间层。3.3 边界对齐与保存检查标注最常见的翻车是边界没对齐。手册里有一个检查动作在 TextGrid 编辑器里按 CtrlI打开 “Show intervals” 面板看每个区间的起止时间是否和波形上的过零点或能量突变点吻合。如果发现整体偏移多半是创建 TextGrid 时没有选中对应的 Sound或者 Sound 被重采样后 TextGrid 还是旧长度。解决办法是删掉旧 TextGrid重新对当前 Sound 创建。保存时手册推荐同时存 TextGrid 和 WAV文件名保持一致方便脚本批量读取。另外TextGrid 默认时间精度是 0.0001 秒一般语音分析够用不要手动改精度否则某些旧脚本会读错。4. 基频、共振峰、强度参数面板怎么设才不飘4.1 Pitch 设置floor 和 ceiling 决定曲线生死基频提取的玄学程度一半来自参数。手册里明确写了Pitch 的 floor 和 ceiling 必须覆盖说话人的实际基频范围。成年男声一般 75–300 Hz女声 100–500 Hz儿童可以到 600 Hz。如果你用默认的 75–600 Hz 去分析男声容易出现倍频错误曲线在低端和高端之间跳。手册建议先用手动测量在 Sound 编辑器里选中一段稳定元音点 Pitch → Get pitch看当前光标处的基频值再据此设 floor 和 ceiling。比如测得男声基频 120 Hzfloor 设 60–75 Hzceiling 设 300–400 Hz 即可不要把 ceiling 拉得太高否则算法会把噪声当成高基频。说话人类别推荐 floor (Hz)推荐 ceiling (Hz)备注成年男声60–75300–400避免倍频成年女声75–100500–600窄带分析可到 800儿童100–150600–800视年龄调整To Pitch命令还有 “Time step” 参数手册建议设 0.0自动或 0.01 秒。时间步长太小会增加计算量太大则丢失基频变化细节。分析长录音时可以用 0.01分析单音节时用 0.005 更稳。# 提取基频并保存为 Pitch 对象 sound selected(Sound) To Pitch: 0.01, 75, 400 pitch selected(Pitch) Rename: pitch_male第一行选当前 Sound第二行To Pitch的三个参数分别是时间步长、floor、ceiling。这里 75 和 400 对应成年男声的常用范围。注意To Pitch生成的是 Pitch 对象不是直接出图要再选中 Pitch 对象点 View Edit 才能看到曲线。4.2 Formant 设置LPC 阶数与最大频率的匹配共振峰提取用 Burg 算法时关键参数是 “Maximum formant” 和 “Number of formants”。手册里给的经验值是成年男声最大共振峰设 5000 Hz女声设 5500 Hz儿童设 8000 Hz分析元音时 Number of formants 设 5分析辅音或鼻音时设 4–5。最大频率设低了高共振峰会丢失设高了容易把噪声当成共振峰。手册里有一个快速检查法提取 Formant 后看 F1 和 F2 是否落在合理区间比如成年男声 /a/ 的 F1 约 700–900 HzF2 约 1100–1400 Hz。如果 F1 跑到 200 Hz 以下多半是 LPC 阶数或最大频率设错了。# 提取共振峰参数按男声设置 To Formant (burg): 0.01, 5, 5000, 0.025, 50 formant selected(Formant)To Formant (burg)的五个参数依次是时间步长、共振峰个数、最大频率、窗口长度、预加重频率。窗口长度 0.025 秒是常用值预加重 50 Hz 用来补偿高频衰减。如果你分析的是女声把最大频率改成 5500儿童改成 8000。改完参数后重新提取不要在一个 Formant 对象上反复调参因为对象一旦生成参数就固定了。4.3 Intensity 与脚本取值强度Intensity的默认参数通常够用但手册提醒如果你要比较不同录音的强度必须保证录音增益一致否则强度值没有可比性。Praat 的 Intensity 对象输出的是 dB 值取值范围与录音电平直接相关。手动取值时用Get intensity at time批量取值时用脚本循环。手册里给了一个简单的循环模板按 TextGrid 的区间遍历输出每个区间的平均强度、平均基频和共振峰。这种脚本在手册第 6 章有完整版核心逻辑是先读 TextGrid再对每个区间取中点时间然后调用Get value at time。参数上唯一要注意的是时间点不能落在区间边界上否则可能返回 undefined。取中点最稳。5. 避坑五个高频翻车点与排查顺序5.1 采样率不一致导致共振峰上限打架现象同一批录音有的文件 F3 能出来有的到 F2 就断了。原因部分文件采样率是 44.1 kHz部分被重采样到 16 kHz而 Formant 的最大频率还按 5000 Hz 设16 kHz 采样率的奈奎斯特频率只有 8000 Hz看似能覆盖但实际抗混叠滤波会削弱高频。解决统一重采样到 22.05 kHz 或 16 kHz并把最大频率设为采样率的一半以下。手册里建议在脚本开头加一段检查读入 Sound 后打印采样率不一致就自动重采样。不要依赖耳朵判断直接看 Info 窗口的数字。5.2 TextGrid 与音频长度不匹配现象标注时边界对得上保存后重新打开却整体偏移。原因创建 TextGrid 时选中的不是当前音频或者音频被剪掉了一段但 TextGrid 没更新。解决重新对当前 Sound 执行To TextGrid不要手动改 TextGrid 的时长。如果已经标了很多可以先把旧 TextGrid 的区间文本导出再导入新 TextGrid。手册里给了一个补救脚本读旧 TextGrid读新 Sound按时间比例缩放边界但只适用于线性变速剪辑造成的偏移无法自动修复。5.3 基频曲线倍频/半频跳变现象Pitch 曲线在某个时段突然翻倍或减半听起来像八度跳。原因floor 设得太低算法把周期当成了双倍周期或者 ceiling 设得太高噪声被误判为高基频。解决先用手动Get pitch在稳定段测一个参考值再把 floor 设为参考值的 0.5–0.7 倍ceiling 设为参考值的 2–3 倍。如果曲线仍然跳尝试把时间步长从 0.01 改成 0.005或者改用To Pitch (ac)的 autocorrelation 方法对噪声更稳。5.4 脚本路径与对象选择错误现象脚本跑一半报 “No Sound selected” 或 “File not found”。原因Praat 脚本里的相对路径是相对于脚本文件所在目录不是当前工作目录另外selected(Sound)在对象窗口没有选中任何 Sound 时返回 0后续命令就会作用在空对象上。解决脚本里统一用绝对路径或者在开头用Create folder确认输出目录存在。选择对象前先判断numberOfSelected(Sound)为 0 就exit并打印提示。手册里所有示例脚本都加了这层保护抄的时候不要省略。5.5 保存格式选错导致数据丢失现象存出来的 TextGrid 用 Excel 打开是乱码或者时间信息不见了。原因TextGrid 是纯文本格式但编码和分隔符有固定规则直接改扩展名或另存为 CSV 会破坏结构。解决TextGrid 一律用Save as TextGrid需要表格数据时用脚本提取区间信息写成 CSV不要手动转换。手册里提供了一个Write intervals to CSV的脚本片段按行输出区间起止时间和标签用逗号分隔Excel 可以直接打开。注意标签里不要有英文逗号否则列会错位。6. 进阶验证把手册当检查表跑一遍批量脚本与交叉验证手册读到后半程最有价值的用法不是从头翻而是把它当成检查表。我现在的习惯是每接一批新录音先跑三个检查项——采样率是否统一、TextGrid 层名是否和脚本匹配、Pitch 的 floor/ceiling 是否覆盖实际范围。这三项在手册第 5 章有对应的排查条目花五分钟过一遍比后面返工两小时划算。批量处理时我会把手册里的单文件脚本改成循环版读一个文件夹下所有 WAV对每个音频自动创建 TextGrid如果还没有提取基频、共振峰和强度最后输出一个汇总 CSV。下面这个脚本骨架可以直接抄只需要改路径和层名。# 批量提取基频和共振峰输出 CSV input_dir$ /path/to/wavs/ output_file$ /path/to/output.csv deletefile: output_file$ appendFileLine: output_file$, file,interval,label,f0,f1,f2 Create Strings as file list: fileList, input_dir$ *.wav n Get number of strings for i from 1 to n selectObject: Strings fileList filename$ Get string: i sound Read from file: input_dir$ filename$ To Pitch: 0.01, 75, 400 pitch selected(Pitch) selectObject: sound To Formant (burg): 0.01, 5, 5000, 0.025, 50 formant selected(Formant) # 假设已有同名 TextGrid读入并遍历区间 textgrid Read from file: input_dir$ filename$ - .wav .TextGrid selectObject: textgrid n_intervals Get number of intervals: 1 for j from 1 to n_intervals label$ Get label of interval: 1, j if label$ t Get start time of interval: 1, j t_mid t (Get end time of interval: 1, j) - t) / 2 selectObject: pitch f0 Get value at time: t_mid, Hertz, linear selectObject: formant f1 Get value at time: 1, t_mid, hertz, linear f2 Get value at time: 2, t_mid, hertz, linear appendFileLine: output_file$, filename$ , string$(j) , label$ , string$(f0) , string$(f1) , string$(f2) endif endfor selectObject: sound, pitch, formant, textgrid Remove endfor这段脚本的核心是对象切换每读入一个文件先生成 Pitch 和 Formant再读同名 TextGrid按区间取中点时间分别从 Pitch 和 Formant 对象取值。参数上Get value at time的第三个参数 “linear” 表示线性插值如果时间点没有精确采样值Praat 会插值。注意string$(f0)在 f0 为 undefined 时会输出 “--undefined--”后续在 CSV 里要过滤掉。跑完脚本后我一般会抽 5% 的文件做交叉验证用另一个工具比如 Python 的 parselmouth提取同一段的基频对比差值超过 10 Hz 就回去查参数。手册里没有绑定任何外部工具但这种交叉验证思路在手册第 6 章的“结果检查”小节里有提照着做能发现不少隐藏的参数问题。从那以后我每次批量处理前都强制走一遍采样率检查和对象选择检查哪怕文件看起来一模一样。语音分析里最贵的成本不是算法而是参数设错后重新跑一遍标注。希望这份手册能帮你把前期的试错压缩到最低把时间留给真正需要判断的声学现象。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站