Подтвердить что ты не робот

Передача аудиоданных в HTML5

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

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

4b9b3361

Ответ 1

Планирование аудио - это то, для чего был разработан 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;
}

Ответ 2

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

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

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

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