las nuevas api de audio en html5

77
LAS NUEVAS API DE AUDIO EN Pablo Garaizar Sagarminaga

Upload: pablo-garaizar

Post on 26-Jan-2015

5.664 views

Category:

Technology


0 download

DESCRIPTION

Los nuevos paradigmas de computación como el Cloud Computing y los escenarios sugeridos en torno a la Internet del Futuro indican la próxima prevalencia de Web como entorno de ejecución de aplicaciones. Los desarrollos de estándares que posibilitan este cambio tienen a HTML5 como referencia. Sin embargo, a pesar de las múltiples APIs que han sido desarrolladas para igualar o incluso superar a tecnologías web anteriores a este estándar, la funcionalidad de reproducción, generación y análisis de audio está todavía en una fase definitoria en la que varias implementaciones compiten por lograr ser reconocidas como el estándar de facto. En esta presentación repasaremos estas API, aportando explicaciones de su funcionalidad y ejemplos de su uso.

TRANSCRIPT

Page 1: Las nuevas API de audio en HTML5

LAS NUEVAS API DE AUDIO EN

Pablo Garaizar Sagarminaga

Page 2: Las nuevas API de audio en HTML5

Agenda● Introducción a HTML5.● ¿Cómo ha sido el audio en la Web hasta ahora?● Las nuevas API de audio para la Web:

● Audio Data API.● Web Audio API.● Otras API multimedia para la Web.

● Conclusiones

Page 3: Las nuevas API de audio en HTML5

¿HTML5?

Page 4: Las nuevas API de audio en HTML5

Timed media

playback

Cross-document messaging

Microdata

Web Storage

Drag& drop

Document editing

Canvas 2D API

Browser history

MIME type and protocol

handler registration

Page 5: Las nuevas API de audio en HTML5

Web SQL

Database

The Indexed Database

API

File API

Websockets

Geolocation

WebWorkers

SVG CSS3WebGL

Page 6: Las nuevas API de audio en HTML5

CSS3JS

APIsHTML5

Page 7: Las nuevas API de audio en HTML5

¿Cómo ha sido el audio en la Web?

Page 8: Las nuevas API de audio en HTML5

<EMBED>

<EMBED src="file.wav" autostart="true" loop="false" volume="100" hidden="true">

<NOEMBED> <BGSOUND src="file.wav"></NOEMBED>

Page 9: Las nuevas API de audio en HTML5

Java

<APPLET CODE="Player" SOUND="file.wav"></APPLET>

Page 10: Las nuevas API de audio en HTML5

Flash

<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='300' height='300' id='player' name='player'> <param name='movie' value='player.swf'> <param name='flashvars' value='file=file.wav'></object>

Page 11: Las nuevas API de audio en HTML5

Silverlight

<object style="height: 300px; width: 300px;" type="application/x-silverlight-2" data="data:application/x-silverlight-2,"> <param value="AudioPlayer.xap" name="source"/> <param value="Path=file.wav" name="initParams"/>

<param value="5.0.61118.0" name="minRuntimeVersion"/>

<p>You need to install Microsoft Silverlight to view this content.</p></object>

Page 12: Las nuevas API de audio en HTML5

En resumen...

Page 13: Las nuevas API de audio en HTML5

Elementos HTML no estándar

Page 14: Las nuevas API de audio en HTML5

Abuso de elementos para embeber contenido no

propio de HTML

Page 15: Las nuevas API de audio en HTML5

Necesidad de plugins no estándar

Page 16: Las nuevas API de audio en HTML5
Page 17: Las nuevas API de audio en HTML5

¡Estaría bien que con HTML5 mejorara la cosa!

Page 18: Las nuevas API de audio en HTML5

Multimedia en HTML5

<audio><audio src="music.mp3" autoplay loop="3" controls preload />

<video><video width="320" height="240" controls> <source src="pr6.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'> <source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"'> <source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"'></video>

Page 19: Las nuevas API de audio en HTML5

<audio> en HTML5

<audio>// funciones

audio.load();audio.play();audio.pause();

// propiedades

audio.currentSrcaudio.currentTimeaudio.duration

// eventos

loadedmetadatatimeupdatepauseplayended

Page 20: Las nuevas API de audio en HTML5

Suena bien, ¿verdad?(perdón por el chiste fácil)

Page 21: Las nuevas API de audio en HTML5
Page 22: Las nuevas API de audio en HTML5

El caos de los códecs

MP3 WAV OGG

Internet Explorer 9 a

Firefox 4.0+ a a

Google Chrome 6+ a a a

Apple Safari 5+ a a

Opera 10.6+ a a

Page 23: Las nuevas API de audio en HTML5

¿Solución? Múltiples sub-elementos source

