3

Для научного эксперимента, мы пытаемся создать большую (7 дня) аудиозапись с помощью arecord из ALSA на 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 на странице руководства, поскольку размер файла несжатого файла wav в этот момент составляет почти 2 ГБ.

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

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

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

1 ответ1

1

В конце концов, я использовал решение "закодировать в 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .