2016-04-14 18 views
8

mit AudioContext von Javascript das Mischen von Audio ist chived und für den Export der Audio-Mix habe ich OfflineAudioContext und, n, lame js, um das decodierte Audio zu kodieren, jetzt das Expoort funktioniert gut, aber es ist sehr langsam, ich suche ein effizienter Weg, um das schneller zu machen als das aktuelle.Wie arrayBuffer in MP3-Audio konvertieren?

+2

Es gibt derzeit keinen besseren Cross-Browser-Weg, dies zu tun. Sie können stattdessen OGG verwenden ([Firefox kann nativ auf OGG aufnehmen] (https://www.webrc-experiment.com/RecordRTC/AudioVideo-on-Firefox.html), Chrome benötigen Sie [einen JS OGG Encoder] (https://github.com/astroza/chrome_ogg_encoder)). Der schnellste Weg, MP3 zu kodieren, ist [PNACL] (http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client) und [NACLPorts Lame] (https://github.com /anvio/naclports/tree/master/libraries/lame-3.99-5), aber es ist nur Chrome und nicht trivial! – CodingIntrigue

+0

Ich habe es nicht selbst getestet, aber laut dem LameJS-Projekt sollte es "20 mal schneller als in Echtzeit" laufen. Beim Blick auf den Code scheint JavaScript 'Float32Array' zu verwenden. Ich würde prüfen, ob Ihr Browser diese Technologie unterstützt, und auch, ob WebGL für GPU-basierte Matrixmultiplikation unterstützt wird (wahrscheinlich). Wenn nicht, werde ich es mit einem Browser versuchen, der das macht und dann die Geschwindigkeit überprüfe. –

+0

Sie könnten emscripten und die lame-Encoder-Quelle kompilieren. Keine Ahnung, wie das für Sie funktionieren würde und es könnte schwieriger sein, als es Ihnen wert ist. – Goblinlord

Antwort

2

prüfen diese [Thema] [1]

document.querySelector('input').onchange = function(){ 
 
     var fileReader = new FileReader; 
 
     fileReader.onload = function(){ 
 
     var arrayBuffer = this.result; 
 
     snippet.log(arrayBuffer); 
 
     snippet.log(arrayBuffer.byteLength); 
 
     } 
 
     fileReader.readAsArrayBuffer(this.files[0]); 
 

 
     var url = URL.createObjectURL(this.files[0]); 
 
     audio_player.src = url; 
 
     audio_player.play(); 
 
    };
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script> 
 
<input id="audio_file" type="file" accept="audio/*" /> 
 
<audio id="audio_player" />

Verwandte Themen