我似乎无法在不将样本从文件分割中删除的情况下,用 18 条音轨播放超过 10.5 分钟的歌曲。我有这个脚本:
#!/bin/sh
# Dedicated SATA SSD for Recording
REC_DRIVE=/dev/sda
REC_PATH=/home/audiohub/Recordings
mount -t ext4 $REC_DRIVE "$REC_PATH"
# Start recording
#arecord --device=hw:CARD=X18XR18,DEV=0 --channels=18 --file-type=wav --format=S32_LE --rate=48000 --buffer-time=20000000 --max-file-time 300 "$REC_PATH/all_tracks.wav" &
#arecord --device=hw:CARD=X18XR18,DEV=0 --channels=18 --file-type=wav --format=S32_LE --rate=48000 --buffer-time=20000000 --separate-channels "$REC_PATH/track.wav" &
arecord --device=hw:CARD=X18XR18,DEV=0 --channels=18 --file-type=raw --format=S32_LE --rate=48000 --buffer-time=20000000 "$REC_PATH/all_tracks.raw" &
ARECORD_PID=$!
# Force a filesystem sync every 1 second to keep the buffer small enough to write without missing samples
COUNT=1
while kill -0 "$ARECORD_PID" > /dev/null 2>&1
do
sleep 1
echo sync $COUNT
sync
COUNT=$(($COUNT+1))
done
echo Recording has ended.
该脚本中的第一个选项(注释掉)会创建一堆时长 5 分钟、18 轨的 WAV 文件,然后我可以将它们重新排列成SoX
一堆全长、单轨的 WAV 文件。这是目前我知道的唯一一种以多轨方式录制整场演出的方法,但最终的 WAV 文件每 5 分钟就会发出“砰”的一声,就像arecord
在文件分割过程中丢弃样本一样。
第二个选项(也被注释掉)立即失败,但确实创建了一个track.wav0
大小为零的文件。
第三个选项(未注释掉)运行直到all_tracks.raw
文件大小达到 2.0GiB,然后失败并在日志文件中输出以下输出:
Recording raw data '/home/audiohub/Recordings/all_tracks.raw' : Signed 32 bit Little Endian, Rate 48000 Hz, Channels 18
sync 1
sync 2
sync 3
sync 4
sync 5
...
sync 526
sync 527
sync 528
sync 529
sync 530
/home/audiohub/Recordings/all_tracks.raw: No such file or directory
sync 531
Recording has ended.
然后我可以将all_tracks.raw
文件分割SoX
成 18 个单轨 WAV 文件并在 Audacity 中正确播放它们,所以我知道它可以正常捕获……至少在前约 10.5 分钟内。
有没有办法可以捕捉一整场节目(至少 4 小时)的 18 轨音频而不丢失任何内容?
答案1
@CL. 的评论是解决方案:通过标准输出传输音频并让操作系统处理该文件。
完整文章请见此处但这个问题的答案是:
arecord --device=hw:CARD=X18XR18,DEV=0 --channels=18 --file-type=raw --format=S32_LE --rate=48000 --buffer-time=20000000 > "$REC_FILE" 2> >(ts -s >&2) &
2> >(ts -s >&2)
最后的 将 的标准错误通过管道arecord
传输到 的ts
标准输入,并将 的ts
标准输出通过管道传输到脚本的标准错误。调用脚本将此脚本的标准错误通过管道传输到日志文件。
ts
为其标准输入的每一行添加时间戳,并将结果打印到其标准输出。因此,当我查看日志文件时,我可以查看是否存在任何问题,如果有,则可以查看在长达数小时的多轨录音中哪里可以查找故障/爆音。
然后将原始文件转换为一组全长单声道 WAV:
TRACKS=18
CHANNEL=$TRACKS
while [ $CHANNEL -ge 1 ]
do
FILENAME=track$CHANNEL.wav
sox --type raw --bits 32 --channels $TRACKS --encoding signed-integer --rate 48000 --endian little all_tracks.raw $FILENAME remix $CHANNEL
CHANNEL=`expr $CHANNEL - 1`
done
您可能想echo
在其中添加一些 s 来报告进度。这往往需要一段时间。
答案2
您的问题是 wav 文件格式,其文件大小基本上限制为 2GB。请参阅https://en.wikipedia.org/wiki/WAV和https://hydrogenaud.io/index.php/topic,32422.0.html
一些程序会允许您录制到 4GB(我使用 Ardour,我相信 Audacity 也这样做)以便在我需要更长的录制时间时录制为其他格式。