linux 下录制声卡输出的音频

linux 下录制声卡输出的音频

背景

在线TTS服务具有较大的延迟,输入文字后需要等待3~5秒才能返回语音提示,严重影响用户体验。考虑将常用的提示语录制到本地文件转为离线播放。但使用的TTS服务没有输出到文件的选项。

需求概括

在linux系统下,将一段时间内声卡输出的音频流录制到文件。

获取硬件信息

首先用如下命令列出设备上所有可用的monitor

1
pacmd list | grep ".monitor"

在列出的一长串中找到形如下面样式的就是声卡:

1
<alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>

根据设备可能有细节不同,关键是具有analog-stereo的特征。

方法一[推荐]:parec

输入如下命令:

1
parec -d <monitor> --file-format=wav output.wav

而后程序就会开始录制声卡中输出的音频,按Ctrl+C终止程序后停止,并会将这段时间的音频输出到指定的文件。

通常用脚本自动控制程序的开始和结束以避免开始和结尾冗余的空白部分。

另:用parec --list-file-formats可以列出所有支持的音频格式。

方法二:pacat管道输出到sox

详见参考资料。原理是利用pacat录制原始数据然后用sox转为一般的音频格式。较为复杂但是可以控制输出文件的各种参数。

参考资料

https://www.funwithelectronics.com/?id=95(方法二的完整步骤)

https://superuser.com/questions/597227/linux-arecord-capture-sound-card-output-rather-than-microphone-input#comments-1158969(这个问题下的一个回答引用了上面的链接,这个回答的一条评论提供了使用parec的解决方案)

0%