

Jam With Chrome - robin_reala
http://jamwithchrome.com/

======
krosaen
According to <http://www.jamwithchrome.com/technology>

"The real time websocket relay system used to make collaboration with JAM
possible was developed using the Go programming language."

And the web app is hosted on app engine. AFAIK though, you couldn't host the
Go websocket component on app engine (even though GAE supports Go as a
runtime) since GAE doesn't support persistent connections directly.

In any case, very very cool!

~~~
bohinjc
I think you missed the Channel API :
<https://developers.google.com/appengine/docs/go/channel/>

(also available for Python and Java)

~~~
halter73
The Channel API doesn't currently use WebSockets. Instead it uses Comet
techniques like forever frame and long polling.

[http://code.google.com/p/googleappengine/issues/detail?id=25...](http://code.google.com/p/googleappengine/issues/detail?id=2535)

------
grayprog
Lots of fun. Always wanted a live Internet jamming solution for a band. Now,
if only it could work with real instruments plugged to the computer. But the
network delays make it impossible. Waiting for the day when bits from Europe
to the US won't take 100-150ms to travel. Not sure it's going to happen
anytime soon, though.

Any 2 sounds played above 30ms apart start to be distinct to the human ears.

~~~
thewarrior
The speed of light is always going to be a limitation for these kinds of
applications . I dont see how the latency can be reduced enough to make this
close enough to a live jamming session . Considering your 30 ms threshold it
takes light that much time to travel 10,000 kilometers . Could we perhaps use
some of the predictive techniques that games like Counter strike use ?

~~~
extesy
Quantum entanglement, perhaps? It's supposed to transfer information without
any speed of light limitation.

~~~
zitterbewegung
If we could get enough bits to work with quantum entanglement then sure. But
regardless to get information out of a quantum entanglement you have to send a
basis of measurement before you can decode the data so you are still bound by
the speed of light.

~~~
robin_reala
That's the best explanation I've read of why quantum tunnelling doesn't allow
FTL information transfer. Thanks!

------
alexanderh
Cute, novel, technically impressive from a web design perspective.

But does it have AISO low latency audio driver support? Lets not even get into
the latencies websockets are going to create. Even if you set something like
this up on a LAN, the latencies would still be too high for any truly
professional musician.

Dont expect anything like this being used by any real musicians anytime soon,
even minus the websockets collaborative part.

Still very cool though. But I still wait for a day when something like Rock
Band or Guitar Hero actually has professional low latency audio that could
seriously be used live on stage by a band with sub 10ms audio latencies.

If rockband and guitar hero cant even do that, I'm not holding my breath for
chrome anytime soon, especially in a networked situation.

~~~
robin_reala
Presumably the WebMIDI authors are thinking about latency?

<http://www.w3.org/TR/2012/WD-webmidi-20121025/>

~~~
mcmire
Ah what I didn't know there was a WebMIDI draft... do any browsers plan to
support this?

~~~
robin_reala
Chris Wilson is an author of this and at Google so I guess Chrome at least
will implement. No idea beyond that.

------
gamegod
Does anyone know if they stream audio or just events to peers over Web
Sockets?

Some tech notes from a pro-audio software developer:

\- All the samples are OGG ( [http://chrome-jam-
static.commondatastorage.googleapis.com/xm...](http://chrome-jam-
static.commondatastorage.googleapis.com/xml/PreSounds.xml) )

\- They're using some "DMAF" engine for the audio, though I can't figure out
who made it: <http://www.jamwithchrome.com/js/compiled/dmaf_all.js>

It's pretty serious stuff from the looks of it - It's got a node graph with
different DSP modules (envelope follower, delay, ADSR, distortion, LFO,
chorus, compressor, phaser, equalizer, biquad filters), it plays MIDI files,
and more.

It's all written in JavaScript too, and there's no way you'd write this just
for one Chrome experiment. I don't see any outside party acknowledged on the
website, but I'd guess that this DMAF JS audio engine is licensed from
someone.

It's interesting to see what they've been able to do with the Web Audio API
and JavaScript, but I think the Web Audio API is going to be forever limited
to toys like this unfortunately. You just can't do real-time audio with a
garbage collector waiting to pounce.

I developed a similar application for Chrome (which coincidentally had the
codename "Jam"), but instead, it uses Native Client for audio instead of the
Web Audio API. It's called SongStarter, and you can jam with it here:
[https://chrome.google.com/webstore/detail/jbkilbgofafobojkif...](https://chrome.google.com/webstore/detail/jbkilbgofafobojkifhjflhnnbiojbjb)

(NaCl apps must be installed from the Chrome Web Store for the time being,
otherwise they won't work. Google's choice...)

~~~
Theodeus
DMAF is our framework at www.dinahmoe.com. It stands for DinahMoe Audio
Framework. I'm the one who's been doing the grunt work of the framework, so
I'm quite familiar with it ;) We've decided to release the effects as open
source at <https://github.com/Dinahmoe/tuna> , though it's not complete yet
with all the effects.

~~~
gamegod
Awesome, great job with it, and nice that you open sourced it!

How long have you been working on it for?

There's going to be loads of "big brand" companies looking for crazy audio
doodads for their websites after this Jam thing. Probably lots of contract
work to found be there... :)

~~~
Theodeus
Thanks :) Let's hope so.

