在语音处理过程中,整理语料,录音,再进行标注,是一个非常重要并且基础的步骤。有很多公司或者团队在录音的时候有专门写的软件,可以做到一次播放一句,然后录制完成,再点下一句,自动保存;但是,有一些工作受到条件限制,或者就是为了录制一些自然对话,在录音时比较高效的做法是让录音人一次录制比较长的时长,例如半小时到一小时是,这样的情形想录一句保存一句,是不可能的。
这样录出来的语音存在的问题是,在标注时,声音太长,会很难处理,Praat
在标注时内存也比较卡,不好检索。这里要介绍的方案就是通过脚本辅助人工,能够将这些句子切分出来,标注时以切分出来的文件为单位,操作会容易很多。具体的方案是通过在Praat
里先手工完成句子边界的标注,即,假设你这个录音语料是10分钟
,大概有200句话
,那么需要手工给出这200句
的边界,然后再利用脚本,自动切分成200句wav
,并按自己的需要给出文件名定义。
中间的人工工作是必不可少的,因为这样录制的语料,经常会有一个问题就是中间有一些是需要略过的,比如发音人的咳嗽,等其它噪声。这时候需要人工判断是否留下这段语音。另外也可以考虑比如用CoolEdit
打开这段10分钟
的录音,一段一段的手工截取,再保存。这也不错,但是有一个问题就是,人工难免手抖,难免眼睛迷糊,在你保存文件名的时候,是不是那么清楚的文件名都保存正确,这是个疑问,而用脚本操作,完全没有这个担心。
这里以‘央广网’上,一段新闻和报纸摘要的语音为例。这段语料如下,实际录音时可能要处理的句子更长。
里约奥运会进入第十一个比赛日。昨夜今晨,中国选手获得花样游泳双人银牌以及田径男子三级跳铜牌。有请中国广播奥运联盟、央广记者梁悦带来比赛快报。在里约奥运会田径男子三级跳远比赛中,卫冕冠军、美国选手克里斯蒂安-泰勒以17米86获得冠军。中国选手董斌以17米58的个人最好成绩获得第三名,他的队友曹硕以17米13的成绩获得第四名。这是中国选手在这个项目中取得的最佳战绩。比赛结束以后,淡定的董斌表示,这是中国田径人多年努力的成果。
我们期望将这一段处理成以下几个句子:
里约奥运会进入第十一个比赛日。
昨夜今晨,中国选手获得花样游泳双人银牌以及田径男子三级跳铜牌。
有请中国广播奥运联盟、央广记者梁悦带来比赛快报。
在里约奥运会田径男子三级跳远比赛中,卫冕冠军、美国选手克里斯蒂安-泰勒以17米86获得冠军。
中国选手董斌以17米58的个人最好成绩获得第三名,他的队友曹硕以17米13的成绩获得第四名。
这是中国选手在这个项目中取得的最佳战绩。
比赛结束以后,淡定的董斌表示,这是中国田径人多年努力的成果。
经过这样的切分之后,显得更有条理,而且每一句长度适中,在处理的时候非常方便,而且如果想检索某个词,字时,非常容易的可以找到相应的文件。同理,这样的处理方式也可以用在处理录音词语或者字上,比如要处理上千个词或者字,录音时录音人一次完成,那么就需要通过这个方式,将这整个声音切成独立的词或者字。
首先第一步,需要在Praat
中将这几个句子的边界手工给出,如下图,标注s
的位置就是我们想切分出来的句子,共7句和上面的内容是对应的。如果有同学怕弄乱了,用序列1-7来标注,也是可以的,脚本里设定的条件是非空的值,就会把这句保存起来。
这个操作就是使用Praat
简单的标注的操作,生成一层TextGrid
,然后给出边界,并且给出序号即可。如果对这个操作并不熟练,可以查阅相关基础的操作指南(http://blog.csdn.net/shaopengfei/article/details/51363464
)。完成这个标注,注意保存这个TextGrid
。
同样,如果你的语料是一批词语,也是可以的。脚本会将下面标出来的三个词切分并保存起来。
注意,边界不需要特别准备,脚本设定了根据你的边界,可以前后再扩展比如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
之后,选择Praat
,Open Praat Script...
,打开这个脚本,然后在脚本窗口选择Run
,Run
,或者直接使用快捷键Ctrl+R
,在弹出来的对话框里,设置以下几个地方,本文例子的目录都在脚本目录下:
LongWavToDo_1\
;small_wavs_1\
;1
层;mark string
,这里是如果你的标注比较复杂,要专门保留某种标记的,比如我想单独保存aa
这样的音段,那么需要设置为aa
,这时候如果运行脚本,将会把所有音段aa
都切分出来保存;默认为空,表示所有非空的都保存;FileName_markString_order
是指上面介绍的第二种情况;如果选FileName_order
是指上面介绍的第一种情况;4
;最近好几位同学问起,我的标注里并没有任何的标记,我就是想把我这个音频分成几部分,比如我是这样做的:
我就是要把我的文件只是简单的分成6部分,这样如何操作?确实小编之前没有想到这种情况。现在对脚本增加一部分选项。在运行脚本的时候请选择第三项,首先第一步,mark string这里仍然置空, 第二步,请选择下面的②处的第3项,FileName_order(no mark)。这样就可以把你的文件 切割成6份了。
https://github.com/feelins/Praat_Scripts
本站所有Praat脚本
都可以在上述github的项目目录
里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows
在自己的电脑上通过git clone
将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
本文的代码是03-long_sound_splits\Split_Long_Sound_Files.Praat
。点进去之后,还有附带的示例文件,同学可练习使用。脚本里有我的邮箱,有任何问题都可以来信咨询。
关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。
1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;
2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;
3、转载或者引用本文内容请注明来源及原作者;
4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。