我试图用arecord
录制一个 wav 文件,但它没有录制到一个文件,而是创建了数以万计的文件(大约 60000 个)。这是在我安装了 alsaequal 包之后发生的。我曾经使用-f dat
带有 标志的标志进行录制arecord
,但是在安装 alsaequal 之后,它停止了工作,所以我尝试使用-f cd
,这时就出现了这个问题。我不知道是 alsaequal 导致了这种行为还是使用了 格式cd
。我在 Raspberry Pi 上使用 Arch Linux。我运行的完整命令是arecord -f cd test.wav
,它输出的文件都名为test-xxxxx.wav
有谁知道是什么导致了这个问题?
更新:这似乎是随机发生的。它可以很好地完成许多录音,然后我重新启动或arecord
使用略有不同的参数运行,这将导致每次录音时都会出现问题(无论我使用什么参数)。我找不到可重现的模式。
答案1
看来,当 arecord 收到 SIGINT 时,它会出错并创建数千个文件。(如果在录制过程中按 Ctrl-C,就会发生这种情况。)我不确定如何“修复”它(无论如何,我会将其归类为错误),但我将提供两种解决方法:
不要使用 SIGINT,只需使用 SIGKILL (
killall -KILL arecord
)为了防止创建数千个文件,请执行以下操作:
arecord - > /tmp/sample.wav 2> /dev/null
现在,arecord 不再生成 sample-1.wav、sample-2.wav 等,而是将其所有数据发送到 STDOUT,然后将其重定向到您选择的文件。消息将打印到 STDERR,在本例中,STDERR 重定向到 /dev/null。代价是,不是创建数千个文件,而是单个文件将变得非常大 - 这可能被视为或可能不被视为改进!
作为额外礼物;由于经典的“ rm /tmp/sample*.wav
”可能会报告“文件太多”;这里是如何清理混乱的方法(根据需要进行调整):
find /tmp -type f -name sample*.wav -exec rm {} \+
仅供记录:
$ arecord --version
arecord version 1.0.27 by Jaroslav Kysela <[email protected]>