Praat脚本-003 | 一种高效的将连续录制的音频切分的方案

文章目录

    • 前言
      • 引题
      • 要点
    • 数据Demo
    • 技术方案
      • 步骤一 人工定句子边界
      • 步骤二 利用脚本切分
        • 第一种情况,直接使用数字保存
        • 第二种情况,利用标注的内容作为文件名
    • 运行脚本
    • 特别说明
    • 如何获取脚本
  • 关注
  • 版权说明

前言

引题

在语音处理过程中,整理语料,录音,再进行标注,是一个非常重要并且基础的步骤。有很多公司或者团队在录音的时候有专门写的软件,可以做到一次播放一句,然后录制完成,再点下一句,自动保存;但是,有一些工作受到条件限制,或者就是为了录制一些自然对话,在录音时比较高效的做法是让录音人一次录制比较长的时长,例如半小时到一小时是,这样的情形想录一句保存一句,是不可能的。

这样录出来的语音存在的问题是,在标注时,声音太长,会很难处理,Praat在标注时内存也比较卡,不好检索。这里要介绍的方案就是通过脚本辅助人工,能够将这些句子切分出来,标注时以切分出来的文件为单位,操作会容易很多。具体的方案是通过在Praat里先手工完成句子边界的标注,即,假设你这个录音语料是10分钟,大概有200句话,那么需要手工给出这200句的边界,然后再利用脚本,自动切分成200句wav,并按自己的需要给出文件名定义。

要点

中间的人工工作是必不可少的,因为这样录制的语料,经常会有一个问题就是中间有一些是需要略过的,比如发音人的咳嗽,等其它噪声。这时候需要人工判断是否留下这段语音。另外也可以考虑比如用CoolEdit打开这段10分钟的录音,一段一段的手工截取,再保存。这也不错,但是有一个问题就是,人工难免手抖,难免眼睛迷糊,在你保存文件名的时候,是不是那么清楚的文件名都保存正确,这是个疑问,而用脚本操作,完全没有这个担心。

数据Demo

这里以‘央广网’上,一段新闻和报纸摘要的语音为例。这段语料如下,实际录音时可能要处理的句子更长。

里约奥运会进入第十一个比赛日。昨夜今晨,中国选手获得花样游泳双人银牌以及田径男子三级跳铜牌。有请中国广播奥运联盟、央广记者梁悦带来比赛快报。在里约奥运会田径男子三级跳远比赛中,卫冕冠军、美国选手克里斯蒂安-泰勒以17米86获得冠军。中国选手董斌以17米58的个人最好成绩获得第三名,他的队友曹硕以17米13的成绩获得第四名。这是中国选手在这个项目中取得的最佳战绩。比赛结束以后,淡定的董斌表示,这是中国田径人多年努力的成果。

我们期望将这一段处理成以下几个句子:

  1. 里约奥运会进入第十一个比赛日。

  2. 昨夜今晨,中国选手获得花样游泳双人银牌以及田径男子三级跳铜牌。

  3. 有请中国广播奥运联盟、央广记者梁悦带来比赛快报。

  4. 在里约奥运会田径男子三级跳远比赛中,卫冕冠军、美国选手克里斯蒂安-泰勒以17米86获得冠军。

  5. 中国选手董斌以17米58的个人最好成绩获得第三名,他的队友曹硕以17米13的成绩获得第四名。

  6. 这是中国选手在这个项目中取得的最佳战绩。

  7. 比赛结束以后,淡定的董斌表示,这是中国田径人多年努力的成果。

经过这样的切分之后,显得更有条理,而且每一句长度适中,在处理的时候非常方便,而且如果想检索某个词,字时,非常容易的可以找到相应的文件。同理,这样的处理方式也可以用在处理录音词语或者字上,比如要处理上千个词或者字,录音时录音人一次完成,那么就需要通过这个方式,将这整个声音切成独立的词或者字。

技术方案

步骤一 人工定句子边界

