2016-04-14 75 views
8

javascriptのAudioContextを使用すると、オーディオのミキシングが有効になり、オーディオミックスをエクスポートするために、OfflineAudioContextとn、lame jsを使用してデコードされたオーディオをエンコードします。今expoortはうまく動作していますが、現在のものよりも速く行うための効率的な方法です。arrayBufferをmp3オーディオに変換するには?

+2

これを行うには現在のところ、ブラウザ間のやり方が優れているわけではありません。代わりにOGGを使用することをお勧めします([FirefoxはOGGにネイティブに記録できます](https://www.webrtc-experiment.com/RecordRTC/AudioVideo-on-Firefox.html)、Chromeには[JS OGGエンコーダ]が必要ですhttps://github.com/astroza/chrome_ogg_encoder))。 MP3をエンコードする最も速い方法は、[PNACL](http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client)と[NACLPorts Lame](https://github.com)を使用することです。 /anvio/naclports/tree/master/libraries/lame-3.99-5)ですが、これはChromeのみで、簡単なことです! – CodingIntrigue

+0

自分ではテストしませんでしたが、LameJSプロジェクトによれば、「リアルタイムよりも20倍速く」実行されるはずです。コードを見ると、JavaScriptの 'Float32Array'を利用しているようです。あなたのブラウザがその技術をサポートしているかどうか、またGPUベースの行列乗算のWebGLをサポートしているかどうかを確認します。そうでなければ、速度を確認して確認するブラウザで試してみます。 –

+0

emscriptenを使用して、ラメのエンコーダソースをコンパイルすることができます。それがあなたのためにどのようにうまくいくかわからないし、それはあなたにとって価値があるよりも難しいかもしれません。 – Goblinlord

答えて

2

チェックこの[スレッド] [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" />

関連する問題