За последние несколько месяцев я столкнулся с рядом различных библиотек, которые используют относительно новый HTML5 Audio API, а также более известный HTML5 Audio Element и его более простой API.
Я подумал, что в этой статье я расскажу о небольшом количестве этих библиотек, чтобы показать вам, что возможно и какие у вас есть варианты, если вы решите создать игру или приложение, которое требует манипулирования звуковыми файлами.
Некоторые из демонстраций, включенных в некоторые из этих библиотек, довольно хороши, и код для каждой из них довольно чистый и простой в использовании.
1. webaudiox.js
Webaudiox.js — это не библиотека, а набор помощников для использования API Web Audio. Он не имеет никаких зависимостей и будет работать в любом браузере, который поддерживает API Web Audio.
Документация предоставляет простой пример кода в виде шаблона, как показано ниже:
// after including the webaudiox library
var context = new AudioContext()
// Create lineOut
var lineOut = new WebAudiox.LineOut(context)
// load a sound and play it immediatly
WebAudiox.loadBuffer(context, 'sound.wav', function(buffer){
// init AudioBufferSourceNode
var source = context.createBufferSource();
source.buffer = buffer
source.connect(lineOut.destination)
// start the sound now
source.start(0);
});
Как указано в первом комментарии к коду, файл помощника webaudiox.js должен быть включен первым, чтобы это работало.
Это мало что говорит нам об этих помощниках, кроме того, как выглядит их синтаксис. Чтобы увидеть, как это работает, взгляните на analyser2canvas Helper . Этот помощник использует интерфейс AnalyserNode для отображения визуализации воспроизводимого звука в реальном времени.
В репозитории GauHub Webaudiox.js есть ряд других примеров. Естественно, чтобы эти демоверсии работали, ваш браузер должен поддерживать API Web Audio (подробнее об этом позже). Этот набор помощников не является полифилом, поэтому, если вам нужна поддержка старых браузеров, это не будет хорошим выбором, если вы не планируете связать это с другим сценарием или библиотекой или каким-либо резервным вариантом.
Из того, что я вижу, webaudiox.js, вероятно, является хорошим выбором для использования в играх HTML5.
2. Howler.js
Howler.js рекламируется просто как «аудио библиотека JavaScript для современной сети», которая по умолчанию использует API Web Audio и использует аудио HTML5 .
Возможности этой библиотеки обширны. Некоторые основные моменты включают в себя:
- Поддержка нескольких форматов файлов для более широкой поддержки браузера
- Функции кэширования для API Web Audio и аудио HTML5
- Одновременное многодорожечное воспроизведение
- Отключение / включение / выключение звука и громкость для каждого трека
- Метод цепочки
- 3KB gzip’d без зависимостей
Официальное сообщение в блоге, описывающее библиотеку, включает в себя несколько демонстраций на странице, показывающих, что можно сделать, поэтому обязательно ознакомьтесь с ними.
Чтобы продемонстрировать синтаксис, вот классный пример того, что называется «звуковой спрайт», где вы определяете местоположение различных звуков из одного звукового файла:
var sound = new Howl({
urls: ['sounds.mp3', 'sounds.ogg'],
sprite: {
blast: [0, 1000],
laser: [2000, 3000],
winner: [4000, 7500]
}
});
// shoot the laser!
sound.play('laser');
Мне нравится синтаксис, API имеет красивый чистый вид, и, кажется, его очень легко понять и начать использовать. Поскольку он использует новый API-интерфейс Web Audio и использует аудио HTML5, поддержка браузера является сильной.
Авторы библиотеки описывают его как «отличный для игр», но такой же хороший для любого другого веб-приложения, связанного со звуком.
3. Pedalboard.js
Как и предыдущие библиотеки, обсуждаемые до сих пор, Pedalboard.js также использует API-интерфейс Web Audio, но на этот раз он используется для создания звуковых эффектов на источниках звука, специально предназначенных для гитарных эффектов. В двух словах, вы можете использовать этот API для создания своей собственной педальной доски, с помощью которой можно манипулировать звуками гитары. Отличный пример, демонстрирующий мощь этого API, — Pedals.io , «гитарные эффекты в облаке»:
Синтаксис API является объектно-ориентированным, поэтому он чистый и простой в использовании. Вот пример:
// initialize the stage and get the context
var stage = new pb.Stage();
var ctx = stage.getContext();
// initialize the board and pedals
var board = new pb.Board(ctx);
var od = new pb.stomp.Overdrive(ctx);
var reverb = new pb.stomp.Reverb(ctx);
var vol = new pb.stomp.Volume(ctx);
// add pedals to board
board.addPedals([od, reverb]);
board.addPedalsAt(1, vol);
// tweak pedal settings
od.setDrive(0.7);
od.setLevel(0.7);
reverb.setLevel(0.3);
vol.setLevel(0.2);
// set the board on stage and start playing!
stage.setBoard(board);
Приведенный выше код основывается на объекте «stage», который содержит «доску», которая, в свою очередь, содержит «педали», способные создавать желаемые эффекты.
Следует признать, что это не обязательно будет самая полезная библиотека для создания игр или других приложений, но я уверен, что если у вас есть творческое мышление, вы можете придумать что-нибудь интересное с этим. Эта библиотека работает в любом браузере, который поддерживает API Web Audio.
В качестве примечания: если вам нравится эта библиотека, вы также можете попробовать Band.js , API «Music Composer» , который поддерживает ритмы, несколько инструментов, повторяющиеся секции и сложные временные подписи.
4. Пачка
Wad означает Web Audio DAW (Digital Audio Workstation) и называется «jQuery для ваших ушей». Это библиотека, которая помогает упростить управление звуком с помощью API Web Audio.
Вот пример синтаксиса, который представляет трек для фортепиано, синтезированный с использованием «квадратной» волны:
var piano = new Wad({
source : 'square',
env : {
attack : .01,
decay : .005,
sustain : .2,
hold : .015,
release : .3
},
filter : {
type : 'lowpass',
frequency : 1200,
q : 8.5,
env : {
attack : .2,
frequency : 600
}
}
})
piano.play({ pitch : 'C5' })
piano.play({ pitch : 'Eb5', filter : { q : 15 } })
piano.play({ pitch : 'F5', env : { release : .2 } })
Еще раз, довольно чистый API с множеством функций. Вы можете проверить приведенный выше код вместе с некоторыми другими примерами (малый барабан, флейта, хихат и т. Д.) На этой демонстрационной странице .
Функции включают в себя панорамирование, 3D панорамирование, фильтры (как показано в приведенном выше коде), реверберацию, микрофонный вход и возможность включения эффектов из внешних библиотек.
Одним из основных недостатков этой библиотеки является тот факт, что она не работает в Firefox, на что автор указывает в документации.
5. Fifer
Fifer — это «микробиблиотека» для HTML5 Audio API, которая в старых браузерах возвращается к облегченной версии Flash.
Синтаксис включает в себя ряд простых и цепных методов для работы со звуком для игр или других приложений.
Особенности API включают в себя:
- Предварительная загрузка и регистрация файлов
- Воспроизведение файлов с дополнительной петлей и обратным вызовом
- Остановить или отключить звук отдельных файлов или всех файлов одновременно
Вот пример синтаксиса:
Fifer({ swf : '../Fifer.swf' }).loaded(function(files) {
console.log('loaded');
this.bang();
}).onAudioProcess(function(arr) {
console.log(arr);
}).registerAudio('bang','bang.mp3',true)
Эта библиотека довольно проста и понятна, поэтому она может быть хорошим выбором для проекта, в котором вы хотите создать что-то большее на основе Fifer. Самым большим плюсом является тот факт, что, как уже упоминалось, он вернется к Flash, когда API Web Audio недоступен.
И обратите внимание, что этот API основан на аудио HTML5, а не на API веб-аудио, поэтому поддержка восходит к IE9 для HTML5 и IE8 и более ранним версиям для резервного копирования Flash.
Репо имеет очень простой пример, который можно просмотреть здесь . Ничего особенного, просто «взрывной» звук в формате MP3 с резервной копией SWF.
Ресурсы Web Audio API
Все библиотеки, рассмотренные выше, позволяют вам использовать всю мощь и возможности API Web Audio без необходимости слишком углубляться в спецификацию, предоставляя хороший чистый API.
Но если вы хотите изучить API для создания своих собственных вещей, ознакомьтесь с книгой Бориса Смуса «API Web Audio» , которую можно бесплатно получить через Интернет от O’Reilly или приобрести для печати или типичных электронных версий.
Также есть введение в Web Audio на HTML5 Rocks и документ на тему MDN.
Поддержка браузера
Если выбранная вами библиотека использует HTML5 Audio, поддержка доступна везде, включая IE9 + . Но если библиотека использует API-интерфейс Web Audio, как в случае со всеми вышеперечисленными библиотеками, кроме Fifer, то поддержка не так хороша .
В некоторых мобильных браузерах отсутствует поддержка, и Safari требует префиксов поставщиков. Однако худшей новостью является тот факт, что не существует версии IE, поддерживающей API-интерфейс Web Audio, даже IE11. Это открытый вопрос для команды IE, так что, надеюсь, это очень скоро изменится.