What Is Sonic Pi?

Sonic Pi is a collection of small applications exploring the subject of programmable musical instruments designed for children who aren't necessarily reading or writing yet.

Software Downloads

   FreeSketch | GridSketch | HaveYouBeenTested
Further Explanations and Background:

Music Literacy and the Preschool Hacker: A Context for Design Considerations    html
About the Noise-makers:

These programs are intended to be simple standalone musical instruments-- noise-makers in the spirit of rattles, wooden blocks, Montessori bells, slide whistle, etc.... Most of them rely heavily on drawing to drive the user interface. They're in varying stages of completion, but all should fire up without too many bugs. I'll post the source code after it's a little less of a mess! (Contact me if you really want it.)

The FreeSketch and GridSketch programs are meant to be used with a simplified quilted keyboard-- essentially a patchwork cloth cover for a regular keyboard that uses keyboard bindings controlled at the application level. A few squares of velcro keep the quilt in place.

the quilt
keyboard the quilt

Currently, the source is hardcoded so that the quilt matches the laptop keyboard on which they're being developed. Making this configurable for other keyboards is a little feature for the future.

Each "noisemaker" is an executable jar file which should launch with a double click on windows or from the command line (assuming you're in the directory with the jar file and have the path set to java correctly). For instance:

java -jar HaveYouBeenTested.jar

Using these instruments in a realtime performance almost works. Sooner or later jitter, lags and context switches spoil the show. It does help, however, to shutdown unnecessary processes (programs). On my gnome running laptop this includes metacity and the like. Then I run the programs such as GridSketch with "nice -20 java -jar GridSketch.jar".

Here's the run down:

This is an "axis free" drawing program. It follows changes in the x or y directions to initiate a beat, so try squiggles, spirals, geometric shapes, etc.... Overlapping shapes will be played in the same measure. Lines can be dragged and deleted. One may continue to edit the drawing while the composition plays in loop mode. Recent edits will be incorporated on the next loop. This makes it almost usable in a performance context... well, except for some annoying performance issues. I'm sorry the colors are not "colorblind safe." I'll try to come up with something better (or configurable) in the future.

ESCAPE -> exits
1, 4, 7, 9 -> change timbral ensembles
A, S -> clear the drawing (and composition)
H, J -> delete a highlighted scribble
K, L -> play in looped mode
ENTER -> play measures one time and then stop

This uses the traditional pitch vs time axis of musical notation. The program can be set to use a variety of scales, but I've hardcoded this version with three octaves of C pentatonic, so pretty much any combination of notes should sound okay. Adding more scales, such as a major scale and its diatonic modes, is a "to do." Scribbles may be drawn, moved and deleted. The underlying grid can be modified by clicking the mouse to change the duration of a note's sustain.

ESCAPE -> exits
A, S -> clear the drawing (and composition)
H, J -> delete a highlighted scribble
K, L -> play in looped mode
ENTER -> play measures one time and then stop

This is like a memory game played with cards or tiles. In this variation, instead of matching pictures, match rhythm/timbre combinations. There are 108 tiles and 54 rhythmic pairs. The tunes are generated by "randomly" descending through a decision tree... so ultimately there's a finite number of them but that number is quite large. They'll be removed from the board as you find matches. It's assumed there are players taking turns with two moves each. No score is kept; however, you can playback all the moves as a sort of song (it's a bit jittery as the MIDI sequences switch... a bug to fix). This game is actually pretty damn hard... I'll likely make it a little easier (or configurable).

ESCAPE -> exits
P -> playback all the moves thus far
H -> playback last five (or as many as available) moves

Sorry, you'll have to quit and restart to clear (yeah, yeah... lots of stuff for me to add!)

This is the least complete and most buggy. The switches between threads are terrible and I need to make some big code changes to try to smooth it out. I'll be adding envelopes, linear interpolation and per oscillator gain controls as well as a way to use each synth object to make notes to play. But check it out anyway.

ESCAPE -> exits
Q, W, E, R, T, Y, U, I -> add a new synth object (can be dragged around)
A -> add a synth object
S -> subtract a synth object
M -> increase frequency of any given oscillator
L -> decrease frequency of any given oscillator

Mouse click on the synth or the oscillator you want to effect. There's an annoying bug that when a synth uses all 4 oscillators, the underlying synth object looses loses mouse focus to the oscillators (just a lot of code to add to work around).