orchestrating the web audio api - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf ·...

50
Orchestrating the Web Audio API by Srikumar K. Subramanian JSFoo, Bangalore 18 Sep 2015 Licensed under Creative Commons CC-BY-SA 3.0

Upload: others

Post on 02-Oct-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Orchestrating the Web Audio API

by Srikumar K. Subramanian JSFoo, Bangalore

18 Sep 2015

Licensed under Creative Commons CC-BY-SA 3.0

Page 2: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda

Page 3: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

Page 4: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

• Architecture of the Web Audio API - Dynamic signal flow graphs

Page 5: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

• Architecture of the Web Audio API - Dynamic signal flow graphs

• Taming the dynamism

Page 6: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

• Architecture of the Web Audio API - Dynamic signal flow graphs

• Taming the dynamism

• Just-in-time scheduling

Page 7: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

• Architecture of the Web Audio API - Dynamic signal flow graphs

• Taming the dynamism

• Just-in-time scheduling

• … and how it’s going to get better soon

Page 8: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Agenda• A personal history of noise making and computers

• Architecture of the Web Audio API - Dynamic signal flow graphs

• Taming the dynamism

• Just-in-time scheduling

• … and how it’s going to get better soon

• … with demos, of course.

Page 9: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …
Page 10: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

In the beginning _

Page 11: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Seymour Papert

“Logo” (1967)

Page 12: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

BEEP duration, pitch

Page 13: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

SOUND channel, volume, pitch, duration

Page 14: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

PLAY "cdefgab"

Page 15: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

What about today?

Page 16: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Before the Web Audio API, . . .

TOUGH LUCK!

Page 17: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

BEEP using the Web Audio API

Page 18: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

x gain Filter Out

Page 19: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Examples

Page 20: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

CSound (since 1986)

Page 21: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Max (since 1986)

Page 22: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Pure Data (since 1990)

Page 23: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

SuperCollider (since 1996)

Page 24: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

SuperCollider (since 1996)

Page 25: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Chuck (since 2003)

Page 26: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

The Web Audio API changes everything

Page 27: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

DEMO

The “Rhythm Engine”

Page 28: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Revisiting beep() …

Page 29: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Now you see me Now you don’t

Problem 1

Page 30: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

x gain Filter

Out

beep(330,2.0) sets this up at first

Page 31: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

x gain Filter

Out

beep(330,2.0) sets this up at first

About 2.0 seconds later …

Page 32: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

x gain Filter

Out

Gain

model.beep(330,2.0)

Page 33: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

x gain Filter

Out

Gain

model.beep(330,2.0)

Gain

About 2.0 seconds later … we can beep again.

Page 34: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Changing our minds - a.k.a. interactivity

Problem 2

Page 35: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

setTimeout() to the rescue?

Page 36: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

setTimeout() to the rescue?

NOT!

Page 37: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Just-in-time schedulingusing the Web Audio API and

requestAnimationFrame()

… together.

Page 38: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

requestAnimationFrame() callbacks

scheduling intervals with native node types

time

Page 39: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

time

requestAnimationFrame() callbacks

longer scheduling intervals when using ScriptProcessor

Page 40: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Steller gives you …

• A GraphNode abstraction that is stable for model construction.

• A sample-accurate just-in-time Scheduler with multi-tracking and tempo control.

• Decoupling of specification of interactive models from their performance.

Page 41: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

GraphNode

function GraphNode(node, inputs, outputs) {...}

Turns any object into a node that can participate in the

audio graph.

Page 42: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Scheduler

function (sched, clock, next) { // ... do something next(sched, clock, sched.stop); // Go to the next one (optional). }

Page 43: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Scheduler

delay, track, spawn, sync, gate, rate, dynamic,

… and more higher order specifiers

function (sched, clock, next) { // ... do something next(sched, clock, sched.stop); // Go to the next one (optional). }

Page 44: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

DEMO

“Steller Explorer”

Page 45: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Upcoming goodies

Page 46: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

currentTime

currentPlayTime

output latency

audio block

Precise coordination with other events

Page 47: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Audio workers

Main JS thread Audio thread

JS

JS

JS N

UI a

nd o

ther

com

pute

sWorkers run JS here!

Native code

Page 48: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

To not conclude …

• The Web Audio API is sweet for music and synthesis work … with some care … and it’s going to get sweeter.

• Consider the creative possibilities leveraging WebRTC, WebGL, Web MIDI API (for music and lighting control), Device API, Canvas, SVG, DOM+CSS, asm.js …

Page 49: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

Thank you

Questions?

Page 50: Orchestrating the Web Audio API - sriku.orgsriku.org/talks/jsfoo2015-webaudioapi-srikumarks.pdf · • The Web Audio API is sweet for music and synthesis work … with some care …

References and Credits

1. ZX Spectrum image from Wikimedia commons 2. BBC Micro image from Wikimedia commons 3. Max patch image from abstrakt.vade.info. 4. "SuperCollider screenshot2". Via Wikipedia - (link) 5. "Pure Data with many patches open (showing netpd project)"

by Reduzent - This is a screenshot of a netpd session. Licensed under CC BY-SA 3.0 via Commons - (link)

6. GW-BASIC screenshot from Wikimedia commons 7. Peter Kellock is the original creator of the Rhythm Engine 8. Steller - https://github.com/srikumarks/steller