使用 arecord 录制会创建数千个文件

使用 arecord 录制会创建数千个文件

我试图用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,就会发生这种情况。)我不确定如何“修复”它(无论如何,我会将其归类为错误),但我将提供两种解决方法:

  1. 不要使用 SIGINT,只需使用 SIGKILL ( killall -KILL arecord)

  2. 为了防止创建数千个文件,请执行以下操作:

    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]>

相关内容