function floatTo16BitPCM(output,offset,input){ for (var i = 0; i < input.length; i++,offset+=2){ var s = Math.max(-1,Math.min(1,input[i])); output.setInt16(offset,s < 0 ? s * 0x8000 : s * 0x7FFF,true); } } function writeString(view,string){ for (var i = 0; i < string.length; i++){ view.setUint8(offset + i,string.charCodeAt(i)); } } function encodeWAV(samples){ var buffer = new ArrayBuffer(44 + samples.length * 2); var view = new DataView(buffer); /* RIFF identifier */ writeString(view,'RIFF'); /* RIFF chunk length */ view.setUint32(4,36 + samples.length * 2,true); /* RIFF type */ writeString(view,8,'WAVE'); /* format chunk identifier */ writeString(view,12,'fmt '); /* format chunk length */ view.setUint32(16,16,true); /* sample format (raw) */ view.setUint16(20,1,true); /* channel count */ view.setUint16(22,2,true); /* sample rate */ view.setUint32(24,sampleRate,true); /* byte rate (sample rate * block align) */ view.setUint32(28,sampleRate * 4,true); /* block align (channel count * bytes per sample) */ view.setUint16(32,4,true); /* bits per sample */ view.setUint16(34,true); /* data chunk identifier */ writeString(view,36,'data'); /* data chunk length */ view.setUint32(40,samples.length * 2,true); floatTo16BitPCM(view,44,samples); return view; }
嗨,我正在使用此源代码为我的学校考试录制音频.它以44100Hz和16bit记录音频.我想更改录音设置以录制16000Hz和16bit的音频.
我尝试将函数encodeWAV中的44修改为16,但它不起作用.
function encodeWAV(samples){ var buffer = new ArrayBuffer(44 + samples.length * 2); var view = new DataView(buffer)
我也试图改变floadRToBitPCM.我试图将44改为16但它也没有用.
floatTo16BitPCM(view,samples);