2016-04-14 13 views
8

với việc sử dụng AudioContext của javascript, việc trộn âm thanh được thực hiện và để xuất audio mix i đã sử dụng OfflineAudioContext và, n, lame js để mã hóa âm thanh đã giải mã, hiện tại expoort hoạt động tốt nhưng rất chậm, tôi đang tìm một cách hiệu quả để làm điều đó với nhanh hơn so với hiện tại.Làm thế nào để chuyển đổi arrayBuffer thành một âm thanh mp3?

+2

Hiện tại không có cách nào tốt hơn cho trình duyệt chéo để thực hiện việc này. Bạn có thể cân nhắc sử dụng OGG thay vì ([Firefox có thể ghi vào OGG nguyên bản] (https://www.webrtc-experiment.com/RecordRTC/AudioVideo-on-Firefox.html), Chrome bạn sẽ cần [Bộ mã hóa JS OGG] (https://github.com/astroza/chrome_ogg_encoder)). Cách nhanh nhất để mã hóa MP3 là sử dụng [PNACL] (http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client) và [NACLPorts Lame] (https://github.com) /anvio/naclports/tree/master/libraries/lame-3.99-5) nhưng chỉ Chrome và không tầm thường! – CodingIntrigue

+0

Không tự mình thử nghiệm, nhưng theo dự án LameJS, nó phải chạy nhanh hơn "20 lần thời gian thực". Nhìn qua mã nó dường như sử dụng 'Float32Array' của JavaScript. Tôi sẽ kiểm tra xem trình duyệt của bạn có hỗ trợ công nghệ đó hay không và liệu nó có hỗ trợ WebGL cho phép nhân ma trận dựa trên GPU hay không (có thể là như vậy). Nếu không, tôi sẽ thử với một trình duyệt và kiểm tra tốc độ. –

+0

Bạn có thể xem xét sử dụng emscripten và biên dịch nguồn mã hóa lame. Không có đầu mối như thế nào sẽ làm việc ra cho bạn và nó có thể khó khăn hơn nó có giá trị cho bạn. – Goblinlord

Trả lời

2

Kiểm tra này [chủ đề] [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" />

Các vấn đề liên quan