Потоковая передача аудиоданных в HTML5

Я получаю аудиоданные PCM с сервера небольшими порциями и храню их в массиве. Теперь я хотел бы воспроизводить эти звуковые фрагменты последовательно без пропусков, используя некоторые возможности HTML5. Два варианта, которые я рассматриваю как «возможные» решения:

  1. HTML5 Audio tag с URI данных
  2. API веб-аудио

Пока я изучаю эти варианты, пожалуйста, предложите мне любой другой вариант или взгляды на два варианта, которые я рассматриваю. Хотя кроссплатформенное решение будет лучшим, я могу согласиться только на решение Chrome, поскольку


person Kartik Rustagi    schedule 06.07.2011    source источник


Ответы (2)


Планирование аудио - это то, для чего был разработан API веб-аудио. Если у вас есть декодированные звуковые фрагменты PCM в виде типизированных массивов (AUDIO_CHUNKS), вы можете создать звуковые буферы для каждого фрагмента и запланировать их в точное время (один за другим) с помощью noteOn(). Что-то вроде:

var startTime = 0;

for (var i = 0, audioChunk; audioChunk = AUDIO_CHUNKS[i]; ++i) {
  // Create/set audio buffer for each chunk
  var audioBuffer = audioCtx.createBuffer(NUM_CHANNELS, NUM_SAMPLES, SAMPLE_RATE);
  audioBuffer.getChannelData(0).set(audioChunk);

  var source = audioCtx.createBufferSource();
  source.buffer = audioBuffer;
  source.noteOn(startTime);
  source.connect(audioCtx.destination);

  startTime += audioBuffer.duration;
}
person ebidel    schedule 28.08.2011

Вариант 1, вероятно, не сработает, потому что тег audio не воспроизводит необработанные аудиоданные (что, как я полагаю, вы имеете в виду под аудиоданными PCM, или я ошибаюсь?). Каждому браузеру нужны определенные кодеки. В довершение ко всему, аудиотэг вообще ненадежен для воспроизведения вещей без пропусков.

Вариант 2 может сработать. Api веб-аудио содержит буферы, которые, вероятно, можно было бы заполнить необработанными данными и воспроизвести, но я никогда не пробовал это делать. Большой недостаток сейчас в том, что; а. Только Chrome b. пользователю необходимо настроить Chrome, набрав about: flags и включив веб-аудио, что может напугать некоторых.

Третий вариант - API аудиоданных, который является чем-то средним. Сам я никогда не пробовал, но, судя по спецификации, он выглядит именно так, как вы ищете. Я ничего не знаю о реализациях, поэтому вам придется провести небольшое исследование самостоятельно :) https://wiki.mozilla.org/Audio_Data_API#Writing_Audio

Пожалуйста, не говорите, что я даю эти ответы в уме, а я все еще новичок в аудио HTML5.

person Oskar Eriksson    schedule 05.08.2011
comment
Вы правы, говоря, что не воспроизводите необработанный PCM, но файлы WAV представляют собой очень тонкую оболочку вокруг необработанного звука (где оболочка означает заголовок размером 44 байта). Это делалось часто. Но теперь, конечно, 2 года спустя, API веб-аудио кажется более подходящим вариантом. - person Douglas Bagnall; 09.12.2013