Web Audio API

By  on  

The Web Audio API allows developers to load and decode audio on demand using JavaScript.  The more I evaluate awesome games for Firefox OS TVs, the more I get to learn about these APIs that I normally wouldn't touch.  The following is a very basic introduction to the WebAudio API, often used for JavaScript games or apps allowing modification of audio on the front end.

Let's start with a reduced Web Audio API code sample:

// Create an AudioContext instance for this sound
var audioContext = new (window.AudioContext || window.webkitAudioContext)();
// Create a buffer for the incoming sound content
var source = audioContext.createBufferSource();
// Create the XHR which will grab the audio contents
var request = new XMLHttpRequest();
// Set the audio file src here
request.open('GET', 'sound-effect.mp3', true);
// Setting the responseType to arraybuffer sets up the audio decoding
request.responseType = 'arraybuffer';
request.onload = function() {
  // Decode the audio once the require is complete
  audioContext.decodeAudioData(request.response, function(buffer) {
    source.buffer = buffer;
    // Connect the audio to source (multiple audio buffers can be connected!)
    source.connect(audioContext.destination);
    // Simple setting for the buffer
    source.loop = true;
    // Play the sound!
    source.start(0);
  }, function(e) {
    console.log('Audio error! ', e);
  });
}
// Send the request which kicks off 
request.send();

I've tried to comment within the code to describe the process as best as possible.  Remember that the above is a very reduced example; there's much more you can do with Web Audio.

I won't pretend to be an expert of all the nuances with Web Audio -- I was simply super excited to see all of this working.  Web Audio does way more than simply allow you to play the audio; you can modify the audio with filters, ramping, and a bunch more.  You can learn more about WebAudio from these awesome sources:

Have you done anything awesome with Web Audio?  Please share with the noobs like me!

Recent Features

  • By
    Create a CSS Flipping Animation

    CSS animations are a lot of fun; the beauty of them is that through many simple properties, you can create anything from an elegant fade in to a WTF-Pixar-would-be-proud effect. One CSS effect somewhere in between is the CSS flip effect, whereby there's...

  • By
    From Webcam to Animated GIF: the Secret Behind chat.meatspac.es!

    My team mate Edna Piranha is not only an awesome hacker; she's also a fantastic philosopher! Communication and online interactions is a subject that has kept her mind busy for a long time, and it has also resulted in a bunch of interesting experimental projects...

Incredible Demos

  • By
    CSS Selection Styling

    The goal of CSS is to allow styling of content and structure within a web page.  We all know that, right?  As CSS revisions arrive, we're provided more opportunity to control.  One of the little known styling option available within the browser is text selection styling.

  • By
    Skype-Style Buttons Using MooTools

    A few weeks back, jQuery expert Janko Jovanovic dropped a sweet tutorial showing you how to create a Skype-like button using jQuery. I was impressed by Janko's article so I decided to port the effect to MooTools. The XHTML This is the exact code provided by...

Discussion

  1. Plopz

    Its funny that you commented every line except the most important.

    source.connect(audioContext.destination);
    

    The magic of the audio api is that you can connect, combine and chain together all of these different nodes which operate on I/O to manipulate the data. The Web Audio developer tools in firefox is helpful to visualize these node traversals.

  2. The Web Audio API also includes a built-in synthetiser that you can use to play sounds without using sound file. I worked on a musical game during a hackathon where you can compose music with strangers or friends: http://polytun.es/

    Also, Pizzicato is a great library to create to create and manipulate sounds with the Web Audio API : https://github.com/alemangui/pizzicato

  3. I made a synthesizer and sound visualizer using the full power of Web Audio API, called Comet. You can find it here:

    https://venerons.github.io/Comet

  4. David,

    We have done cool stuff with the web audio API in conjunction with SoundCTL audio API, doing real time audio streaming and routing.

  5. I made an audio mixer using the Web Audio API here: https://jamesfiltness.github.io/web-audio-mixer/ Have a go at mixing David Bowie’s Space Oddity!

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!