<audio controls="controls"> <source src="song.ogg" type="audio/ogg" /> <source src="song.mp3" type="audio/mp3" /> Your browser does not support the audio tag.</audio>

Page 24: Las nuevas API de audio en HTML5

Pero... HTML5 no se ha limitado a incluir <video> para mejorar el aspecto

visual

Page 25: Las nuevas API de audio en HTML5

WebGL

SVG

...

Canvas 2D API

requestAnimation

Frame

Page 26: Las nuevas API de audio en HTML5

¡Qué bueno sería tener una API estándar en HTML5 para

manipular audio!

Page 27: Las nuevas API de audio en HTML5

Las nuevas API de audio para la Web

(nuevas más de una, → no hay un solo estándar)

Page 28: Las nuevas API de audio en HTML5
Page 29: Las nuevas API de audio en HTML5

Audio Data API

Page 30: Las nuevas API de audio en HTML5

Audio Data API

Propuesta por Mozilla(implementada en FF4+)

Extiende <audio> y <video>

API basada en eventos(loadedmetadata, MozAudioAvailable)

Page 31: Las nuevas API de audio en HTML5

Audio Data API: evento loadedmetadata

Evento estándarDefinido en HTML5

Metadatos adicionales

mozChannels

mozSampleRate

mozFrameBufferLength

+

Page 32: Las nuevas API de audio en HTML5

Audio Data API: evento MozAudioAvailable

Generado cada vez que un fragmento de audio está disponible(≠ ritmo de reproducción del audio)

Proporciona

Tiempo para esa muestra (desde el inicio del audio y en segundos)

Array de audio decodificado(floats en crudo, sin información de volumen, etc.)

Page 33: Las nuevas API de audio en HTML5

Audio Data API: leer audio y procesarlo

var channels, rate, frameBufferLength, samples;

