var leftchannel = []; var rightchannel = []; var recorder = null; var recording = false; var recordingLength = 0; var volume = null; var audioInput = null; var sampleRate = null; var audioContext = null; var context = null; var outputElement = document.getElementById('output'); // 用于提示当前录音状态
if (navigator.getUserMedia) { navigator.getUserMedia({ audio: true }, success, function (e) { alert('Error capturing audio.'); }); } else { alert('getUserMedia not supported in this browser.'); };
functioninterleave(leftChannel, rightChannel) { var length = leftChannel.length + rightChannel.length; var result = newFloat32Array(length);
var inputIndex = 0;
for (var index = 0; index < length;) { result[index++] = leftChannel[inputIndex]; result[index++] = rightChannel[inputIndex]; inputIndex++; } return result; }
functionmergeBuffers(channelBuffer, recordingLength) { var result = newFloat32Array(recordingLength); var offset = 0; var lng = channelBuffer.length; for (var i = 0; i < lng; i++) { var buffer = channelBuffer[i]; result.set(buffer, offset); offset += buffer.length; } return result; }
functionwriteUTFBytes(view, offset, string) { var lng = string.length; for (var i = 0; i < lng; i++) { view.setUint8(offset + i, string.charCodeAt(i)); } }
var bufferSize = 2048; recorder = context.createScriptProcessor(bufferSize, 2, 2);
recorder.onaudioprocess = function (e) { if (!recording) return; var left = e.inputBuffer.getChannelData(0); var right = e.inputBuffer.getChannelData(1); leftchannel.push(newFloat32Array(left)); rightchannel.push(newFloat32Array(right)); recordingLength += bufferSize; console.log('recording...'); combineAudio([newFloat32Array(left)], [newFloat32Array(right)], bufferSize, sampleRate); }
var lng = interleaved.length; var volume = 1; for (var i = 0; i < lng; i++) { view.setInt16(index, interleaved[i] * (0x7FFF * volume), true); index += 2; }