莫回无
所以,一段时间后我重新审视了这个,因为我正在重做我的项目中需要单声道音频的部分,而且我对这个奇怪的问题做了噩梦。结果发现 Recorder.js 中存在一个错误,该错误会弄乱单声道录音的编码。在 recorder.js 的 EncodeWav 函数中,我不得不更改 line view.setUint32(28, sampleRate * 4, true); 到 view.setUint32(28, sampleRate * numChannels * 2, true);这使得音频文件的搜索变得完美,允许我将文件大小减半,并使我不必在路上将其更改为单声道。function encodeWAV(samples) {var buffer = new ArrayBuffer(44 + samples.length * 2);var view = new DataView(buffer);var numChannels = 1;var sampleRate = 18000;/* RIFF identifier */writeString(view, 0, '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, numChannels, true);/* sample rate */view.setUint32(24, sampleRate, true);/* byte rate (sample rate * block align) *///view.setUint32(28, sampleRate * 4, true);view.setUint32(28, sampleRate * numChannels * 2, true);/* block align (channel count * bytes per sample) */view.setUint16(32, numChannels * 2, true);/* bits per sample */view.setUint16(34, 16, true);/* data chunk identifier */writeString(view, 36, 'data');/* data chunk length */view.setUint32(40, samples.length * 2, true);floatTo16BitPCM(view, 44, samples);return view;}