Orca is a visual programming playground.

The Orca environment is designed to create procedural MIDI/UDP sequencers on the fly, and to control other applications.


You can download builds for OSX, Windows and Linux here:

If you wish to build it yourself, follow these steps:

  • git clone https://github.com/hundredrabbits/Orca.git
  • cd Orca/desktop/
  • npm install
  • npm start
  • Tutorial

    Orca is not a synth, but a livecoding environment to write procedural sequencers. In other words, Orca is meant to control other applications such as a DAW (Ableton, Renoise, VCV Rack, etc.), or an audio server such as SuperCollider.

    Each letter of the alphabet is an operation, lowercase letters operate on bang(*), uppercase letters operate each frame. Bangs can be generated by various operations, such as E colliding with a 0, see the bang.orca example.

    See some projects created with ORCΛ.


    Ableton Live

    To control instruments in Ableton Live, launch Orca and open examples/midi.orca.

    The midi instrument should begin receiving midi notes as soon as the Orca window is back into focus.

    VCV Rack






    On Windows, use loopMidi to help routing midi signal across applications.


    This a guide to help you produce your first sounds with ORCΛ, tested on Ubuntu 18.04. If you don't have node installed yet, install it with:

  • sudo apt-get install nodejs
  • Install TiMidity++

    First you will need a software synthesizer. We choose TiMidity++ here. To install the synthesizer on Ubuntu we mainly followed the steps from this Ubuntu guide on software synthesis, which are reproduced here.

    If you don't have the universe repository activated yet run:

  • sudo add-apt-repository universe
  • sudo apt-get update
  • If install TiMidity++ and the freepats samples:

  • sudo apt-get install timidity freepats
  • You might need to activate the following kernel modules:

  • sudo modprobe snd-seq-device
  • sudo modprobe snd-seq-midi
  • sudo modprobe snd-seq-oss
  • sudo modprobe snd-seq-midi-event
  • sudo modprobe snd-seq
  • Make some noise!

    Run TiMidity++ as a ALSA sequencer client. Open a terminal where you run the command:

  • timidity -iA
  • ... and keep that terminal open! This should return an output similar to:

  • Requested buffer size 32768, fragment size 8192
  • ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
  • TiMidity starting in ALSA server mode
  • Opening sequencer port: 130:0 130:1 130:2 130:3
  • Requested buffer size 32768, fragment size 8192
  • ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
  • We can see, that the program opens some ports. In the next step will choose one of those to have ORCΛ send its MIDI output to.

    Run ORCΛ and set the MIDI device

    Open another terminal and navigate to the desktop subdirectory of your Orca folder and type

  • npm start
  • Next we need to choose our MIDI devices as described in the FAQ's by pressing ctrl+. in ORCΛ to open a browser console (you might need to choose the correct console tab at the top). Type terminal.io.listMidiDevices() in the console to obtain an output similar to (expand the output in your console if needed):

  • terminal.io.listMidiDevices()
  • (5) [MIDIOutput, MIDIOutput, MIDIOutput, MIDIOutput, MIDIOutput]
  • 0: MIDIOutput connection: "closed", id: "6FF5590044F4859ED50C5167BCFE9700A1798E39AA55A628E86D39011FAECD5D", manufacturer: "", name: "Midi Through Port-0", state: "connected", …
  • 1: MIDIOutput connection: "closed", id: "574FB441DEDADDE2DB06598767A3088744994E3AEA26BA638F8C51D004D8D333", manufacturer: "", name: "TiMidity port 0", state: "connected", …
  • 2: MIDIOutput connection: "closed", id: "8C1A6E287845194CE38B5B5181F731AE63D54D00681076DF9905B3658DF86248", manufacturer: "", name: "TiMidity port 1", state: "connected", …
  • 3: MIDIOutput connection: "closed", id: "A32276E0B2B7CB991939F210D7542BA7A43CE9E97E78C9F5B8D85BA2AC033C5F", manufacturer: "", name: "TiMidity port 2", state: "connected", …
  • 4: MIDIOutput connection: "closed", id: "CBE9CBC37EE04BD5C4039207BE53A9C0E36ED85542FEF3FCF6AF4D0901370F08", manufacturer: "", name: "TiMidity port 3", state: "connected", …
  • length: 5
  • __proto__: Array(0)
  • So we see that the TiMidity++ ports are devices 1 to 4. Set the MIDI Device e.g. to the first of those by typing this in the console:

  • terminal.io.setMidiDevice(1)
  • This should come with a confirmation similar to:

  • /home/bernd/projects/Orca/desktop/sources/scripts/io.js:62 Set device to #1 — TiMidity port 0
  • Now close the web console window.

    Open an example

    Hit ctrl+o in ORCΛ to get a dialog for opening a .orca file. There is the example directory in your Orca folder. Choose the _midi.orca file in that directory and you should hear four notes playing in a loop!


    Set Device Id

    To set the Midi device, open the console with ctrl+, and type the following to see the list of available devices:

  • terminal.io.listMidiDevices()
  • And then, type this to select the 2nd available device:

  • terminal.io.setMidiDevice(2)
  • **Note that this will be improved soon.



    Terminal Controls


    Grid Controls

    Special operators

    Midi Output

    The midi operator takes up to 5 inputs('channel, 'octave, 'note, velocity, length). For example, :25C, is a C note, on the 5th octave, through the 3rd MIDI channel, :04c, is a C# note, on the 4th octave, through the 1st MIDI channel. See it in action with midi.orca.


    Velocity is either from 0-9(10 steps), or A-Z(26 steps). For example, :34C8, is a C note, on the 4th octave, through the 4th MIDI channel with a velocity of 112/127(88%), :34CT, is a C note, on the 4th octave, through the 4th MIDI channel with a velocity of 96/127(75%)..

    Note Length*

    Note length is a value from 1-f, which is a ratio of a full bar, 1 being 1/1(a full bar), 2 being 1/2(half), 3 being 1/3(third).. and f being 1/16. For example, :27FZ4, is a F note, on the 7th octave, through the 3rd MIDI channel with a velocity of 100%, lasting for 1/4 of a bar.

    UDP Output

    The UDP operator ;, takes one haste input that is a string length and locks the eastwardly ports. It sends the message on bang to the port 49160. You can use the listener.js to test UDP messages. See it in action with udp.orca.

    Keyboard Input

    The keys operator ! will bang on a corresponding keyboard keypress when the cursor is in keyboard mode(toggle with /). For instance, !a, will output a bang when pressing the a key in keyboard mode. See it in action with the keys.orca.

    Base36 Table

    Orca operates on a base of 36 increments. Operators using numeric values will typically also operate on letters and convert them into values as per the following table. For instance pD will bang every 24th frame.


    You can change the look and colour of Orca. To do this, download themes from our itch.io page. You can view the colour palettes of each theme in the preview, once you find something you like, drag the file (.svg file) onto Orca. The colours will change instantly.

    These themes are part of the Ecosystem Theme, which means that you can apply a theme to any supported app (Left, Donsol, Pico and Marabu).

    You can also create your own themes.


    This application supports the Ecosystem Theme. See the License file for license rights and limitations (MIT). Pull Requests are welcome!