Question

I just came across a Nintendo emulator written entirely in JavaScript on the interwebs, but it doesn't have sound. It got me thinking: Is there any way to synthesize sound in the browser using JavaScript and then play it? If it's not possible in general, then are there any Safari/Opera/FireFox/IE/Etc. extensions that would make it possible?

I am not asking about techniques for synthesizing sound, just techniques for playing sounds that have been synthesized by code running in the browser.

Was it helpful?

Solution

I would imagine your best bet is to have Javascript talk to Flash using ExternalInterface (http://www.adobe.com/devnet/flash/articles/external_interface.html). Flash now has a way of transfering data between the sound buffers and a general purpose ByteArray classs.

http://www.adobe.com/devnet/flash/articles/dynamic_sound_generation/

You can develop Flash for free using the Flex SDK http://www.adobe.com/products/flex/.

OTHER TIPS

Most developers use SoundManager 2 when they want to add sound to their application with JavaScript. It has hooks so JavaScript can interact with Flash 8 and 9 features. I am not sure if it has exposed the ability to work with Byte Data which I guess you are after, I never had to deal with that.

It turns out the author of the NES emulator has found a dynamic audio library:

https://github.com/bfirsh/dynamicaudio.js

I haven't tried it, but the docs look promising:

var dynamicaudio = new DynamicAudio({'swf': '/static/dynamicaudio.swf'})

write(samples); // Plays an array of floating point audio samples in the range -1.0 to 1.0.

In theory it should be possible to synthesize the sounds and then get the browser to play them using a data URL.

In practice, Steven Wittens has actually produced a demo of this technique. The encodeAudio8bit and encodeAudio16bit functions are where the magic happens.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top