最近疫情比较严重,大家有没有发现有一个AI应用有点起死回生的感觉了,当然不是图片识别的应用场景了,例如口罩识别、无接触体温检测等等已经火爆的一塌糊涂了,如果有对口罩遮挡识别的小伙伴可以看我的另一篇文章【AI实战】口罩佩戴检查。而是电话机器人,由于19年出国家出台了比较严的整治电话骚扰的政策,导致外呼、回访、电话销售等等行业的需求意愿急剧下降,由于疫情反而让这种可以解决劳动密集型的电话客服的电话机器人悄然有回暖了。
所以今天就跟大家语音标注的内容,目前阶段的语音识别在通用场景上的准确率已经很高了,有些特殊场景因为传统头部公司的实际需求也在不断的落地,所以好多场景的语音相关需求已经从仅仅的识别需求提升到角色识别、情感识别等了。这篇文章介绍一款非常好用的线下语音处理分析软件--Praat。
Praat语音学软件,原名Praat:doing phonetics by computer,通常简称Praat,是一款跨平台的多功能语音学专业软件,主要用于对数字化的语音信号进行分析、标注、处理及合成等实验,同时生成各种语图和报表。
首先介绍一下Praat都可以做哪些事情,然后再结合数据标注本身来介绍一下其功能特点。不管是做语音识别的小伙伴还是做标注的小伙伴都可以学习一下,非常好用。
一.Praat可以做哪些事情?
1.频谱分析
2.基频分析
3.强度分析
4.共振峰分析
5.语音标注
6.语音参数调整和合成
7.提前语音数据
8.语音数据的统计分析
是不是非常牛?这篇文章主要是要介绍标注语音时的工具使用,所以呢这里只介绍第五部分语音标注。然后其他的部分后面再单独写文章和大家交流。
二.利用Praat做语音标注和切音
1.利用Praat做语音标注工作
为了方便大家使用,本文中使用的软件是Praat的汉化版,如果有小伙伴需要的话可以在公众号留言分享给大家。
注:这里提示一下,软件会有很多快捷键,可以在使用的时候方便大家进行标注。
2.利用Praat工具进行切音工作
因为Praat工具非常友好,可以进行编写脚本程序,在很大程度上扩展其功能,在这里给大家讲解一下利用Praat做切音的工作。
切音脚本:
form dialogue
comment 请输入源声音文件和标注文件所在目录:
text openpath /Users/wangzhenzhen/Desktop/test/todo
comment 请输入切分后声音保存目录:
text savepath /Users/wangzhenzhen/Desktop/test/over
comment 请输入标记所在层级及标记内容:
positive tier_number 1
sentence mark_string
comment 请输入数字位数:
positive limit 4
comment 生成一个文件名列表
text saveTXTpath /Users/wangzhenzhen/Desktop/test/out.txt
endform
if right$(openpath$,1) <> "/"
openpath$ = openpath$ + "/"
endif
if right$(savepath$,1) <> "/"
savepath$ = savepath$ + "/"
endif
deleteFile: saveTXTpath$
Create Strings as file list: "fileList", openpath$ + "*.wav"
numofFiles = Get number of strings
for i from 1 to numofFiles
selectObject: "Strings fileList"
fileName$ = Get string: i
order = 1
Read from file: openpath$ + fileName$
nameOfFile$ = selected$("Sound")
textgridNameOfFile$ = nameOfFile$ + ".TextGrid"
Read from file: openpath$ + textgridNameOfFile$
numOfIntervals = Get number of intervals: tier_number
for j from 1 to numOfIntervals
selectObject: "TextGrid " + nameOfFile$
startTime = Get start point: tier_number, j
endTime = Get end point: tier_number, j
labelOfInterval$ = Get label of interval: tier_number, j
if (labelOfInterval$ = mark_string$ and mark_string$ <> "") or (labelOfInterval$ <> "" and mark_string$ = "")
#####将范围根据标的情况前后分别扩大0.3秒
startTime1 = startTime - 0.3
endTime1 = endTime + 0.3
Extract part: startTime1, endTime1, "no"
selectObject: "Sound " + nameOfFile$
Extract part: startTime1, endTime1, "rectangular", 1, "no"
## 这一段得到一个序号的前面填充0的N位整齐数字
temp = order
ii = 0
repeat
temp = temp div 10
ii = ii + 1
until temp = 0
sumtemp = limit - ii
mark$ = ""
for jjj from 1 to sumtemp
mark$ = mark$ + "0"
endfor
mark$ = mark$ + string$(order)
##
selectObject: "Sound " + nameOfFile$ + "_part"
Save as WAV file: savepath$ + nameOfFile$ + "_" + mark$ + ".wav"
selectObject: "Sound " + nameOfFile$ + "_part"
Remove
selectObject: "TextGrid " + nameOfFile$ + "_part"
Remove
order = order + 1
endif
endfor
selectObject: "TextGrid " + nameOfFile$
Remove
selectObject: "Sound " + nameOfFile$
Remove
endfor
select Strings fileList
Remove
以上就是Praat在数据标注过程中比较重要的两个应用,后面如果大家感兴趣的话,会对Praat的其他功能进行介绍,当然如果有小伙伴需要软件或者脚本也欢迎大家留言获取。