Praat脚本-013 | 无需标注自动切除音频首尾静音段

介绍如何使用Praat脚本自动检测并裁剪音频文件首尾的静音段,提高标注效率。

引题

在录音完成或者从别处得到一批音频之后,在对音频进行标注之间,除了以前提到的需要查看噪声情况,查看音量大小,另外一个问题就是需要查看每一句话,首尾的静音段是否过长?比如以下的句子,它的首尾静音段时长达到了1-2秒
在这里插入图片描述
这样就造成一个困扰,在标注的时候每次听音都要浪费这多余的几秒种,在讲究效率的今天,这显然是比较浪费时间的。在其它编程语言中如Python,它是有专门的包处理音频的,是可以截取首尾静音段的。使用Praat脚本也可以达到这个目的,因为Praat也有一个功能是自动检测到静音段的。尤其是录音条件良好,在首和尾的静音段

操作方法

首先介绍一下这个操作,读进来一个wav之后,点击右侧的Annotate,再点击To TextGrid(silence)...
在这里插入图片描述
这时候会弹出一个对话框,这里面的设置可以默认不动。有兴趣的可以自行调整,会影响到得到的静音段边界的位置,以及容错率等。
在这里插入图片描述
这时候我们得到一个TextGrid
在这里插入图片描述
和音频同时打开之后是这样的,由于这句话的底噪很小,所以它的对静音段的判断还是非常准确的。至于中间也判断出来静音段,这个是没有办法避免的。而我们最需要的其实是第一个,和最后一个静音段。利用这两个静音段,我们可以自由决定保留多长的时长。
在这里插入图片描述
将以上的一系列操作写成脚本就可以了。

运行脚本

本文的代码下载地址见下文(获取脚本部分)是13-cut_silence/Cut_Wav_TextGrid.Praat。脚本里有我的邮箱,有任何问题都可以来信咨询。

打开Praat之后,选择PraatOpen Praat Script...,打开这个脚本,然后在脚本窗口选择RunRun,或者直接使用快捷键Ctrl+R,在弹出来的对话框里,设置以下几个地方:

  1. 设置你的wav所在的目录,这里因为是在Windows系统,所以路径斜线是\,如果你是在Mac使用,将这个斜线方向反一下就好;
  2. 同样的方法设置保存wav所在的目录;
  3. 设置你需要对这个wav保存的时长,这里是对首尾,保留0.1秒,注意如果你首尾的时候不足0.1秒,脚本是不会对音频进行切分的;
    在这里插入图片描述

设置完毕,点击OK,运行脚本,我们来对比一下切分前后的wav,下图上半部分是切分之前的,下图就是利用上面的脚本自动切分之后的,可以看到首尾,被保留了0.1秒的静音段时长,如果你想保留0,那么就设置0就可以了。
在这里插入图片描述

获取脚本

https://github.com/feelins/Praat_Scripts

本站所有Praat脚本都可以在上述github的项目目录里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows在自己的电脑上通过git clone将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
在这里插入图片描述

关注

关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。

在这里插入图片描述

版权说明

1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;

2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;

3、转载或者引用本文内容请注明来源及原作者;

4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。

### 使用 Praat 脚本检测和处理音频中的静音 Praat 是一种强大的语分析工具,其内置的脚本功能可以用于自动化各种任务,包括检测和去除音频文件中的静音。以下是实现这一目标的具体方法。 #### 方法概述 通过编写 Praat 脚本自动检测并移除音频首尾静音部分,能够显著提高工作效率。此过程依赖于 Praat 的 `To TextGrid` 和 `Extract part` 功能,这些功能允许基于特定条件分割音频[^2]。 --- #### 实现步骤说明 以下是一个完整的 Praat 脚本示例,该脚本会读取指定目录下的所有 `.wav` 文件,并自动删除每条音频开头和结尾的静音部分: ```praatscript form Fill in the parameters { sentence directory "Directory with .wav files:" 'C:/path/to/audio/files/' positive threshold "Silence intensity threshold (in dB):" -40 } button "Run script" # 获取参数 directory$ = Get string$ threshold = Get number$ # 遍历目录中的所有 WAV 文件 files$[] = Create Strings as file list: "list", directory$, "*.wav" nFiles = Get number of strings for i to nFiles fileName$ = files$[i] # 加载当前音频文件 Read from file: directory$ + "/" + fileName$ # 创建一个 TextGrid 对象以标记非静音区域 To TextGrid (silences): threshold, 0.1, 0.1, 0.95, "VOT", "silent", "sounding" # 提取消后的音频部分 Extract part between boundaries: 1, "yes" # 将结果保存到新文件名中(附加 _trimmed) baseName$ = Remove extension$(fileName$) Write to WAV file: directory$ + "/trimmed_" + baseName$ + ".wav" endfor ``` 上述脚本的功能如下: - 用户可以通过表单输入音频所在的路径以及定义静音强度阈值(单位为分贝)。低于设定阈值的部分会被视为静音- 利用循环结构逐一加载指定目录内的 `.wav` 文件。 - 借助 `To TextGrid (silences)` 函数识别出静音区间。 - 应用 `Extract part between boundaries` 来提取有效声区间的子波形。 - 处理完毕后生成新的修音频文件,存储在同一目录下,名称前缀加上 `_trimmed` 表明已裁过的状态。 --- #### 关键函数解释 1. **`To TextGrid (silences)`** 此命令依据给定的能量水平区分无声与有声阶,并创建相应的标注层。它接受多个参数调整敏感度设置,例如最小持续时间和最大间隔比例等。 2. **`Extract part between boundaries`** 它按照先前建立的时间边界选取感兴趣的片作为独立对象返回。这里选择的是第一个发声至最后一个发声之间的范围。 3. **`Write to WAV file`** 输出最终修改好的版本回磁盘上永久保留下来。 --- #### 注意事项 尽管这种方法适用于大多数常规场景,但在某些特殊情况下可能需要额外注意: - 如果背景噪较大,则简单的能量门限法可能会误判实际沉默时- 当存在重叠话语或其他复杂现象时,单纯依靠幅度判断未必足够可靠,此时可考虑引入更高级别的特征提取技术辅助决策[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值