Skip to content
Branch: master
Find file History
cclauss and adarob Use print() function in both Python 2 and Python 3 (#52)
* print() is a function in Python 3

* from six.moves.urllib.request import URLopener

Also added the `__future__` imports and tested on both Python and on legacy Python.
Latest commit 51c7728 Jan 4, 2019

A.I. Jam

An interactive A.I. jam session.


This interface uses the frontend from the A.I. Duet experiment, combined with the Magenta MIDI interface to recreate the experience of the award-winning Magenta 2016 NIPS Demo in your browser.


Original interface built by Yotam Mann with friends on the Magenta and Creative Lab teams at Google using TensorFlow, Tone.js and open-source tools from the Magenta project.


Pre-built Version

Install Flask and Magenta (v0.1.15 or greater).

From the the ai-jam-js directory launch the interface from the command line:


When the script is run, the following pre-trained models will be automatically downloaded to the ai-jam-js directory:


If you'd like to make modifications to this code, first make sure you have Node.js 6 or above installed. You can then install of the dependencies of the project and build the code by typing the following in the terminal:

cd static
npm install

Adding a -w flag to the final command will cause webpack to continuously re-compile the JavaScript code as you make changes.


The A.I. Jam supports MIDI keyboard input using Web Midi API and the WebMIDI library.

MIDI input is routed from the browser to MIDI ports "magenta_piano_in" and "magenta_drums_in", on which two instances of the magenta_midi binary are listening; one for piano and the other for drums. Both of these instances output responses to the "magenta_out" port, which the browser is listening to for playback.

The two magenta_midi instances are kept in sync by a running midi_clock binary that outputs a metronome using MIDI control change messages on the "magenta_clock" port. You can listen to the metronome by pressing the Z key while the browser is in focus.

If you'd like to use your own device or software for synthesis, you can simply mute the browser tab and route these MIDI ports appropriately to your device.


The piano can also be controlled from your computer keyboard thanks to Audiokeys. The center row of the keyboard is the white keys.


You can change various settings for the models and interactions using the buttons at the top left of the screen. Additionally, you may use the keyboard shortcuts below.

Key Action
Z Toggles the metronome.
Q Toggles between piano and drums.
LEFT/RIGHT Cycles through available models.
UP/DOWN Adjusts sampling 'temperature'. Higher temperatures sound more random.
SPACE Toggles looping of AI sequence.
M Mutates AI sequence.
0-9 Sets AI response duration (in bars). 0 matches your input.
SHIFT + 0-9 Sets input sequence duration (in bars). 0 matches your input.
DELETE Stops current AI playback.
X Toggles "solo mode", which stops AI from listening to inputs.


Audio synthesized from FluidR3_GM.sf2 (Creative Commons Attribution 3.0).

You can’t perform that action at this time.