arecord: создание большой (7 дней) аудиозаписи

731
malexmave

Для научного эксперимента мы пытаемся создать большую (7 дней) аудиозапись с использованием arecordalsa на RasPi с использованием USB-микрофона. Конвейер для записи выглядит следующим образом:

arecord -f S16_LE -r16000 -d 259200 -D sysdefault:CARD=1 | gzip > test.wav.gz 

При такой записи запись воспроизводимо заканчивается ровно через 18 ч 38 м 28 с. Вероятно, это связано с максимальным размером файла WAV, равным 2 ГБ, о котором --max-file-timeговорится в параметре на странице man, поскольку размер файла несжатого файла WAV почти равен 2 ГБ.

Поскольку нам нужно передать аудиоданные в gzip (и, на более позднем этапе, в GPG), не сохраняя их сначала на диск, мы не можем использовать автоматическое разбиение файлов, предлагаемое ALSA, чтобы обойти это (по крайней мере, мы не знаем о каких-либо способ объединить это с трубами). Есть ли способ обойти эту проблему таким образом, чтобы выполнялись следующие условия:

  • В записи нет перерыва (остановка и перезапуск записи не будут работать для нас, так как нам нужна одна непрерывная 7-дневная запись без пропусков).
  • В идеале, полученный формат должен быть .wav (или, по крайней мере, что-то похожее без потерь).
  • Размер файла не должен сильно увеличиваться (нам нужна частота дискретизации ~ 16 Кбайт, монозвук, и у нас есть примерно 20 ГБ свободного места).
  • Все это должно работать на RasPi3, который также выполняет некоторые другие действия (т.е. не должен занимать слишком много системных ресурсов).

В настоящий момент мы рассматриваем возможность записи в необработанный формат данных и последующего перекодирования в wav на другом компьютере или перекодирования в FLAC на лету, но было бы полезно любое более простое решение.

3
raw-to-wav - это не перекодировка, а просто добавление заголовка. В любом случае файлы .wav не указываются для размеров, превышающих 2 ГБ, независимо от того, как вы их создали. CL. 6 лет назад 0

1 ответ на вопрос

1
malexmave

В конце концов, я использовал решение «закодировать в flac». Вот цепочка команд, которую я использовал:

arecord -t raw -f S16_LE -r16000 -d 604800 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -s -c | gzip > test.flac.gz 

(Настройте команды arecord и flac под свои нужды)

Обратите внимание, что я сейчас направляюсь на стандартный вывод и делаю это целиком - это связано с особым требованием, которого у вас может не быть. Если вы хотите пропустить этот шаг, замените его -cна -o filename.flac. Это также избавит от некоторых проблем, которые может вызвать версия stdout .

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