It's been in the making since December, if I don't remember it wrong. I have
to give credit to the rest of my team too, of course.

------
md224
I've said it before and I'll say it again: someone really needs to build the
"Google Web Fonts" of Web Audio API instruments/effects. If developers were
able to include sampled/synthesized sounds as easily as dropping in a script
tag, it would open up a whole world of possibilities for interactive music on
the web.

~~~
jdherman
I was just thinking this the other day. What form do you think this would
take?

I have only a fuzzy understanding of how this works, but I was thinking you
could run a bunch of .wav samples through Web Audio to get their wave shapes
... save them as arrays, and then synthesize sounds from a single js file?
(Rather than lugging around the .wav files themselves).

If this is possible, it would be awesome.

~~~
md224
Well, I was thinking more along the lines of providing a service that takes
care of all the note-sample mapping for you. You could either specify
instruments/effects that you want via script tag url params, or perhaps using
some kind of loading library (Google Web Fonts offers both of these methods).
The bottom line is that you would be provided with patchable Instrument and
Effect objects that expose a simple interface for triggering/releasing notes
and modifying relevant parameters.

~~~
paulirish
There is a complementary discussion to this happening at
<https://github.com/h5bp/lazyweb-requests/issues/82>

~~~
md224
a complementary discussion which, it turns out, I started! ah ha!

------
ryanslade
<http://www.jamwithchrome.com/technology>

Go backend using App Engine.. Good to see Google pushing it.

------
roryokane
<http://www.multiplayerpiano.com/> is similar. It only supports the piano
instrument, but it has a public lobby where you can play with other visitors
to the site, as well as private rooms.

------
hayksaakian
... as long as you're not on chrome mobile, which is 4 versions behind.

~~~
mtgx
Make that 5. Desktop Chrome is v23 now. This would be great as an app for
Android tablets, though - something like an alternative to Apple's Garage
Band.

It seems yo can add this as an extension to Chrome, too:

[https://chrome.google.com/webstore/detail/jam-with-
chrome/bg...](https://chrome.google.com/webstore/detail/jam-with-
chrome/bggjdpbfjakfkacljidachigalghbnpk)

It seems to say that I can use the QWERTY keys to play the guitar, and while
the buttons are moving on the screen, the chords aren't. Is that a bug or am I
doing something wrong? The sounds seem to work only when I used the auto mode.

~~~
BHSPitMonkey
When you're in "Easy" mode, the keys (or in your case frets) don't actually do
what they should in reality; They're just used to define generally what range
the autoplay pattern gets centered upon (the actual notes played are governed
by the selected chord). It's kind of disappointing, really; It should let you
play real notes in conjunction with the patterns in my opinion.

The real bug, though, is that the "key" setting at the top of the UI that's
supposed to update the available set of chords is completely wonky, and rarely
does what it's supposed to (what, you wanted B? Let's go with A instead. You
chose major? Minor it is!)

------
aed
So this is kind of odd... Nothing loaded when I first opened the page. I
opened developer tools and had a javascript error "Failed to load resource
<http://connect.facebook.net/en_US/all.js> . Well, I keep all facebook widgets
blocked with Ghostery and disabling it allowed the website to load.

Seems kind of strange. I mean if FB goes down or moves the location of that js
file or something, the whole jamwithchrome site won't work?

------
joelthelion
What is missing from firefox that makes it incompatible with this?

~~~
shardling
I think Firefox and Chrome have different (experimental, advanced) audio
interfaces right now.