function audioInfo() { var audio = document.getElementById('audio');

// Metadatos propios de la Audio Data API channels = audio.mozChannels; rate = audio.mozSampleRate; frameBufferLength = audio.mozFrameBufferLength;}

function audioAvailable(event) { var samples = event.frameBuffer, time = event.time;

for (var i = 0; i < frameBufferLength; i++) { // processSample hará lo que sea necesario con el audio processSample(samples[i], channels, rate); }}

Page 34: Las nuevas API de audio en HTML5

Audio Data API: escribir audio

// Creamos un elemento <audio>var audioOutput = new Audio();

// Lo configuramos con dos canales a 44.1 KHzaudioOutput.mozSetup(2, 44100);

// Preparamos un array con las muestras y las escribimosvar samples = [0.242, 0.127, 0.0, -0.058, -0.242, ...];var numberSamplesWritten = audioOutput.mozWriteAudio(samples);

// Obtenemos la posición actual del flujo de audio // medida en muestrasvar currentSampleOffset = audioOutput.mozCurrentSampleOffset();

Page 35: Las nuevas API de audio en HTML5

Demos

Page 36: Las nuevas API de audio en HTML5

MP3 en Firefox (¡sin patentes!)http://jsmad.org/

Page 37: Las nuevas API de audio en HTML5

Audio Data APIhttp://videos.mozilla.org/serv/blizzard/audio-slideshow

Page 38: Las nuevas API de audio en HTML5

Visualizadorhttp://www.nihilogic.dk/labs/pocket_full_of_html5/#presets/struggle.js

Page 39: Las nuevas API de audio en HTML5

Web Audio API

Page 40: Las nuevas API de audio en HTML5

Web Audio API

Propuesta por Google(implementada en Chrome10+)

AudioContext y AudioNode(poco que ver con <audio>)

API a alto nivel(mucha funcionalidad ya implementada)

Page 41: Las nuevas API de audio en HTML5

AudioContext

AudioNodes

AudioSourceNode(AudioBufferSourceNode,

MediaElementAudioSourceNode,JavaScriptAudioNode)

AudioDestinationNode

DelayNoderetardos ajustables

AudioGainNodeganancia

AudioPannerNodeaudio en 3D

ConvolverNodeefectos de espacio, reverb

DynamicsCompressorNodeefectos de compresión / expansión

RealtimeAnalyserNodeanálisis en tiempo real

BiquadFilterNodefiltros paso-bajo, paso-alto, paso-banda...

WaveShaperNodeefectos no-lineales, distorsiones

Page 42: Las nuevas API de audio en HTML5

Web Audio API: hacer sonar un tono

var context = new webkitAudioContext();

var buffer = context.createBuffer(1, BUFFER_SIZE, SAMPLE_RATE);var bufferData = buffer.getChannelData(0);var samples = (duration / 1000) * SAMPLE_RATE;

for (i = 0; i < samples; i++) { bufferData[i] = Math.sin(pitch * PI_2 * i / SAMPLE_RATE);}

var source = context.createBufferSource();source.buffer = buffer;source.connect(context.destination);source.noteOn(0);

Page 43: Las nuevas API de audio en HTML5

AudioContext

↓AudioSourceNode AudioDestinationNode

AudioContext

↓ AudioDestinationNode↓ AudioGainNodeAudioSourceNode

Page 44: Las nuevas API de audio en HTML5

Web Audio API: conectar un nodo de ganancia

var gainNode = context.createGainNode();

source.connect(gainNode);

gainNode.connect(context.destination);

gainNode.gain.value = 0.5;

Page 45: Las nuevas API de audio en HTML5

AudioContext

AudioSourceNode A

Dry A

AudioDestinationNode

LowPass Filter

AudioSourceNode B AudioSourceNode C

Waveshaper Distortion

Panner

ConvolutionReverb

Dry BDry C

Wet A Wet B Dry C

DynamicsCompressor

Dry Master Gain

Page 46: Las nuevas API de audio en HTML5

Demos

Page 47: Las nuevas API de audio en HTML5

HTML5 Showcase for Web Developers:The Wow and the How

http://www.htmlfivewow.com/slide60

Page 48: Las nuevas API de audio en HTML5

HTML5 Showcase for Web Developers:The Wow and the How

http://www.htmlfivewow.com/slide64

Page 49: Las nuevas API de audio en HTML5

WebAudio Drum Machinehttp://chromium.googlecode.com/svn/trunk/samples/audio/shiny-drum-machine.html

Page 50: Las nuevas API de audio en HTML5
Page 51: Las nuevas API de audio en HTML5

Otras API multimedia para la Web

Page 52: Las nuevas API de audio en HTML5

WebRTC API

Page 53: Las nuevas API de audio en HTML5

WebRTC API

Objetivo: proporcionar Comunicación en Tiempo Real en la Web

Sin plugins, sin instalaciones extra, etc.Solamente JavaScript y HTML5 (+ API en C++ en el navegador)

Escenarios: streaming, videoconferencia, etc.(implementación funcional para Google Chrome)

Page 54: Las nuevas API de audio en HTML5

WebRTC API

Page 55: Las nuevas API de audio en HTML5

HTML Streams API

Page 56: Las nuevas API de audio en HTML5

HTML Streams API

Propuesta de Ian Hickson para la gestión de múltiples flujos multimedia en HTML5

HTML MediaController APISincronización de elementos multimedia en HTML

Relacionada con... Captura y grabación de audio y vídeo local

Otras API de gestión de streaming multimedia

Page 57: Las nuevas API de audio en HTML5

MediaStream Processing API

Page 58: Las nuevas API de audio en HTML5

MediaStream Processing API

Objetivo: API común que englobe a todas las que gestionan contenido multimedia en tiempo real

HTML5 <audio> y <video>

Audio Data API Web Audio API

HTML Streams API HTML MediaController

WebRTC API

Page 59: Las nuevas API de audio en HTML5

Conclusiones

Page 60: Las nuevas API de audio en HTML5

Todas las API tienen mucho potencial

(buen diseño, implementaciones funcionales)

Page 61: Las nuevas API de audio en HTML5

No hay una sola forma de hacer lo mismo

(tampoco la hay en animaciones y nos parece bien)

Page 62: Las nuevas API de audio en HTML5
Page 63: Las nuevas API de audio en HTML5

Mi apuesta: Web Audio

Page 64: Las nuevas API de audio en HTML5

Más eficiente y fácil de usar(deja más trabajo “duro” a C++ y menos a JavaScript)

Page 65: Las nuevas API de audio en HTML5

Importante cuota de mercado en móvil / tablet

(Webkit Google Chrome + Safari Android + iOS)→ →

Page 66: Las nuevas API de audio en HTML5
Page 67: Las nuevas API de audio en HTML5

¿Qué uso ahora mismo en producción?

Page 68: Las nuevas API de audio en HTML5
Page 69: Las nuevas API de audio en HTML5
Page 70: Las nuevas API de audio en HTML5
Page 71: Las nuevas API de audio en HTML5

Polyfillshttps://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

Page 72: Las nuevas API de audio en HTML5

Para saber más...

Page 73: Las nuevas API de audio en HTML5

W3Chttp://dev.w3.org/html5/spec/Overview.html

Page 74: Las nuevas API de audio en HTML5

WHATWGhttp://whatwg.org/html

Page 75: Las nuevas API de audio en HTML5

Muchas gracias ;-)

Page 77: Las nuevas API de audio en HTML5

Todas las imágenes son propiedad de sus respectivos dueños*, el resto del

contenido está licenciado con la licencia Creative Commons by-sa 3.0

* W3C, WHATWG, Google, Memegenerator.net, Troll.me