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);
}

questionAnswers(2)

yourAnswerToTheQuestion