Spec-Zone.ru › Web APIs

OfflineAudioContext: метод startRendering()

Базовая Широко доступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с апреля 2021 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Метод startRendering() интерфейса OfflineAudioContext начинает рендеринг аудио графа, учитывая текущие соединения и запланированные изменения.

Событие complete (типа OfflineAudioCompletionEvent) срабатывает по окончании рендеринга, содержа в своём свойстве renderedBuffer результирующий AudioBuffer.

Браузеры в настоящее время поддерживают две версии метода startRendering() — более старую, основанную на событиях, и новую, основанную на промисах. Первая в конечном итоге будет удалена, но обе механизмы сейчас доступны для совместимости со старыми кодами.

Синтаксис

startRendering()

Параметры

Нет.

Возвращаемое значение

Промис Promise, который выполняется с AudioBuffer.

Примеры

Воспроизведение аудио с помощью контекста offline audio

В этом примере мы объявляем как AudioContext, так и объект OfflineAudioContext. Мы используем AudioContext для загрузки аудио дорожки fetch(), а затем OfflineAudioContext для рендеринга аудио в AudioBufferSourceNode и воспроизведения дорожки. После настройки графа offline audio, мы рендерим его в AudioBuffer с помощью OfflineAudioContext.startRendering().

Когда промис startRendering() выполняется, рендеринг завершен, и выходной AudioBuffer возвращается из промиса.

На этом этапе мы создаем другой аудио контекст, создаем AudioBufferSourceNode внутри него и устанавливаем его буфер, равный промису AudioBuffer. Затем он воспроизводится как часть стандартного аудио графа.

Примечание: Вы можете запустить полный пример онлайн или посмотреть исходный код.

// Define both online and offline audio contexts
let audioCtx; // Must be initialized after a user interaction
const offlineCtx = new OfflineAudioContext(2, 44100 * 40, 44100);

// Define constants for dom nodes
const play = document.querySelector("#play");

function getData() {
  // Fetch an audio track, decode it and stick it in a buffer.
  // Then we put the buffer into the source and can play it.
  fetch("viper.ogg")
    .then((response) => response.arrayBuffer())
    .then((downloadedBuffer) => audioCtx.decodeAudioData(downloadedBuffer))
    .then((decodedBuffer) => {
      console.log("File downloaded successfully.");
      const source = new AudioBufferSourceNode(offlineCtx, {
        buffer: decodedBuffer,
      });
      source.connect(offlineCtx.destination);
      return source.start();
    })
    .then(() => offlineCtx.startRendering())
    .then((renderedBuffer) => {
      console.log("Rendering completed successfully.");
      play.disabled = false;
      const song = new AudioBufferSourceNode(audioCtx, {
        buffer: renderedBuffer,
      });
      song.connect(audioCtx.destination);

      // Start the song
      song.start();
    })
    .catch((err) => {
      console.error(`Error encountered: ${err}`);
    });
}

// Activate the play button
play.onclick = () => {
  play.disabled = true;
  // We can initialize the context as the user clicked.
  audioCtx = new AudioContext();

  // Fetch the data and start the song
  getData();
};

Спецификации

Спецификация
Web Audio API
# dom-offlineaudiocontext-startrendering

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
startRendering 25 12 25 15 7 25 25 14 7 1.5 4.4
returns_promise 42 ≤18 37 29 14.1 42 37 29 14.5 4.0 42

См. также

  • Использование Web Audio API

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext/startRendering

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API