Как записать многодорожечный неограниченно долго

Я, может казаться, не заканчиваю ~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 дорожками, ничего не отбрасывая?

0
задан 29 November 2017 в 10:41

2 ответа

Ваша проблема в формате файла wav, который по существу ограничен размером файла 2 ГБ. См. https://en.wikipedia.org/wiki/WAV и https://hydrogenaud.io/index.php/topic,32422.0.html

. Некоторые программы позволяют записывать на 4 ГБ (я использую Ardor, и Audacity также делает это, я считаю) для записи в альтернативные форматы, когда мне нужно больше времени записи.

0
ответ дан 7 November 2019 в 05:06

Комментарий @ 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, чтобы сообщить о прогрессе. Это обычно занимает некоторое время.

0
ответ дан 7 November 2019 в 05:06

Другие вопросы по тегам:

Похожие вопросы: