let outputArray = this.base64ToArrayBuffer(voice);
let arr16 = new Int16Array(outputArray.buffer);
let voice_data = this.dealVoice([arr16], 8000, 16000);
let Base64_test = this.arrayBufferToBase64(voice_data.data);
arrayBufferToBase64: function (buffer) {
var binary = "";
var bytes = new Uint8Array(buffer.buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
base64ToArrayBuffer(base64String) {
const padding = "=".repeat((4 - (base64String.length % 4)) % 4);
const base64 = (base64String + padding)
.replace(/\-/g, "+")
.replace(/_/g, "/");
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
},
dealVoice(pcmDatas, pcmSampleRate, newSampleRate) {
var size = 0;
for (var i = 0; i < pcmDatas.length; i++) {
size += pcmDatas[i].length;
}
var step = newSampleRate / pcmSampleRate;
if (step <= 1) {
step = 1;
newSampleRate = pcmSampleRate;
} else {
size = Math.floor(size * step);
}
var res = new Int16Array(size);
var posFloat = 0,
prev = 0;
for (var index = 0, nl = pcmDatas.length; index < nl; index++) {
var arr = pcmDatas[index];
for (var i = 0; i < arr.length; i++) {
var cur = arr[i];
var pos = Math.floor(posFloat);
posFloat += step;
var end = Math.floor(posFloat);
var n = (cur - prev) / (end - pos);
for (var j = 1; pos < end; pos++, j++) {
res[pos] = Math.floor(prev + j * n);
}
prev = cur;
}
}
return {
sampleRate: newSampleRate,
data: res,
};
},