воспроизвести данные PCM с помощью API webAudio - PullRequest
7 голосов
/ 03 января 2012

Привет, я работаю над WebAudio API.Я читаю HTML5 Web Audio API, портирую с javax.sound и получаю искаженную ссылку , но не получаю хорошего качества, как в java API. Я получаю данные PCM с сервера в подписанных байтах.Затем я должен изменить это в 16-битный формат.для изменения я использую (firstbyte << 8 | secondbyte), но не могу получить хорошее качество звука.Есть ли какие-либо проблемы с конвертацией или каким-либо другим способом получения хорошего качества звука? </p>

1 Ответ

4 голосов
/ 26 июля 2013

API-интерфейс Web Audio использует 32-разрядные числа с плавающей точкой со знаком от -1 до 1, поэтому я собираюсь (надеюсь) показать вам, как это сделать, а не 16-разрядные, как вы упомянули в вопросе.

Предполагая, что ваш массив сэмплов называется samples и хранится как комплимент 2 от -128 до 127, я думаю, это должно работать:

var floats = new Float32Array(samples.length);
samples.forEach(function( sample, i ) {
  floats[i] = sample < 0 ? sample / 0x80 : sample / 0x7F;
});

Тогда вы можете сделать что-то вроде этого:1007 *

var ac = new webkitAudioContext()
  , ab = ac.createBuffer(1, floats.length, ac.sampleRate)
  , bs = ac.createBufferSource();
ab.getChannelData(0).set(floats);
bs.buffer = ab;
bs.connect(ac.destination);
bs.start(0);
...