Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 为什么libmp3lame.js会创建乱码MP3?_Javascript_Audio_Mp3_Html5 Audio_Lame - Fatal编程技术网

Javascript 为什么libmp3lame.js会创建乱码MP3?

Javascript 为什么libmp3lame.js会创建乱码MP3?,javascript,audio,mp3,html5-audio,lame,Javascript,Audio,Mp3,Html5 Audio,Lame,我使用fork Recorder.js添加了对MP3编码的支持,以减少记录的数据大小。编码工作到了一定程度,我可以播放已编码成MP3的录制音频。然而,音频质量是混乱的。关键的方法是在recorderWorker.js中: function exportMP3(type){ var bufferL = mergeBuffers(recBuffersL, recLength); var bufferR = mergeBuffers(recBuffersR, recLength);

我使用fork Recorder.js添加了对MP3编码的支持,以减少记录的数据大小。编码工作到了一定程度,我可以播放已编码成MP3的录制音频。然而,音频质量是混乱的。关键的方法是在recorderWorker.js中:

function exportMP3(type){
    var bufferL = mergeBuffers(recBuffersL, recLength);
    var bufferR = mergeBuffers(recBuffersR, recLength);

    console.log("Start MP3 encoding");
    var mp3codec = Lame.init();
    Lame.set_mode(mp3codec, Lame.JOINT_STEREO);
    Lame.set_num_channels(mp3codec, 2);
    Lame.set_out_samplerate(mp3codec, sampleRate);
    Lame.set_bitrate(mp3codec, 128);
    Lame.init_params(mp3codec);

    var mp3data = Lame.encode_buffer_ieee_float(mp3codec, bufferL, bufferR);
    audioBlob = new Blob([mp3data.data], { type: "audio/mp3" });
    console.log("Done MP3 encoding");

    this.postMessage(audioBlob);
}
这是一本书


这里bufferL和bufferR是作为Float32Array的PCM数据。我能做些什么来修复乱码编码?谢谢。

这不是采样率问题。它也不是恒定的噪音。。。声音越大,效果似乎越明显。我认为输出文件没有损坏。。。这听起来像是更硬的人工制品,有时会失去同步。我认为问题出在输入端或编码端,我猜是编码。你能从一个简单的例子开始吗?尝试单声道1千赫的音调。我的猜测是,LAME内部使用的缓冲区以及使用Emscripten构建缓冲区的方式存在一些类型转换问题。