Jim*_*tez 9 audio audio-recording voice-recording sox raspberry-pi
目前,我像这样使用sox:
sox -d -e u-law --endian little -b 8 -c 1 -r 8000 -t ul - silence 1 0.3 1% 1 0.3 1%
Run Code Online (Sandbox Code Playgroud)
作为参考,这是从默认麦克风录制音频并以8位和8k速率输出小端,ulaw格式的音频.效果滤波器修剪音频,直到噪声达到阈值0.3秒,然后继续记录,直到有0.3秒的静音.所有这些流到stdout,我用它来流式传输到远程服务器.
当我说完话语时,我正在使用所有这些来记录一些声音并完成.为了触发sox,我使用专门的硬件来触发录制的开始.我可以切换到使用几乎任何音频格式或编解码器,只要它支持即时格式化/编码.我的目标平台是覆盆子pi 2 B上的raspbian.
我理想的解决方案是使用vad在用户讲完后停止录音.我希望即使背景喋喋不休,这也会奏效.但是,关于vad效果的sox文档说明了这一点:
建议使用标准效果,但请记住,反向和标准都不适合与流式音频一起使用.
我无法将参数拼凑在一起以获得vad和流媒体工作.是否可以使用vad效果来停止音频录制,同时仍然保持stdin-> sox-> stdout管道?还有更好的选择吗?
是否可以使用 vad 效果来停止音频录制,同时仍然保持 stdin->sox->stdout 管道?
不可以。该vad效果只能消除音频前端的静音。所以你只能用它来检测录音开始,而不能检测结束和暂停。
和过滤器在生成任何输出数据之前需要所有输入数据,这就是它们不能与流式传输一起使用的原因reverse。norm
关键是为silence过滤器选择一个好的阈值,以便将“背景喋喋不休”视为静音。
您也可以在之前使用noisered(使用基于以前录音的配置文件)来silence减少触发录音的噪音,但这也会影响输出,并且可能不会将“背景喋喋不休”视为噪音。