首先第一步,需要在Praat中将这几个句子的边界手工给出,如下图,标注s的位置就是我们想切分出来的句子,共7句和上面的内容是对应的。如果有同学怕弄乱了,用序列1-7来标注,也是可以的,脚本里设定的条件是非空的值,就会把这句保存起来。

这个操作就是使用Praat简单的标注的操作,生成一层TextGrid,然后给出边界,并且给出序号即可。如果对这个操作并不熟练,可以查阅相关基础的操作指南(http://blog.csdn.net/shaopengfei/article/details/51363464)。完成这个标注,注意保存这个TextGrid

Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第1张图片
同样,如果你的语料是一批词语,也是可以的。脚本会将下面标出来的三个词切分并保存起来。
Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第2张图片
注意,边界不需要特别准备,脚本设定了根据你的边界,可以前后再扩展比如0.2秒,0.3秒。。。这都是可以的。所以这个技巧也会让你更快的完成人工这一步。程序默认是0.3秒,在如下这里修改。

##### extend 0.3 seconds at the begin and end boundary
start = start - 0.3
end = end + 0.3

步骤二 利用脚本切分

标注好之后,就可以执行脚本,进行切分了。脚本给出两个选项,主要是针对保存后的文件名。

第一种情况,直接使用数字保存

原文件名是:

baozhai.wav

经过切分之后,假设我们切出来7个文件,文件名是:

baozhai_0001.wav
baozhai_0002.wav
baozhai_0003.wav
baozhai_0004.wav
baozhai_0005.wav
baozhai_0006.wav
baozhai_0007.wav

新的文件名构成是,原来的文件,加上序号,序号设置为4位,这个数值也是可以自己定义的。

第二种情况,利用标注的内容作为文件名

原文件名是:

000001.wav

经过切分之后,假设我们切出来3个文件,文件名分别是:

000001_卡尔普_0001.wav
000001_陪外孙_0002.wav
000001_玩滑梯_0003.wav

新的文件名构成是,原来的文件,加上标注时候的内容,以后序号,带序号的目的是防止重复,比如你这一句里有两个词是重复的,如果没有序号,那么这两个文件就会被覆盖了。

运行脚本

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

  1. 设置你的长音频所在的目录,这里是LongWavToDo_1\
  2. 设置需要保存的切分后的文件夹名称,这里是small_wavs_1\
  3. 设置标注是否需要的句子的那个层,这里就是1层;
  4. 设置mark string,这里是如果你的标注比较复杂,要专门保留某种标记的,比如我想单独保存aa这样的音段,那么需要设置为aa,这时候如果运行脚本,将会把所有音段aa都切分出来保存;默认为空,表示所有非空的都保存;
  5. 设置保存方式①,这里如果选FileName_markString_order是指上面介绍的第二种情况;如果选FileName_order是指上面介绍的第一种情况;
  6. 设置序号的位数,这里是默认为4
    Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第3张图片

特别说明

最近好几位同学问起,我的标注里并没有任何的标记,我就是想把我这个音频分成几部分,比如我是这样做的:
Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第4张图片
我就是要把我的文件只是简单的分成6部分,这样如何操作?确实小编之前没有想到这种情况。现在对脚本增加一部分选项。在运行脚本的时候请选择第三项,首先第一步,mark string这里仍然置空, 第二步,请选择下面的②处的第3项,FileName_order(no mark)。这样就可以把你的文件 切割成6份了。
Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第5张图片

如何获取脚本

https://github.com/feelins/Praat_Scripts

本站所有Praat脚本都可以在上述github的项目目录里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows在自己的电脑上通过git clone将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
Praat脚本-003 | 一种高效的将连续录制的音频切分的方案_第6张图片

本文的代码是03-long_sound_splits\Split_Long_Sound_Files.Praat。点进去之后,还有附带的示例文件,同学可练习使用。脚本里有我的邮箱,有任何问题都可以来信咨询。

关注

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

在这里插入图片描述

版权说明

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

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

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

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

你可能感兴趣的:(Praat,Praat,脚本,长音频切分)