我需要进行语音活动检测,作为对音频文件进行分类的步骤。
基本上,我需要确定是否知道给定的音频是否使用了口语。
我正在使用py-webrtcvad,该文件是我在git-hub中找到的,几乎没有记录:
https://github.com/wiseman/py-webrtcvad
问题是,当我在自己的音频文件上尝试时,它可以与有语音的文件一起正常工作,但是当我将其与其他类型的音频(例如音乐或鸟声)一起输入时,仍会产生误报将侵略性设为3。
音频为8000采样/ hz
我更改源代码的唯一一件事就是将参数传递给主函数的方式(不包括sys.args)。
def main(file, agresividad):
audio, sample_rate = read_wave(file)
vad = webrtcvad.Vad(int(agresividad))
frames = frame_generator(30, audio, sample_rate)
frames = list(frames)
segments = vad_collector(sample_rate, 30, 300, vad, frames)
for i, segment in enumerate(segments):
path = 'chunk-%002d.wav' % (i,)
print(' Writing %s' % (path,))
write_wave(path, segment, sample_rate)
if __name__ == '__main__':
file = 'myfilename.wav'
agresividad = 3 #aggressiveness
main(file, agresividad)
答案 0 :(得分:1)
我看到的是同一件事。恐怕这只是它的作用范围。语音检测是一项艰巨的任务,webrtcvad希望利用资源,因此您只能做很多事情。如果需要更高的准确性,则需要使用不同的软件包/方法,这些软件包/方法必然会占用更多的计算能力。
关于进取心,您说对了,即使是3,仍然存在很多误报。但是我也看到了假阴性,所以我正在使用的一个技巧是运行检测器的三个实例,每个主动性设置一个。然后,我没有将帧0或1进行分类,而是给它提供了最高的攻击性值,该值仍然表示是语音。换句话说,每个样本现在的得分为0到3,其中0表示即使是最不严格的检测器也不是语音,而3表示甚至是最严格的设置也是如此。这样我可以获得更多的分辨率,即使出现误报,对我来说也足够好。