Skip to content


Subversion checkout URL

You can clone with
Download ZIP
programmable music
Clojure Shell
Pull request Compare This branch is 121 commits behind overtone:protocols.
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

    ,dP"'         `"Yb
  ,d"                 .gPPRg,
 d"                  dP'   `Yb
d'                   8)     (8
8                    Yb     dP                        888
8                     "8ggg8"                         888
8                                                     888
Y,                       ,P 888  888  .d88b.  888d888 888888 .d88b.  88888b.   .d88b.
 Ya                     aP  888  888 d8P  Y8b 888P"   888   d88""88b 888 "88b d8P  Y8b
  "Ya                 aP"   Y88  88P 88888888 888     888   888  888 888  888 88888888
    "Yb,_         _,dP"      Y8bd8P  Y8b.     888     Y88b. Y88..88P 888  888 Y8b.
      `""YbbgggddP""'         Y88P    "Y8888  888      "Y888 "Y88P"  888  888  "Y8888

Programmable Music.

Live-coding & musical exploration

Overtone is an Open Source toolkit for creating synthesizers and making music. It provides:

  • A Clojure API to the SuperCollider synthesis engine
  • A growing library of musical functions (scales, chords, rhythms, arpeggiators, etc.)
  • Metronome and timing system to support live-coding and sequencing
  • Plug and play midi device I/O
  • Simple Open Sound Control (OSC) message handling
  • Pre-cache - a system for locally caching external assets such as .wav files
  • An API querying and fetching sounds from

Quick Setup


    # Install cake (or lein)

    $ cake new insane-noises

    # add the following dependencies to insane-noises/project.clj
    # [org.clojure/clojure "1.3.0"]
    # [overtone "0.6.0"]

    $ cd insane-noises
    $ cake deps

Server Option A: Internal

    # Linux users - start jackd
    # (see

    $ cake repl
    user=> (use '

Server Option B: External

    # Download and install SuperCollider:

    $ cake repl
    user=> (use 'overtone.core)
    user=> (boot-external-server)

Your First Sounds

|__/|___||.________,-.___( )___o-;___,-.___o-;__( )__,-.________o-; __,-.___o-;__.||
    |         |          |/                     |/         |
  (_|         |/                                           |/
    ; sin-osc creates a sine wave at the specified Hz (440 in this case)
    ; and pan2 makes the signal stereo
    ; demo simply plays the synth for the specified time in seconds:

    user=> (demo 5 (pan2 (sin-osc 440)))

    ; Defining a new synthesizer instrument with the definst macro will return a
    ; function which can be used to trigger the inst.

    user=> (definst beep [freq 440] (sin-osc freq))
    user=> (beep)
    user=> (stop) ; (this command will kill all running synths)

    ; Call the ctl function to modulate any params and to eventually kill that instrument:

    user=> (beep)
    user=> (ctl beep :freq 880)
    user=> (kill beep) ; (this will just kill the specific instrument)


Detailed Setup Instructions

For a more detailed set of setup instructions (including details specific to Windows and Linux) head over to the Overtone wiki installation page

Getting Started

We will try to maintain documentation for all aspects of the system in the project wiki, you'll find tutorials and examples on topics such as synthesizing new sounds from scratch, live-coding and generating musical scores on the fly. If you see anything missing, please feel free to add it yourself, or hit us up on the mailing list and we'll sort somethign out.

External & Internal Servers

Overtone supports both internal and external instances of scsynth - the SuperCollider server. The internal server is good for quick setup (there are no external dependencies to install and allows fast access to server buffers for transferring sound data and using the scopes). The external server requires a separate installation of SuperCollider itself but is more robust in that crashes in the server (through malformed synth designs etc.) don't also crash the JVM (which is the case for the internal server). It is also possible to connect multiple separate clients to an already running external scsynth instance.

Note - the internal server is not currently supported for all architecture/operating system combinations. However, the external server should work everywhere.

Getting Started Videos

                      hs.   -sh/
                      :`     `yh.
                           :hhhh+ .ho
                          +yhhhs/  sh+
                         `yhhhy`   .hs
                         ohhhh-     +h:
                        /hhhh+      -hy.   oso
                       +hhhhs        ohy  shhhy
                      .yhhhy`        `yhs  +yhs
                     `shhhh-          -hhhhhhh/
                     ohhhho            /yhhhhs

Head over to Vimeo for a fast-paced 4 minute introduction to live-coding with Overtone to see what's possible

For a nice overview of the basics of creating and playing with synthesized instruments in Overtone checkout Philip Potter's 20 minute workshop:

There are also the following tutorials:

Cheat Sheet

For a quick glance at all the exciting functionality Overtone puts at your musical fingertips check out the cheat sheet:

Project Info


Mailing List

We encourage you to join the mailing list to see what other people are getting up to with Overtone. Use it to ask questions, show off what you've made and even meet fellow Overtoners in your area so you can meet up for impromptu jam sessions. All we ask is that you be considerate, courteous and respectful and that you share as much of your code as possible so we can all learn how to make crazy cool sounds together.

Source Repository

Downloads and the source repository can be found on GitHub:

Clone the repository on GitHub to get started developing, and if you are ready to submit a patch then fork your own copy and do a pull request.

Cake & Lein Support

Overtone and its dependencies are on, and the dependency for your project.clj is:

[overtone "0.6.0"]


To help us tune the JVM for realtime performance, we use YourKit.

YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products:

YourKit Java Profiler and YourKit .NET Profiler


  • Jeff Rose
  • Sam Aaron
  • Fabian Aussems
  • Christophe McKeon
  • Pepijn de Vos
  • Marius Kempe
  • Nicolas Buduroi
  • Iain Wood
  • Marmaduke Woodman
  • Thomas Karolski
  • Nick Orton
  • Kevin Neaton
  • Chris Ford
  • Philip Potter
  • Matthew Gilliard
  • Dave Ray
  • Harold Hausman
  • Jennifer Smith
  • Jacob Lee
  • Jon Rose
Something went wrong with that request. Please try again.