资讯动态

Praat中文学习手册:从界面操作到脚本批处理与声调分类实战

发布时间:2026/10/17 7:41:22 来源:尧图企业网站定制
简介这份 praat 中文学习手册面向语音学研究者、语言学与心理学专业学生及对语音科学感兴趣的初学者帮助读者系统掌握 praat 在语音信号分析、处理与展示方面的操作。手册围绕软件基本界面、语音文件导入导出、波形与频谱分析、声调韵律研究、元音辅音测量、语音合成、脚本编程及教学演示等模块展开通过实例与步骤降低上手门槛。资源包共 214 个文件全部为 html 网页文档压缩后约 281KB内容涵盖对象类型、脚本编辑器、公式函数、TextGrid 编辑器等主题页面便于按目录逐项查阅与离线浏览。目前已有 920 人学习下载适合希望从零建立 praat 操作框架、并在实际语音研究中反复查阅的读者。1. 从一次标注翻车说起这份手册到底能帮你省下多少时间去年帮一个做方言调查的团队处理录音对方发来 40 条 wav要求标注声调、提取基频、再导出 TextGrid。我心想 Praat 脚本跑一遍的事结果卡在第一步——他们用的 Praat 版本是 6.0 的老界面菜单路径和我记忆里的 6.4 完全对不上光找“To Pitch”就翻了十分钟。更麻烦的是团队里没人系统学过 Praat全靠零散搜到的英文帖子拼凑操作一个“基频上限设多少”的问题三个人给出三个答案。这就是我拿到这份《Praat 中文学习手册》时的真实心态不是缺资料是缺一份能把界面、参数、脚本、坑点串起来的中文材料。Praat 本身是阿姆斯特丹大学开发的语音分析软件功能极强但它的官方文档是英文的而且偏重算法说明对“我该点哪个按钮”“这个参数填多少”这类操作问题着墨不多。这份手册的价值就在于它把 Praat 从安装到脚本批处理的全流程用中文重新组织了一遍覆盖了录音标注、基频提取、共振峰分析、脚本自动化这几个最常用的场景。如果你正在做语音学实验、方言调查、声学分析或者只是需要批量处理一批录音这份手册能让你少走很多我当年走过的弯路。2. 手册内容拆解从界面汉化到脚本批处理的四个层次2.1 界面与基础操作先搞清楚 Praat 的“对象窗口”逻辑Praat 最让人不适应的地方是它没有传统意义上的“打开文件—编辑—保存”流程。它的核心是对象窗口Objects你先把声音文件读进来变成一个“Sound 对象”然后对这个对象执行各种操作操作结果又变成新的对象比如 Pitch 对象、TextGrid 对象。很多人第一次用 Praat 会懵就是因为习惯了 Word 那种“所见即所得”的编辑模式。手册里对这块讲得比较清楚我按自己的理解重新梳理一下关键路径启动 Praat 后你会看到两个窗口Praat Objects对象列表和Praat Picture绘图窗口。日常操作 90% 在 Objects 窗口完成。读入声音Read from file...选择 wav 或 mp3。注意 Praat 对 mp3 的支持需要额外解码器建议统一转成 wav 再处理。查看波形和频谱选中 Sound 对象点View Edit会打开编辑窗口。这里可以手动标注、看基频曲线、看频谱图。标注完成后从编辑窗口或对象窗口生成 TextGridAnnotate To TextGrid...。手册里配了界面截图标注了每个菜单的中文含义。我建议新手先把“对象窗口”和“编辑窗口”的关系搞清楚不然后面学脚本会非常痛苦——因为脚本里每一步都是在操作对象而不是操作“文件”。2.2 标注系统TextGrid 的层级设计与边界对齐TextGrid 是 Praat 的标注核心但它的设计逻辑和很多人想的不一样。一个 TextGrid 可以包含多个Tier层每个 Tier 可以是IntervalTier区间层或PointTier点层。区间层用来标音素、音节、词这类有持续时间的单位点层用来标声门塞音、爆破点这类瞬时事件。手册里给了一个方言调查的典型配置Tier 名称类型用途边界对齐方式PhoneIntervalTier音素标注与相邻音素边界严格对齐SyllableIntervalTier音节标注边界必须与 Phone 层边界重合TonePointTier声调起点标在韵母起始位置WordIntervalTier词汇标注边界与 Syllable 层对齐这里有个血泪经验Tier 之间的边界必须严格对齐。比如 Syllable 层的边界如果和 Phone 层差了几毫秒后续用脚本提取“每个音节的基频均值”时就会出错——脚本会按 Syllable 边界去切 Pitch 对象边界不对齐就会切到相邻音节的段。手册里专门用一节讲“边界吸附”操作在编辑窗口里拖动边界时按住 Shift 键边界会自动吸附到最近的零交叉点或相邻 Tier 的边界上。另一个容易翻车的地方是PointTier 的标注位置。点层标注的是“时间点”不是“时间段”。如果你在点层上标了一个声调起点但实际基频曲线在这一点还没开始提取出来的值就是错的。手册建议点层标注前先看一遍基频曲线确认起点位置再标。2.3 声学参数提取基频、共振峰、强度的参数怎么设这是手册里最“硬”的部分也是最能体现中文手册价值的地方——英文文档里这些参数往往只给一个默认值不解释为什么。手册里对每个参数都给了适用场景和调整建议。基频Pitch提取# 对选中的 Sound 对象提取基频 To Pitch: 0.0, 75, 600 # 参数含义时间步长 0.0自动基频下限 75 Hz上限 600 Hz时间步长设为 0 表示自动Praat 会根据信号长度自动计算。手动设置时一般取 0.01 秒或 0.005 秒步长越小曲线越平滑但计算越慢。基频下限男声建议 60–80 Hz女声建议 100–150 Hz。设太低会把噪声当成基频设太高会漏掉低音。基频上限成年男声一般不超过 300 Hz女声不超过 500 Hz。儿童语音可以设到 600 Hz。手册里特别提醒基频提取前一定要先做“去趋势”或“预加重”否则低频噪声会干扰基频检测。Praat 的To Pitch内部已经做了滤波但如果录音质量差建议先手动切除静音段。共振峰Formant提取# 提取共振峰 To Formant (burg): 0.0, 5, 5500, 0.025, 50 # 参数时间步长 0.0最大共振峰数 5上限频率 5500 Hz窗长 0.025 秒预加重 50 Hz最大共振峰数成年男性一般 4–5 个女性和儿童可能需要 5–6 个。上限频率男性 5000 Hz女性 5500 Hz儿童 8000 Hz。设低了会丢掉高共振峰设高了会引入高频噪声。窗长0.025 秒是默认值适合大多数语音。如果分析的是快速辅音可以缩短到 0.005 秒。手册里给了一个对照表我把它简化成下面这样方便快速查参数男声女声儿童Pitch 下限60–80 Hz100–150 Hz150–200 HzPitch 上限300 Hz500 Hz600 HzFormant 上限5000 Hz5500 Hz8000 Hz最大共振峰数5562.4 脚本自动化批量处理 100 个文件的正确姿势手动操作只能应付几个文件真正干活必须靠脚本。Praat 的脚本语言叫Praat Script语法类似 Python 但更简单专门为语音处理设计。手册里给了一个批量提取基频并导出 CSV 的完整脚本我把它拆解一下关键部分# 批量提取基频并导出 form 批量处理 sentence 输入目录 ./ sentence 输出文件 result.csv endform # 创建输出文件并写入表头 writeFileLine: outputFile$, 文件名,时长,基频均值,基频标准差 # 遍历目录下所有 wav 文件 fileList Create Strings as file list: list, inputDir$ *.wav n Get number of strings for i from 1 to n selectObject: fileList fileName$ Get string: i sound Read from file: inputDir$ fileName$ # 提取基频 selectObject: sound pitch To Pitch: 0.0, 75, 600 # 获取统计值 selectObject: pitch meanPitch Get mean: 0, 0, Hertz stdevPitch Get standard deviation: 0, 0, Hertz # 获取时长 selectObject: sound duration Get total duration # 写入结果 appendFileLine: outputFile$, fileName$, ,, duration, ,, meanPitch, ,, stdevPitch # 清理对象避免内存溢出 removeObject: sound, pitch endfor # 清理文件列表对象 removeObject: fileList逻辑说明form ... endform定义了一个简单的输入界面运行脚本时会弹出对话框让你填目录和输出文件名。Create Strings as file list生成一个文件列表对象Get number of strings拿到文件数量。循环里每次读取一个 wav提取基频取均值和标准差然后追加写入 CSV。removeObject是关键Praat 不会自动回收对象循环 100 次不清理会爆内存。参数说明To Pitch: 0.0, 75, 600里的 75 和 600 要根据录音对象调整不能照抄。Get mean: 0, 0, Hertz里的两个 0 表示时间范围从 0 到 0即整个文件。如果要只分析某个时间段改成具体秒数。appendFileLine每次追加一行适合大批量处理。如果文件不多也可以用writeFileLine一次性写入。手册里还提醒脚本文件保存为 .praat 后缀在 Praat 里通过Run Run script...执行。如果脚本报错先检查文件路径里有没有中文或空格——Praat 对中文路径的支持不稳定建议全用英文路径。3. 避坑与排查五个让我熬夜的 Praat 常见问题3.1 基频曲线断断续续像被狗啃过现象提取出来的基频曲线中间缺了好几段或者跳变到几百 Hz 的异常值。原因最常见的是基频上下限设错了。比如分析女声时下限还留着默认的 75 Hz结果把清音段的噪声当成了基频或者上限设了 500 Hz但录音里有 600 Hz 的共振峰干扰。另一个原因是录音本身有削波或低频噪声。解决先看波形确认没有削波。然后调整基频范围女声下限提到 100–150 Hz上限提到 500–600 Hz。如果还有断点在编辑窗口里手动检查断点位置的波形必要时先做Filter (stop Hann band)去掉低频噪声。3.2 TextGrid 和音频对不上标注整体偏移现象标注的时候明明对齐了导出后再打开发现标注整体前移或后移了几十毫秒。原因Praat 的时间基准是音频文件的采样点如果音频文件被外部工具重新编码过比如用某音频软件降噪后导出采样点可能发生了变化但 TextGrid 里的时间戳还是旧的。解决标注前先把音频转成标准 wav16 bit PCM采样率统一标注后不要再对音频做任何处理。如果必须处理处理完重新标注。手册里建议原始录音、处理后的音频、TextGrid 三者分开存放用文件名关联不要覆盖。3.3 脚本跑一半报错“Object not found”现象批量脚本跑到第 30 个文件时突然报错提示找不到对象。原因Praat 脚本里selectObject是按对象 ID 选的如果循环里创建了对象但没清理对象 ID 会越来越乱最终选错对象。另一个常见原因是文件列表里混入了非 wav 文件比如 .DS_Store 或 .txt读取时失败。解决每次循环结束前用removeObject清理创建的对象。文件列表生成后先检查一遍过滤掉非 wav 文件。手册里给了一个过滤写法if right$(fileName$, 4) .wav # 处理逻辑 endif3.4 共振峰提取结果全是 NaN现象提取出来的共振峰数据全是 NaN 或 0。原因上限频率设得太低把共振峰截掉了或者窗长设得太短频谱分辨率不够。另一个可能是音频本身是静音段。解决把上限频率调到 5500 Hz 以上窗长保持 0.025 秒。如果还是 NaN检查音频段是否有实际语音。手册里建议共振峰分析前先做一遍基频提取确认有语音段再分析。3.5 中文路径导致脚本无法读取文件现象脚本在英文路径下正常换成中文路径就报错“File not found”。原因Praat 的底层文件系统接口对非 ASCII 路径支持不完善尤其是 Windows 系统下。解决所有工作目录用英文命名文件名也用英文或拼音。如果必须用中文先在 Praat 外部把文件重命名处理完再改回来。手册里把这个坑放在第一章就讲了但很多人不看直到翻车才回来找。4. 进阶技巧用 Praat 做声调自动分类的验证方法手册最后一章讲了一个比较实用的进阶场景用基频曲线做声调自动分类。这个在方言调查和汉语教学里很常用但很多人卡在“提取了基频之后怎么用”这一步。手册给了一个基于基频均值和斜率的简单分类方法我把它整理成可复现的步骤。4.1 声调特征提取均值和斜率就够了汉语普通话四个声调的核心区别在基频曲线的走向阴平高平、阳平上升、上声低降升、去声高降。用两个特征就能大致区分基频均值和基频斜率用线性回归拟合基频曲线。# 提取基频均值和斜率 selectObject: pitch meanPitch Get mean: 0, 0, Hertz # 获取基频点序列 nPoints Get number of frames sumX 0 sumY 0 sumXY 0 sumX2 0 for j from 1 to nPoints time Get time from frame: j freq Get value at time: time, Hertz, linear if freq undefined sumX sumX time sumY sumY freq sumXY sumXY time * freq sumX2 sumX2 time * time endif endfor slope (nPoints * sumXY - sumX * sumY) / (nPoints * sumX2 - sumX * sumX)逻辑说明Get number of frames拿到基频帧数。循环里逐帧读取时间和频率累加求和。最后用最小二乘法算斜率。斜率正值为上升调负值为下降调接近零为平调。参数说明Get value at time里的linear表示线性插值如果基频曲线有断点插值会跳过未定义段。斜率计算前要确保nPoints足够大至少 10 帧否则斜率不稳定。4.2 分类阈值怎么定用已知样本反推有了均值和斜率下一步是定阈值。手册建议不要拍脑袋定用一批已知声调的样本反推。比如你手头有 20 个已标注的阴平样本算出它们的均值和斜率分布取均值加减两倍标准差作为阈值范围。声调基频均值范围女声斜率范围阴平220–280 Hz-0.5–0.5阳平180–240 Hz1.0–3.0上声150–220 Hz-2.0–0.5去声200–280 Hz-3.0–-1.0这个表只是示例实际阈值要根据录音人和录音设备调整。手册里强调声调分类没有万能阈值必须用你自己的数据校准。4.3 验证方法混淆矩阵和人工抽检分类做完后怎么知道准不准手册给了两个方法方法一混淆矩阵。把分类结果和人工标注结果做交叉表看每个声调的召回率和精确率。如果某个声调召回率低于 80%说明阈值需要调整。方法二人工抽检。从每个声调类别里随机抽 10 个样本在 Praat 里打开波形和基频曲线肉眼判断分类是否正确。这个方法虽然慢但能发现混淆矩阵看不出来的问题——比如某个样本的基频曲线本身就有断点导致斜率计算错误。我自己的习惯是每次做完自动分类先跑一遍混淆矩阵再抽检 5% 的样本。如果抽检发现错误率超过 10%就回去检查基频提取参数而不是急着调分类阈值。因为大部分分类错误根源都在基频提取那一步。从那以后我每次处理新录音都强制走一遍“先看波形→再调基频参数→最后跑分类”的流程不再直接套用上一次的参数。希望这份手册和上面的拆解能帮你在 Praat 里少熬几个夜。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