I'm not really sure about the differing capabilities, or what standardization
of either looks like right now. But I _think_ Mozilla's api is more low level,
so it might be possible to create a compatibility shim on top of it?

~~~
robin_reala
Mozilla will be adopting the WebAudio API from Chrome and have deprecated
their own (lower-level) API. Work hasn’t started yet though.

~~~
azakai
No, work has in fact started,

<https://bugzilla.mozilla.org/show_bug.cgi?id=WebAudio>

~~~
robin_reala
Oops, hadn’t realised that was a metabug, just saw that it didn’t have any
attached patches. Mea culpa.

------
jdherman
This is really cool. Nice going. I'm amazed to see how many people have been
working on similar things. I took a shot at this a while ago
(<http://soundtype.com>) but I was stuck using Java for MIDI. Really looking
forward to the MIDI spec for the Web Audio API.

Being that this is HN many of you might have seen this already, but there's an
exciting Google IO talk from Chris Wilson about Web Audio:
<http://www.youtube.com/watch?v=hFsCG7v9Y4c>

And see the corresponding slide deck for code: <http://webaudio-
io2012.appspot.com/#1>

------
manish_gill
Online music players like this are pretty cool, but I find it really hard to
actually produce a meaningful tune while holding down keyboard and dragging
mouse around.

Oh well, maybe I just need to practice more!

~~~
kinlan
You can use your keyboard too.

------
malkomalko
Also check out <http://www.instajams.com>

My best friend and I built this in a few months and we're really proud of it.
It's still very early but we're adding new features all the time.

It doesn't have the graphic design and branding of jamwithchrome, but you can
start creating music really quickly.

Also, if you sign up for free, you can create and loop clips and jam with
yourself if you like.

Give it a try and let us know what you think.

Best

------
schnaars
This is very cool, but would love to see an easier way to strum the string
instruments. It is hard to get a good rhythm going while holding the button
down and fighting cursor drift.

------
Rayne
"There is something wrong with the plumbing. Check network connections."

Not sure where to go from here, since I certainly have a connection.

~~~
EwanG
You are probably blocking some ports it expects to communicate on. WiFi or
Ethernet?

------
chrisskillyou
<http://www.dinahmoe.com/?projects=jam-with-chrome>

[http://www.html5rocks.com/en/tutorials/casestudies/jamwithch...](http://www.html5rocks.com/en/tutorials/casestudies/jamwithchrome-
audio/)

------
vanhalt
Just finished my jam session... was awesome. Crashed my chrome but I think
that must be something about the memory in my mac. But amazing app... have a
lot of fun :)

~~~
anykey
Think of it like smashing your guitar or something else equally rock 'n roll
:)

------
owad
Crashes under Chrome 23.0.1271.64 (xubuntu 12.10). :/

~~~
sparky
23.0.1271.64 on 64-bit Kubuntu 12.04 works fine, fwiw.

------
jfoster
Would be interesting to know what it is about the page that is causing Chrome
v23 on Ubuntu to "Aw, Snap!" so reliably.

------
thechut
Not working for me on Version 23.0.1271.64 on Ubuntu. I get an Aw, Snap after
I select my instrument.

------
rogerallen
I'll try this after they fix Chrome to stop kernel-crashing my Macbook Pro
2012.

------
lucian1900
Crashes my chrome page. Lame.

~~~
negamax
Works fine for me and is pretty awesome. Upgrade Chrome or your computer

~~~
recursive
Crashes for me. Chrome Version 22.0.1229.94 m. There are no upgrades for
chrome. What should I upgrade on my computer?

~~~
jolan
Current stable version is 23.

------
jahansafd
Join me

<http://goo.gl/LqpBJ>

------
anigbrowl
Nice! All it needs is MIDI, which is already on the way in HTML5.

------
ikawe
crashed chrome for me =( Version 22.0.1229.94 (on Debian testing)

------
nealabq
What would a million people all jamming together sound like?

------
treerock
Blank screen for me.

------
asselinpaul
Productivity = lost

------
miki4you
the amount of work to get this working is incredble

------
hackerpolicy
If you use it, disable the vimium extension.

~~~
anykey
Disabling Vimium is a bit overkill, you can press "i" to go into insert mode
and it'll let you do as you please...if you use it more often, though, it's
best to blacklist it.

I didn't know about the insert mode thing for a long time, but when I figured
it out it was a "duh" moment :)

------
karl_nerd
scaringly fun, just lost 15 minutes here :)

------
enmand
Judy G

------
abozi
awesome....

