如何通过命令行使用SoX录制音频及解决无默认音频设备配置报错
问题对应根因
- 执行
sox -d test.wav trim 0 20时触发的“无默认配置音频设备”报错,本质是当前安装的SoX没有成功关联系统默认的音频采集硬件,-d参数为SoX调用系统默认输入输出设备的快捷标识,匹配不到设备时就会直接抛出对应错误。 - 运行其他SoX命令直接输出帮助文档,通常是命令参数格式不满足SoX的语法校验规则,程序未识别到可执行的操作流,就会默认打印帮助信息后退出,并非程序本身完全失效。若要修复SoX的设备识别问题,可先执行
sox --devices枚举当前SoX可识别的所有硬件设备,排查为什么-d无法匹配到默认采集设备。
可实现命令行音频录制的替代方案
- Linux平台原生ALSA工具
arecord
arecord为ALSA生态自带工具,多数Linux发行版预装,无需额外安装第三方依赖
直接执行录制20秒wav音频的命令:arecord -d 20 -f cd -t wav test.wav
参数作用:-d 20指定录制总时长为20秒,-f cd匹配CD级音质(16bit位深、44.1kHz采样率、双声道),-t wav指定输出文件格式为wav。可通过arecord -l命令查看当前系统识别到的所有音频采集设备列表,确认硬件可用性。 - 跨平台通用工具FFmpeg
全平台覆盖Windows、macOS、Linux,执行录制前可先通过对应平台的枚举命令拉取可用音频输入设备列表: - Windows系统枚举命令:
ffmpeg -list_devices true -f dshow -i dummy - macOS系统枚举命令:
ffmpeg -f avfoundation -list_devices true -i "" - Linux系统枚举命令:
ffmpeg -f alsa -list_devices true -i ""
拿到对应音频输入设备的标识后,执行带时长限制的录制命令,基础格式为:ffmpeg -f <对应平台的输入捕获格式> -i <设备标识> -t 20 test.wav
其中-t 20参数直接指定录制时长为20秒,到达时长后自动停止录制并保存文件。 - PulseAudio服务适配工具
parec(适用于搭载PulseAudio音频服务的Linux发行版)
可以绕开SoX的设备识别故障,直接对接系统音频服务拉取采集流,再串接SoX完成格式封装和时长裁剪,对应命令为:parec --format=s16le --rate=44100 --channels=2 | sox -t raw -r 44100 -b 16 -c 2 - test.wav trim 0 20
内容的提问来源于stack exchange,提问作者user15434086
相关产品推荐
相关产品推荐

