arecord: Erstellen Sie große (7 Tage) Audioaufnahmen

3

Für ein wissenschaftliches Experiment versuchen wir, mit arecordalsa auf einem RasPi unter Verwendung eines USB-Mikrofons eine große (7-tägige) Audioaufnahme 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 groß ist.

Da wir die Audiodaten in gzip (und zu einem späteren Zeitpunkt in GPG) umleiten müssen, ohne sie zuerst auf der Festplatte zu speichern, können wir die von ALSA angebotene automatisierte Dateiaufteilung nicht verwenden, um dies zu umgehen (zumindest sind uns keine bekannt 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 Aufzeichnung (das Stoppen und Neustarten der Aufzeichnung würde für uns nicht funktionieren, da wir eine kontinuierliche 7-Tage-Aufzeichnung ohne Lücken benötigen).
  • Idealerweise sollte das resultierende Format immer noch .wav sein (oder zumindest etwas ähnlich verlustfreies).
  • Die Dateigröße sollte nicht zu stark ansteigen (wir benötigen ~ 16k Abtastrate, Mono-Sound und haben ungefähr 20 GB freien Speicherplatz).
  • Das Ganze sollte auf einem RasPi3 laufen, der auch einige andere Dinge tut (dh nicht zu viele Systemressourcen beanspruchen sollte).

Momentan erwägen wir, in ein Rohdatenformat aufzunehmen und später auf einer anderen Maschine in wav umzucodieren oder im laufenden Betrieb in FLAC umzucodieren. Eine einfachere Lösung wäre jedoch wünschenswert.

malexmave
quelle
raw-to-wav ist keine Neukodierung, sondern lediglich das Hinzufügen eines Headers. In jedem Fall werden WAV-Dateien nicht für Größen größer als 2 GB angegeben, unabhängig davon, wie Sie sie erstellen.
CL.

Antworten:

1

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.)

Beachten Sie, dass ich mich gerade mit stdout und gzipping befasse - dies ist auf eine spezielle Anforderung zurückzuführen, die Sie möglicherweise nicht haben. Wenn Sie diesen Schritt überspringen möchten, ersetzen Sie den -cdurch einen -o filename.flac. Dadurch werden auch einige Probleme beseitigt, die die Standardversion verursachen kann .

malexmave
quelle