Использование Web Audio API
YandexAudio API позволяет использовать функциональность Web Audio API при работе с аудиоплеером. Web Audio API — это высокоуровневая библиотека, предоставляющая расширенные возможности для работы со звуком в браузере. С помощью Web Audio API можно создать объемный звук, добавить эхо или, например, создать частотный эквалайзер. Подробнее см. в документации к Web Audio API.
Чтобы использовать возможности Web Audio API при работе с плеером, нужно вызвать метод toggleWebAudioAPI() с аргументом 'true':
// Создаем плеер.
var audioPlayer = new ya.music.Audio('html5');
// Включаем режим использования Web Audio API
// для созданного плеера.
audioPlayer.toggleWebAudioAPI(true);
В результате вызова функции toggleWebAudioAPI()
будет создано необходимое окружение для работы Web Audio API — будет создан источник звука на основе HTML5-плеера, а также настроен модуль GainNode для установки итоговой громкости. На основе созданного окружения будет построен граф, удовлетворяющий следующей схеме (см. рис. 1):
Чтобы добавить в этот граф дополнительные модули, необходимо вызвать функцию setAudioPreprocessor(). В качестве аргумента данной функции следует передать объект, содержащий свойства:
input
— модуль, который нужно соединить с источником звука (узелSource
);output
— модуль, который нужно соединить с узломGainNode
. Если в граф добавляется один модуль, то свойствоoutput
будет совпадать сinput
.
Ниже приведен пример, демонстрирующий добавление в граф модуля DelayNode. Данный модуль позволяет задерживать звук на определенное время.
// Создание модуля для задержки звука.
var delayNode = Audio.audiocontext.createDelay();
// Устанавливаем задержку звука в 3 секунды.
delayNode.delayTime.value = 3;
// Добавляем созданный модуль в граф.
audioPlayer.setAudioPreprocessor({
input: delayNode,
output: delayNode
});
В результате выполнения этого кода будет сформирован новый граф, содержащий дополнительный модуль DelayNode
:
Source
и GainNode
. Узел GainNode
выполняет постобработку звука, необходимую для предотвращения искажения выходного сигнала, поэтому этот узел должен следовать последним.Если в граф нужно добавить несколько модулей, то связь между ними необходимо настроить самостоятельно, используя функцию connect().
// Создаем два модуля для задержки звука.
var delayNode1 = Audio.audiocontext.createDelay(),
delayNode2 = Audio.audiocontext.createDelay();
// Соединяем эти модули между собой.
delayNode1.connect(delayNode2);
// Добавляем созданные модули в граф.
audioPlayer.setAudioPreprocessor({
input: delayNode1,
output: delayNode2
});
ya.music.Audio.fx.Equalizer
можно ознакомиться в статье.При вызове функции toggleWebAudioAPI() с аргументом 'false' все модули графа (в том числе GaneNode
) будут удалены и управление громкостью будет передано технологии HTML5 Audio.