2013-07-03 7 views
28

Ich nehme Audio von getUserMedia({audio:true}); im Browser unter Verwendung Recorder.js auf und exportiere es dann als eine WAV-Datei, weil das die einzige Option ist, die die Bibliothek zur Verfügung stellt.Konvertieren von WAV in ein beliebiges komprimiertes Audioformat in clientseitigem JavaScript

A 1 Minute 20 Sekunden Datei ist 14,1 MB groß. Ich muss das Audio auf einen Server hochladen und ich muss es schnell machen. Wie konvertiere ich das WAV-Audio in einem anderen komprimierten Format, um die Dateigröße zu verringern?

Ich habe nichts zu konvertieren:

  • MP3
  • Opus
  • WebM
  • Ogg
  • FLAC
  • andere Format Kennen Sie

Wenn es kein wa gibt y ab sofort in eines dieser Formate zu konvertieren, wie kann ich die WAV-Datei auf dem Client komprimieren?

PS: Ich habe eine Menge der Suchanfragen haben, etwas zu finden, die WAV in JS konvertiert, aber nichts gefunden. libmp3lame.js funktioniert nicht in Chrome.

Danke!

+0

Ich habe eine ähnliche Stelle bei http://StackOverflow.com/Questions/17507799/convert-wav-to-ogg-on-app-engine-or-in-in- Javascript - Ich habe im Wesentlichen das gleiche Problem, und ich hoffe wirklich, jemand beantwortet Ihre Frage. – Adrian

+0

Ich habe deine Frage gestern gesehen. Für mich ist die Dateigröße zu groß, so dass es auf den Server hochgeladen und dort konvertiert wird, ist keine praktikable Option. Für den Fall, dass Sie hochladen und dann konvertieren möchten, ist die Verwendung einer VM die beste Option. –

Antwort

27

I‘suppored zu kodieren ve machte einen Audio-Recorder, der aufzeichnet, um mp3 direkt aus dem Browser kombiniert RecorderJS und libmp3lame.js

Sie finden das GitHub Projekt hier: https://github.com/nusofthq/Recordmp3js

und eine detailliertere Erläuterung der Umsetzung: http://nusofthq.com/blog/recording-mp3-using-only-html5-and-javascript-recordmp3-js/

+0

DANKE, DANKE, DANKE. Ich wünschte, ich könnte diese 1000-mal aufwerten – Knights

+1

+1 Ich zog zu 'libmp3lame.js' zu. – CodingIntrigue

+1

@Remus Negrota, Dies funktioniert auf Chrome, hängt aber an Firefox. Meine Recherche ergab, dass in der ** libmp3lame.min.js ** in Firefox etwas Endlosschleife geht. Verwenden Sie eine geänderte Version von libmp3lame.min.js? – Dewsworld

4

Was Sie wirklich wollen, ist die Mediastream „Recording API“, an der derzeit gearbeitet wird. Bis zu diesem Artikel verfügbar ist, rate ich emscriptem auf C/C++ Quelle verwendet wird, und halten es in einem Webworker läuft die Benutzeroberfläche und anderen Registerkarten nicht blockiert werden.

3

Ich war vor dem gleichen Problem und kam mit ziemlich schnell und schmutzig Lösung:

  • zip die wav-Datei mit zip.js (funktioniert mit Chrome, Firefox, Safari 6 und Internet Explorer 10)

Weitere intel siehe Documentation zip.js

das ist zumindest zu reduzieren Größe viel, Datei ist etwa> 75% kleiner, so 1: 4 Kompression

UPDATE: Vielleicht an diesem einen Blick: https://webrtc.github.io/samples/

Es ist eine Chat-Anwendung für Chrome und Firefox von Google entwickelt, nehme ich mit Art von CC-Lizenz

+0

Danke! Ich werde es ausprobieren! :) –

2

ich hatte ein ähnliches Problem und haben es geschafft (auch recorder.js verwenden) die hervorragende videoconverter.js Projekt zur Lösung verwendet, die unter Verwendung von emscripen einen Port von ffmpeg Javascript enthält. Nachteil ist, dass die Datei ffmpeg.js etwa 25 MB groß ist.

I modifiziert, um die bestehende exportWAV Funktion in recorderWorker.js sowohl eine WAV zurückzukehren (für HTML5 <audio> Wiedergabe) und ein Blob eine codierte MP2-Datei enthält:

function encodeWAV(samples) { 

    var buffer = new ArrayBuffer(44 + samples.length * 2); 
    var view = new DataView(buffer); 

    /* ... various writing methods */ 

    return { wavdata: new Blob([buffer], { type: "audio/wav" }), mp2data: ffmpeg_convert(buffer) }; 
} 

function ffmpeg_convert(buffer) { 
    console.log("starting mp2 conversion"); 
    var args = "-i input -f mp2 output.mp2"; 
    var results = ffmpeg_run({ 
     arguments: args.split(" "), 
     files: [ 
      { 
       data: new Uint8Array(buffer), 
       "name": "input" 
      } 
     ] 
    }); 
    if (results) { 
     var file = results[0]; 
     console.log("File recieved", file.name, file.data); 
     return new Blob([file.data], { type: "audio/mpeg" }); 
    } 
    return null; 
} 

Diese Methode kann verwendet werden, um die WAV einen Codec von FFmpegs libavcodec

1

ich in der Lage war Kompression zu erreichen opus.js Verwendung

Sie meine Implementierung finden Sie hier: recordOpus, aber es einen Haken, wird Mine gekoppelt mit server- Seite, und ich benutze node.js Server ....

Verwandte Themen