<button onclick="bytes_to_sound()"> Перевести из byte массива в звук </button>
<script>
var myarray = [], // тут будут байты для превращения в звук
a = b = 0,
c = 1;
for(i = 0; i < 44100; i ++){
myarray.push(Math.floor(a + b));
a += c; b += c * 0.75; c /= 1.000003;
if(a > 127) a = 0;
if(b > 127) b = 0;
} // байты готовы. ( звук сирены )
function bytes_to_sound(){
var context = new AudioContext();
var myBuffer = context.createBuffer(1, context.sampleRate, context.sampleRate);
var nowBuffering = myBuffer.getChannelData(0); // наверно, екземпляр, о котором Вы говорили
for (var i = 0; i < myBuffer.length; i ++) nowBuffering[i] = myarray[i] / 128 - 1; // преобразование, о котором я говорил
// другими словами, чтобы пределы значений от 0 до 255 превратились в пределы значений от -1 до 1
var source = context.createBufferSource();
source.buffer = myBuffer;
source.connect(context.destination);
source.start(0);
}
</script>
Это пример, показывающий, как можно массив байт перевести в звук. Ни decodeAudioData(), ни ArrayBuffer для этого не нужны. А в Вашем,
symbians60v5, случае попробуйте так:
<button onclick="bytes_to_sound()"> Перевести из byte массива в звук </button>
if (this.chatSocket) {
this.chatSocket.onmessage = function (e) {
let data = JSON.parse(e.data);
let message = data['message'];
byteArray = new Array();
for (let key in message) {
byteArray.push(message[key]);
}
}
}
function bytes_to_sound(){
let context = new AudioContext();
var myBuffer = context.createBuffer(1, byteArray.length, context.sampleRate);
var nowBuffering = myBuffer.getChannelData(0);
for (var i = 0; i < myBuffer.length; i ++) nowBuffering[i] = byteArray[i] / 128 - 1;
var source = context.createBufferSource();
source.buffer = myBuffer;
source.connect(context.destination);
source.start(0);
}