@voice-ping/cognitive-services-speech
Version:
VoicePing Cognitive Services Speech SDK for JavaScript forked from Microsoft
59 lines (57 loc) • 2.42 kB
JavaScript
;
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
Object.defineProperty(exports, "__esModule", { value: true });
var RiffPcmEncoder = /** @class */ (function () {
function RiffPcmEncoder(actualSampleRate, desiredSampleRate) {
var _this = this;
this.encode = function (actualAudioFrame) {
var audioFrame = _this.downSampleAudioFrame(actualAudioFrame, _this.privActualSampleRate, _this.privDesiredSampleRate);
if (!audioFrame) {
return null;
}
var audioLength = audioFrame.length * 2;
var buffer = new ArrayBuffer(audioLength);
var view = new DataView(buffer);
_this.floatTo16BitPCM(view, 0, audioFrame);
return buffer;
};
this.setString = function (view, offset, str) {
for (var i = 0; i < str.length; i++) {
view.setUint8(offset + i, str.charCodeAt(i));
}
};
this.floatTo16BitPCM = function (view, offset, input) {
for (var i = 0; i < input.length; i++, offset += 2) {
var s = Math.max(-1, Math.min(1, input[i]));
view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);
}
};
this.downSampleAudioFrame = function (srcFrame, srcRate, dstRate) {
if (dstRate === srcRate || dstRate > srcRate) {
return srcFrame;
}
var ratio = srcRate / dstRate;
var dstLength = Math.round(srcFrame.length / ratio);
var dstFrame = new Float32Array(dstLength);
var srcOffset = 0;
var dstOffset = 0;
while (dstOffset < dstLength) {
var nextSrcOffset = Math.round((dstOffset + 1) * ratio);
var accum = 0;
var count = 0;
while (srcOffset < nextSrcOffset && srcOffset < srcFrame.length) {
accum += srcFrame[srcOffset++];
count++;
}
dstFrame[dstOffset++] = accum / count;
}
return dstFrame;
};
this.privActualSampleRate = actualSampleRate;
this.privDesiredSampleRate = desiredSampleRate;
}
return RiffPcmEncoder;
}());
exports.RiffPcmEncoder = RiffPcmEncoder;
//# sourceMappingURL=RiffPcmEncoder.js.map