SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Web Audio Api
Анатолий Найда
anaida@andiks.com
vk.com/anatoliy_naida
Воспроизведение аудио данных
на базовом уровне путем
встраивания в HTML код
➢ play
➢ pause
➢ load
HTML5 Audio
2
Web Audio
3
➢ cмешивание, синтез и
визуализация
➢ обработка и фильтрации
(например, пещеры или
водосточной трубы, затухание,
доплеровское смещение и т.д.)
➢ возможности присутствующие в
современных звуковых движках
Specification Status
Web Audio API Working Draft
Кроссбраузерность
4
Поддержка аудиоформатов
5
Ogg Vorbix WAV PCM AAC MP3
Edge x x x
Firefox x x partial
Chome/Safari/
mobile Safari
x x x x
Основные шаги для воспроизведения
1. Создаем аудиоконтекст
new AudioContext();
2. Загружаем аудио в буфер
request.responseType ='arraybuffer';
3. Подключаем источник к получателю
src.connect(ctx.destination);
4. Воспроизводим
source.start(0);
6
Загрузка аудио
var loadSoundFile = function(url) {
// делаем XMLHttpRequest (AJAX) на сервер
var xhr = new XMLHttpRequest() ;
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
...
7
Загрузка аудио
// декодируем бинарный ответ
context.decodeAudioData( this.response,
function(decodedArrayBuffer) {
// получаем декодированный буфер
buffer = decodedArrayBuffer ;
}, function(e) {
console.log('Error decoding file', e);
});
};
xhr.send();
}
8
Основные шаги для воспроизведения
1. Создаем аудиоконтекст
new AudioContext();
2. Загружаем аудио в буфер
request.responseType ='arraybuffer';
3. Подключаем источник к получателю
src.connect(ctx.destination);
4. Воспроизводим
source.start(0);
9
Базовое воспроизведение без эффектов
// функция начала воспроизведения
var play = function(){
// создаем источник
source = context.createBufferSource() ;
// подключаем буфер к источнику
source.buffer = buffer;
// дефолтный получатель звука
destination = context.destination;
// подключаем источник к получателю
source.connect(destination);
// воспроизводим
source.start(0);
}
10
Узлы и маршрутизация
Что такое маршрутизация ?
● аудио процессинг это цепочка из узлов
● узлы соединенные друг с другом
действуют как "маршрут звука"
Простой маршрут
11
Сложный маршрут
12
13
3D звук
// создадим, например, паннер для представления летающего объекта
var panner = context.createPanner() ;
// подключаем источник к паннеру
moveSource.connect(panner);
// подключаем паннер к выходу
sound.panner.connect(destnation);
// c какой-то периодичностью мы будем указывать
// где сейчас находится объект
panner.setPosition(q.x, q.y, q.z);
// в какую сторону он летит
panner.setOrientation(vec. x, vec.y, vec.z);
// c какой скоростью он летит
panner.setVelocity(dx/dt, dy/dt, dz/dt);
14
Библиотеки
➢ Webaudiox
➢ Howler
➢ WAD
15
Итог
Web Audi Api - мощный инструмент призванный решать самые сложные
задачи при работе с аудио в браузере.
➢ Объемный звук для игр и интерактивных веб приложений
➢ Приложения для обработки звука
➢ Аудио синтез
➢ Визуализация аудио и многое, многое, многое другое…
16
Всем спасибо
Презентация доступна по адресу goo.gl/oeOP2r
Со мной можно связаться по адресу anaida@andiks.com
Все полезные ссылки и демо в одном месте goo.gl/9vheE1
17

Contenu connexe

Tendances

Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)
Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)
Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)Ontico
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данныхPyNSK
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2Technopark
 
Пожиратели памяти в WordPress
Пожиратели памяти в WordPressПожиратели памяти в WordPress
Пожиратели памяти в WordPressKonstantin Kovshenin
 
Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksJetStyle
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.RuMail.ru Group
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNSYandex
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверамиMaxim Kulsha
 
История PermLUG
История PermLUGИстория PermLUG
История PermLUGAlexey Fedorov
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
Android emulators features
Android emulators featuresAndroid emulators features
Android emulators featuresRoman Butok
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 

Tendances (20)

Ngs 2
Ngs 2Ngs 2
Ngs 2
 
Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)
Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)
Приёмы разработки высоконагруженных приложений на Twisted (Андрей Смирнов)
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данных
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2
 
Пожиратели памяти в WordPress
Пожиратели памяти в WordPressПожиратели памяти в WordPress
Пожиратели памяти в WordPress
 
Алексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalksАлексей Иванов: немного о grunt.js #FrontTalks
Алексей Иванов: немного о grunt.js #FrontTalks
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)Спецификация WSGI (PEP-333)
Спецификация WSGI (PEP-333)
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
История PermLUG
История PermLUGИстория PermLUG
История PermLUG
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
Linux (pipes)
Linux (pipes) Linux (pipes)
Linux (pipes)
 
Android emulators features
Android emulators featuresAndroid emulators features
Android emulators features
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 

Similaire à "Web Audio Api", Анатолий Найда, MoscowJS 27

Разработка распределенного приложение на платформе Amazon Cloud
Разработка распределенного приложение на платформе Amazon CloudРазработка распределенного приложение на платформе Amazon Cloud
Разработка распределенного приложение на платформе Amazon CloudMageCloud
 
