Я, может казаться, не заканчиваю ~10.5 минут с 18 дорожками, не отбрасывая образцы через разделенный на файл. У меня есть этот сценарий:
#!/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-минутных, файлов WAV с 18 дорожками, с которыми я могу затем перестроить SoX
в набор однодорожечных файлов WAV во всю длину. Это - в настоящее время единственный способ, которым я знаю для получения всего шоу в многодорожечном, но заключительные файлы WAV имеют "поп" каждые 5 минут как arecord
отбрасывает образцы во время разделения файла.
Вторая опция (также прокомментированный) сразу перестала работать, но действительно создает a track.wav0
файл с нулевым размером.
Третья опция (не прокомментированный) выполнения до all_tracks.raw
файл достигает точно 2.0 ГиБ и затем перестал работать со следующим выводом в файле журнала:
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 и играют их правильно в Смелости, таким образом, я знаю, что она получает хорошо..., по крайней мере, в течение первых ~10.5 минут.
Существует ли способ получить ценность всего шоу (по крайней мере 4 часа) аудио с 18 дорожками, ничего не отбрасывая?
Ваша проблема в формате файла wav, который по существу ограничен размером файла 2 ГБ. См. https://en.wikipedia.org/wiki/WAV и https://hydrogenaud.io/index.php/topic,32422.0.html
. Некоторые программы позволяют записывать на 4 ГБ (я использую Ardor, и Audacity также делает это, я считаю) для записи в альтернативные форматы, когда мне нужно больше времени записи.
Комментарий @ 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
stderr к Стандартный вывод ts
и стандартный вывод ts
на stderr сценария. Вызывающий сценарий направляет stderr этого сценария в файл журнала.
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
, чтобы сообщить о прогрессе. Это обычно занимает некоторое время.