Verringern Sie die Bitrate der WAV-Datei, die mit recorderjs erstellt wurde

8

Ich versuche, recorderjs auf einer App-Engine-Site zu verwenden, auf der Nutzer kurze Audioaufnahmen hochladen (etwa 1 bis ein Dutzend) Sekunden lang). Ich habe bemerkt, dass die WAV-Dateien, die ich hochlade, viel größer sind, als ich erwartet habe. Zum Beispiel habe ich gerade eine Aufnahme erstellt, die ungefähr 9 Sekunden dauert, und der hochgeladene Blob ist 1736769 Bytes, was & gt; 1,5 Megabyte.

Frage:

Wie ändere ich den Recorder-Code (oder meinen eigenen Code - vielleicht verwende ich recorderjs falsch), so dass meine Audio-Blobs eine niedrigere Bitrate haben? Ich möchte, dass eine 10-Sekunden-Aufnahme sicher unter 1 MB liegt.

Ich vermute, dass ich die encodeWAV-Funktion in hier ändern müsste, oder vielleicht exportWAV, aber ich bin mir nicht sicher, wie. Wäre es sinnvoll, jedes andere Element des Interleave-Puffers in exportWAV zu löschen? Gibt es einen intelligenteren Weg, es zu tun? Wie hängt die Bitrate des exportierten WAV von den Eigenschaften meines Computers ab (z. B. die Abtastrate meiner Soundkarte)?

Ich kann einige Details zu meinem eigenen Code hinzufügen, wenn es hilfreich sein könnte.

Bearbeiten: Wenn Sie ein Live-Beispiel sehen möchten, installieren Sie Google Chrome Beta und versuchen Sie diese Seite . Auf meinem Computer dauert eine Aufnahme 5-10 Sekunden länger als 1 MB.

Vielen Dank,

Adrian

    
Adrian 30.04.2013, 09:35
quelle

3 Antworten

4

Du könntest ein paar Dinge ausprobieren. Zunächst einmal denke ich, dass Sie etwas über "jedes andere Element des Interleaved-Puffers löschen" (Umwandlung des Sounds in Mono).

Dafür können Sie den linken oder rechten Kanal beibehalten. Sie könnten die Funktion "Interleave" folgendermaßen ändern:

%Vor%

Wenn Sie beide Kanäle behalten möchten, aber beide in der Mitte (auf den einzelnen Monokanal) "schwenken", können Sie etwas tun wie:

%Vor%

Davon abgesehen gibt es potenziell eine Menge anderer Stellen, die Sie ändern müssten, damit das codierte Audio von Stereo zu Mono wird. Wie auch immer, meine Vermutung ist (und ich habe nicht recorder.js verwendet, so dass ich nicht weiß, es ist Innenleben), Zeile 113/114 im Recorder Worker könnte wahrscheinlich zu 1 geändert werden.

Meine Vermutung ist, dass Sie die zwei hier erwähnten Stellen (die Interleave-Funktion und die Stelle, an der die Kanalanzahl gesetzt ist) ändern können, weil: interleave und encodeWAV nur über die exportWAV-Funktion aufgerufen werden , also nicht zu berühren, wie der ursprüngliche Arbeiter Recorder-Audio war (und es wurde Stereo aufgenommen) hoffentlich wird es nicht brechen. Wir würden in diesem Fall nur Änderungen an dem Audio vornehmen, das gespeichert wurde.

    
Jrop 01.05.2013, 14:48
quelle
18

In meinem Fall nimmt Chrome Audio mit 96 kHz und Firefox mit 44,1 kHz auf, das macht riesige WAV Dateien. Ich habe eine Downsampling-Funktion in recorderWorker.js implementiert, wo Sie das gewünschte Sample-Verhältnis wie 16000 auswählen können.

%Vor%

und ich rufe es beim Exportieren der WAV-Datei auf:

%Vor%     
ciri-cuervo 07.10.2014 21:04
quelle
3

Ich benutze denselben Recorder-Code und musste die Bitrate senken. Meine Lösung erzeugt eine 11025Hz Mono-Datei. es ist nicht sehr elegant, also werde ich mich freuen, wenn jemand Korrekturen für mich hat.

Zuerst ändere ich die Abtastrate in der Funktion init auf 11025 anstelle der Bitrate des Audiokontextes (dies ist der nicht elegante Teil, da der Kontext möglicherweise nicht 44100 Hz ist).

Ich ersetze den interleave Funktionsinhalt durch diesen

%Vor%

Dies nimmt nur den linken Kanal und schaltet alle 4 Puffer-Samples im Ergebnis in 1 um, so dass weniger Speicher belegt wird. Wenn die Bitrate um dasselbe Verhältnis (geteilt durch 4, z. B. 11025) geändert wird, klingt die Datei gleich, ist aber viel kleiner.

Ich habe auch die Kanalanzahl in encodeWAV auf eins

geändert %Vor%

Die Aufnahme wird 1/8 im Vergleich zur ursprünglich produzierten Datei sein.

    
Super Class 20.07.2013 17:33
quelle