Arecord: Erstellen Sie eine große Audioaufnahme (7 Tage)

872
malexmave

Für ein wissenschaftliches Experiment versuchen wir, eine große (7 Tage) Audioaufnahme mit arecordeinem RasPi unter Verwendung eines USB-Mikrofons zu erstellen . Die Pipeline für die Aufzeichnung lautet wie folgt:

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

Bei einer solchen Aufnahme endet die Aufnahme reproduzierbar nach genau 18h 38m 28s. Dies hängt wahrscheinlich mit der maximalen WAV-Dateigröße von 2 GB zusammen, über die der --max-file-timeParameter in der Manpage spricht, da die Datei der unkomprimierten WAV-Datei zu diesem Zeitpunkt fast genau 2 GB beträgt.

Da wir die Audiodaten zunächst in gzip (und später in GPG) speichern müssen, ohne sie zuerst auf der Festplatte zu speichern, können wir die automatisierte Dateisplittung, die ALSA anbietet, nicht nutzen, um dies zu umgehen (zumindest wissen wir nichts davon) Methode, dies mit Rohren zu kombinieren). Gibt es eine Möglichkeit, dieses Problem so zu umgehen, dass die folgenden Bedingungen erfüllt sind:

  • Es gibt keine Lücke in der Aufnahme (das Stoppen und erneutes Starten der Aufnahme würde für uns nicht funktionieren, da wir eine fortlaufende 7-Tage-Aufnahme ohne Lücken benötigen).
  • Idealerweise sollte das resultierende Format immer noch .wav (oder zumindest etwas ähnlich verlustfrei) sein.
  • Die Dateigröße sollte nicht zu stark ansteigen (wir benötigen ~ 16k Abtastrate, Mono-Sound und haben etwa 20 GB freien Speicherplatz).
  • Das Ganze sollte auf einem RasPi3 laufen, der auch andere Dinge tut (dh nicht zu viele Systemressourcen beansprucht).

Momentan erwägen wir die Aufnahme in ein Rohdatenformat und die spätere Neucodierung in wav auf einem anderen Computer oder die fließende Neucodierung in FLAC. Eine einfachere Lösung wäre jedoch willkommen.

3
raw-to-wav ist keine Neucodierung, sondern nur das Hinzufügen eines Headers. In jedem Fall werden WAV-Dateien nicht für Größen festgelegt, die größer als 2 GB sind, unabhängig davon, wie Sie sie erstellen. CL. vor 7 Jahren 0

1 Antwort auf die Frage

1
malexmave

Am Ende habe ich die "encode to flac" -Lösung verwendet. Hier ist die Befehlskette, die ich verwendet habe:

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 

(Passen Sie die Befehle arecord und flac an Ihre Bedürfnisse an.)

Bitte beachten Sie, dass ich jetzt auf stdout und gzipste, was jetzt alles ist - dies ist auf eine spezielle Anforderung zurückzuführen, die Sie möglicherweise nicht haben. Wenn Sie diesen Schritt überspringen möchten, ersetzen Sie das -cdurch ein -o filename.flac. Dadurch werden auch einige Probleme beseitigt, die die stdout-Version verursachen kann .