Интерактивность в Html5
Интерактивность в Html5Интерактивность в Html5
Интерактивность в Html5Alexander Samantsov
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Блокчейн, консенсус - как и зачем? #spblockchain
Блокчейн, консенсус - как и зачем? #spblockchainБлокчейн, консенсус - как и зачем? #spblockchain
Блокчейн, консенсус - как и зачем? #spblockchainДмитрий Плахов
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...Arvids Godjuks
 

Similaire à "Web Audio Api", Анатолий Найда, MoscowJS 27 (6)

Web audio API
Web audio APIWeb audio API
Web audio API
 
Разработка распределенного приложение на платформе Amazon Cloud
Разработка распределенного приложение на платформе Amazon CloudРазработка распределенного приложение на платформе Amazon Cloud
Разработка распределенного приложение на платформе Amazon Cloud
 
Интерактивность в Html5
Интерактивность в Html5Интерактивность в Html5
Интерактивность в Html5
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Блокчейн, консенсус - как и зачем? #spblockchain
Блокчейн, консенсус - как и зачем? #spblockchainБлокчейн, консенсус - как и зачем? #spblockchain
Блокчейн, консенсус - как и зачем? #spblockchain
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
 

Plus de MoscowJS

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionMoscowJS
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидахMoscowJS
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийMoscowJS
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyMoscowJS
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkMoscowJS
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31MoscowJS
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31MoscowJS
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31MoscowJS
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31MoscowJS
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33MoscowJS
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33MoscowJS
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33MoscowJS
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...MoscowJS
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29MoscowJS
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29MoscowJS
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29MoscowJS
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28MoscowJS
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 

Plus de MoscowJS (20)

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkey
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 

"Web Audio Api", Анатолий Найда, MoscowJS 27

  • 1. Web Audio Api Анатолий Найда anaida@andiks.com vk.com/anatoliy_naida
  • 2. Воспроизведение аудио данных на базовом уровне путем встраивания в HTML код ➢ play ➢ pause ➢ load HTML5 Audio 2
  • 3. Web Audio 3 ➢ cмешивание, синтез и визуализация ➢ обработка и фильтрации (например, пещеры или водосточной трубы, затухание, доплеровское смещение и т.д.) ➢ возможности присутствующие в современных звуковых движках
  • 4. Specification Status Web Audio API Working Draft Кроссбраузерность 4
  • 5. Поддержка аудиоформатов 5 Ogg Vorbix WAV PCM AAC MP3 Edge x x x Firefox x x partial Chome/Safari/ mobile Safari x x x x
  • 6. Основные шаги для воспроизведения 1. Создаем аудиоконтекст new AudioContext(); 2. Загружаем аудио в буфер request.responseType ='arraybuffer'; 3. Подключаем источник к получателю src.connect(ctx.destination); 4. Воспроизводим source.start(0); 6
  • 7. Загрузка аудио var loadSoundFile = function(url) { // делаем XMLHttpRequest (AJAX) на сервер var xhr = new XMLHttpRequest() ; xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { ... 7
  • 8. Загрузка аудио // декодируем бинарный ответ context.decodeAudioData( this.response, function(decodedArrayBuffer) { // получаем декодированный буфер buffer = decodedArrayBuffer ; }, function(e) { console.log('Error decoding file', e); }); }; xhr.send(); } 8
  • 9. Основные шаги для воспроизведения 1. Создаем аудиоконтекст new AudioContext(); 2. Загружаем аудио в буфер request.responseType ='arraybuffer'; 3. Подключаем источник к получателю src.connect(ctx.destination); 4. Воспроизводим source.start(0); 9
  • 10. Базовое воспроизведение без эффектов // функция начала воспроизведения var play = function(){ // создаем источник source = context.createBufferSource() ; // подключаем буфер к источнику source.buffer = buffer; // дефолтный получатель звука destination = context.destination; // подключаем источник к получателю source.connect(destination); // воспроизводим source.start(0); } 10
  • 11. Узлы и маршрутизация Что такое маршрутизация ? ● аудио процессинг это цепочка из узлов ● узлы соединенные друг с другом действуют как "маршрут звука" Простой маршрут 11
  • 13. 13
  • 14. 3D звук // создадим, например, паннер для представления летающего объекта var panner = context.createPanner() ; // подключаем источник к паннеру moveSource.connect(panner); // подключаем паннер к выходу sound.panner.connect(destnation); // c какой-то периодичностью мы будем указывать // где сейчас находится объект panner.setPosition(q.x, q.y, q.z); // в какую сторону он летит panner.setOrientation(vec. x, vec.y, vec.z); // c какой скоростью он летит panner.setVelocity(dx/dt, dy/dt, dz/dt); 14
  • 16. Итог Web Audi Api - мощный инструмент призванный решать самые сложные задачи при работе с аудио в браузере. ➢ Объемный звук для игр и интерактивных веб приложений ➢ Приложения для обработки звука ➢ Аудио синтез ➢ Визуализация аудио и многое, многое, многое другое… 16
  • 17. Всем спасибо Презентация доступна по адресу goo.gl/oeOP2r Со мной можно связаться по адресу anaida@andiks.com Все полезные ссылки и демо в одном месте goo.gl/9vheE1 17