2013-06-02 13 views
15

Ich frage, weil ich die Antwort nirgendwo finden konnte. Ich habe RecorderJS erfolgreich implementiert, um Mikrofoneingang in JS aufzuzeichnen. Die aufgezeichnete Datei ist jedoch WAV, was zu großen Dateien führt. Ich bin auf der Suche nach einer Möglichkeit, mit JS direkt in MP3 aufzunehmen, oder die Bits irgendwie zu MP3 statt WAV zu kodieren.Web Audio API - Aufnahme in MP3?

Wie kann es gemacht werden? Gibt es eine Web-Audio-API-Funktion, die das oder JS MP3-Encoder irgendwie tun kann?

+0

Ich kenne nur die umgekehrte Decodierung, dh von MP3 zu WAV gehen - https://github.com/audiocogs/mp3.js. Sie müssen wahrscheinlich in https://github.com/kripken/emscripten graben, um einen wav zum mp3-Encoder in JS zu bekommen. – Stasik

+0

Danke, ich schaue in Emscripten aber ich sehe immer noch nicht wie es helfen kann. – Light

+0

Nun, Sie müssen einige C-Wav-mp3-Decoder zu bekommen, und als WAV in mp3 im Browser decodieren :) – Stasik

Antwort

10

Der einzige Javascript MP3-Encoder, den ich gesehen habe, ist https://github.com/akrennmair/libmp3lame-js, das ist ein Port mit emscripten. Es sollte langsam sein, und ich habe es nie benutzt.

Ich kenne keine nativ geschriebenen Javascript MP3 Encoder, und die Codierung wird nicht von der Web Audio API abgedeckt.

5

Es gibt eine Bibliothek in reinem Javascript geschrieben, genannt lamejs. Um MP3s von Rohaudio zu kodieren. Es ist viel schneller als emscripten kompilieren von libmp3lame.https://github.com/zhuker/lamejs

Beispiel Nutzung:

lib = new lamejs(); 
mp3encoder = new lib.Mp3Encoder(1, 44100, 128); //mono 44.1khz encode to 128kbps 
samples = new Int16Array(44100); //one second of silence 
var mp3 = mp3encoder.encodeBuffer(samples); //encode mp3 
+0

lamejs hat gut für mich gearbeitet. Es scheint keine Probleme zu haben, in Echtzeit mithalten zu können, sodass keine Worker-Threads mehr benötigt werden. Ich habe eine Testseite auf [meine Seite] (https://aws.nlited.org/mp3.htm) mit einer ausführlichen Erklärung erstellt. – TeasingDart

2

Ich war mit diesem Problem frustriert und bestehende Lösungen, so kam ich mit etwas oben einfacher:

https://github.com/sb2702/audioRecord.js

Nutzungs

Erstellen Sie ein Rekorder-Objekt (async, da Benutzerzugriff erforderlich ist n)

Recorder.new(function(recorder){ 

    }); 

Aufnahme starten

  recorder.start();   

Stops

  recorder.stop();  

Export als MP3-Aufnahme

  recorder.exportMP3(function(mp3Blob){ 

      console.log("Here is your blob: " + URL.createObjectURL(mp3Blob)); 

      }); 

Meist basiert auf RecorderJS, änderte aber einige Dinge um zu exportieren MP3-Dateien und bis n ot mit AudioContext/navigator.getUs vertrödeln, haben