2014-05-15 119 views
4

下面是一段代码,我想将wav formate转换为mp3。引用Record.js。但它已经过去了。有谁能解决这个问题吗(查看包括空数据视图即中,数据视图{})使用javascript将wav转换为mp3

var blob = new Blob ([ view ], { type : 'audio/wav' }); 

    // let's save it locally 
    outputElement.innerHTML = 'Handing off the file now...'; 
    var url = (window.URL || window.webkitURL).createObjectURL(blob); 
    var link = window.document.createElement('a'); 
    link.href = url; 
    link.download = 'output.wav'; 
    var click = document.createEvent("Event"); 
    click.initEvent("click", true, true); 
    link.dispatchEvent(click); 
    audioplayer.src = url; 
+1

我认为最好的方法是创建一个后台服务要做到这一点...... – Nenotlep

回答

4

您可以使用Recordmp3js,因为它会直接给MP3音频。

如果你想了解它,我实现了一个非常简单的版本here。请注意,使用此实现转换的wav需要是单声道的,否则结果将变得混乱。

var convert = function(){ 
    var arrayBuffer = this.result; 
    var buffer = new Uint8Array(arrayBuffer); 

    data = parseWav(buffer); 

    var config = { 
     mode : 3, 
     channels:1, 
     samplerate: data.sampleRate, 
     bitrate: data.bitsPerSample 
    }; 

    var mp3codec = Lame.init(); 
    Lame.set_mode(mp3codec, config.mode || Lame.JOINT_STEREO); 
    Lame.set_num_channels(mp3codec, config.channels || 2); 
    Lame.set_num_samples(mp3codec, config.samples || -1); 
    Lame.set_in_samplerate(mp3codec, config.samplerate || 44100); 
    Lame.set_out_samplerate(mp3codec, config.samplerate || 44100); 
    Lame.set_bitrate(mp3codec, config.bitrate || 128);  
    Lame.init_params(mp3codec); 

    var array = Uint8ArrayToFloat32Array(data.samples); 

    var mp3data = Lame.encode_buffer_ieee_float(mp3codec, array, array); 

    var url = 'data:audio/mp3;base64,'+encode64(mp3data.data); 
    convertedPlayer.src = url; 
    convertedLink.href = url; 

    var name = file.name.substr(0, file.name.lastIndexOf('.')); 
    convertedLink.textContent = name + '.mp3'; 

    converted.style.display = 'block'; 

    Lame.encode_flush(mp3codec); 
    Lame.close(mp3codec); 
    mp3codec = null; 
}; 
+1

* recordmp3-JS *是伟大的,但它有一个bug在Firefox上。转换为mp3时,FF浏览器会挂起 – Dewsworld