![Sox 在特定字节数后停止](https://linux22.com/image/103113/Sox%20%E5%9C%A8%E7%89%B9%E5%AE%9A%E5%AD%97%E8%8A%82%E6%95%B0%E5%90%8E%E5%81%9C%E6%AD%A2.png)
我的目标是拥有一个命令行工具来在树莓派 3 上录制长的多通道 wav 文件(5 小时以上,18 个通道)。音频接口是贝林格 XR18。
做到这一点的方法当然是 via arecord
,遗憾的是它会在 pi 上产生缓冲区溢出。因为arecord
有一个固定的最大值。缓冲区大小为 500ms,我不能/不想更改,我将 arecord 的输出通过管道传输到 sox,后者又写入 ntfs USB 闪存驱动器。作为一个额外的好处,sox 可以将样本从 32 位动态转换为 24 位,并消除溢出(据我所知)。
这是我运行的命令:
arecord -M -D hw:CARD=X18XR18,DEV=0 -c18 -f S32_FE -r48000 | sox --input-buffer 51200 -t wav - -b24 -c18 -t wav <filename.wav>
第一部分是管道|
工程,那里不需要帮助。第二部分也有效,随着录制的进行,文件被创建并增长。但由于某种原因,在大约 1.5GB 时,录音停止并且 sox 退出。
单独运行arecord
没有这个限制,它会运行几个小时(当然也有超限)。
我注意到,在达到最终文件大小之前不久,文件会停止持续增长,而是保存相当长的一段时间,然后以几 MB 的大小增长。对我来说,这听起来非常像缓冲区溢出,但将 sox 的缓冲区大小加倍到 100 MB 没有任何区别。 sox 的输出也不是很有帮助,即使在详细级别 3 下它也只显示:
sox WARN sox: '<filename>' output clipped 13403 samples; decrease volume?
sox WARN sox: '-' balancing clipped 13403 samples; decrease volume?
到目前为止我尝试过的:
- 改变了
--input-buffer-size
sox - 没有区别 - 尝试在 1.5GB 之前启动一个新文件 - 有效,但一旦添加的文件大小达到 1.5GB,它就会再次停止
- 直接记录到 SD 卡而不是闪存驱动器 - 没有区别(除了引入溢出之外)
我没有不同的 Linux 机器来在 atm 上测试它,但树莓派 3 应该绝对能够处理这个任务(CPU/RAM 方面)。有谁知道可能导致这种奇怪行为的原因吗?
答案1
这个线程说尝试使用 xfs 格式的目标磁盘/SD 卡。