added changes on checking similarity
This commit is contained in:
@ -34,8 +34,12 @@
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var Recorder = exports.Recorder = (function () {
|
||||
|
||||
|
||||
function Recorder(source, cfg) {
|
||||
var _this = this;
|
||||
|
||||
@ -88,7 +92,8 @@
|
||||
record(e.data.buffer);
|
||||
break;
|
||||
case 'exportWAV':
|
||||
exportWAV(e.data.type);
|
||||
console.log(e.currentTarget.sampleRate);
|
||||
exportWAV(e.data.type,e.currentTarget.sampleRate);
|
||||
break;
|
||||
case 'getBuffer':
|
||||
getBuffer();
|
||||
@ -111,8 +116,34 @@
|
||||
}
|
||||
recLength += inputBuffer[0].length;
|
||||
}
|
||||
|
||||
function downsampleBuffer(buffer, rate) {
|
||||
if (rate == sampleRate) {
|
||||
return buffer;
|
||||
}
|
||||
if (rate > sampleRate) {
|
||||
throw "downsampling rate show be smaller than original sample rate";
|
||||
}
|
||||
var sampleRateRatio = sampleRate / rate;
|
||||
var newLength = Math.round(buffer.length / sampleRateRatio);
|
||||
var result = new Float32Array(newLength);
|
||||
var offsetResult = 0;
|
||||
var offsetBuffer = 0;
|
||||
while (offsetResult < result.length) {
|
||||
var nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
|
||||
var accum = 0, count = 0;
|
||||
for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {
|
||||
accum += buffer[i];
|
||||
count++;
|
||||
}
|
||||
result[offsetResult] = accum / count;
|
||||
offsetResult++;
|
||||
offsetBuffer = nextOffsetBuffer;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function exportWAV(type) {
|
||||
function exportWAV(type,sampleRate) {
|
||||
var buffers = [];
|
||||
for (var channel = 0; channel < numChannels; channel++) {
|
||||
buffers.push(mergeBuffers(recBuffers[channel], recLength));
|
||||
@ -123,7 +154,11 @@
|
||||
} else {
|
||||
interleaved = buffers[0];
|
||||
}
|
||||
var dataview = encodeWAV(interleaved);
|
||||
|
||||
var downsampledBuffer = downsampleBuffer(interleaved, sampleRate);
|
||||
var dataview = encodeWAV(downsampledBuffer);
|
||||
/* var dataview = encodeWAV(interleaved); */
|
||||
|
||||
var audioBlob = new Blob([dataview], { type: type });
|
||||
|
||||
self.postMessage({ command: 'exportWAV', data: audioBlob });
|
||||
@ -172,6 +207,10 @@
|
||||
inputIndex++;
|
||||
}
|
||||
return result;
|
||||
/* var result = new Float32Array(inputL.length); */
|
||||
/* for (var i = 0; i < inputL.length; ++i) */
|
||||
/* result[i] = 0.5 * (inputL[i] + inputR[i]); */
|
||||
/* return result; */
|
||||
}
|
||||
|
||||
function floatTo16BitPCM(output, offset, input) {
|
||||
|
||||
Reference in New Issue
Block a user