Como jogar wav audio byte array via javascript / html5?
Estou usando o método a seguir para reproduzir uma matriz de bytes que contém dados wav. A função está sendo chamada de um projeto GWT.
Essa função reproduz o som, mas parece algum tipo de monstro infernal. A taxa de amostragem está definitivamente correta (o som está sendo gerado pelo neospeech) e eu tentei todos os tipos de valores para numberOfSamples, que parecem representar quanto tempo os dados de áudio são.
Um valor maior que 30000 para numberOfSamples reproduz o tamanho total do arquivo de áudio, mas é ilegível e horrível.
Então, o que estou fazendo de errado?
function playByteArray(byteArray, numberOfSamples) {
sampleRate = 8000;
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser does not support any AudioContext and cannot play back this audio.");
return;
}
window.AudioContext = window.webkitAudioContext;
}
var audioContext = new AudioContext();
var buffer = audioContext.createBuffer(1, numberOfSamples, sampleRate);
var buf = buffer.getChannelData(0);
for (i = 0; i < byteArray.length; ++i) {
buf[i] = byteArray[i];
}
var source = audioContext.createBufferSource();
source.buffer = buffer;
source.connect(audioContext.destination);
source.start(0);
}