Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将wav转换为mp3_Javascript_Html - Fatal编程技术网

使用javascript将wav转换为mp3

使用javascript将wav转换为mp3,javascript,html,Javascript,Html,下面是一个代码,我想把wav格式转换成mp3。参考Record.js。但这已经超出了我的想象。谁能解决这个问题?(视图由空的DataView组成,即DataView{}) 您可以使用,因为它将直接提供mp3音频 如果您想了解它,我实现了一个非常简单的版本。请注意,使用此实现转换的WAV需要是mono,否则结果会很混乱 var convert = function(){ var arrayBuffer = this.result; var buffer = new Uint8Arr

下面是一个代码,我想把wav格式转换成mp3。参考
Record.js
。但这已经超出了我的想象。谁能解决这个问题?(视图由空的DataView组成,即DataView{})

您可以使用,因为它将直接提供mp3音频

如果您想了解它,我实现了一个非常简单的版本。请注意,使用此实现转换的WAV需要是mono,否则结果会很混乱

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;
};

我认为最好的办法是创建一个后端服务来实现这一点……recordmp3 js很棒,但它在Firefox上有一个bug。FF浏览器在转换为mp3时挂起
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;
};