Orca is an esoteric programming language, designed to create procedural sequencers in which each letter of the alphabet is an operation, where lowercase letters operate on bang, uppercase letters operate each frame.
The application is not a synthesiser, but a flexible livecoding environment capable of sending MIDI, OSC & UDP to your audio interface, like Ableton, Renoise, VCV Rack or SuperCollider.
The major distributions are the terminal version, the web version, the desktop version, and the norns version, each version implement their own variance of the IO operators.
To display the list of operators inside of Orca, use
Aadd(a b): Outputs sum of inputs.
Bsubtract(a b): Outputs difference of inputs.
Cclock(rate mod): Outputs modulo of frame.
Ddelay(rate mod): Bangs on modulo of frame.
Eeast: Moves eastward, or bangs.
Fif(a b): Bangs if inputs are equal.
Ggenerator(x y len): Writes operands with offset.
Hhalt: Halts southward operand.
Iincrement(step mod): Increments southward operand.
Jjumper(val): Outputs northward operand.
Kkonkat(len): Reads multiple variables.
Lless(a b): Outputs smallest of inputs.
Mmultiply(a b): Outputs product of inputs.
Nnorth: Moves Northward, or bangs.
Oread(x y read): Reads operand with offset.
Ppush(len key val): Writes eastward operand.
Qquery(x y len): Reads operands with offset.
Rrandom(min max): Outputs random value.
Ssouth: Moves southward, or bangs.
Ttrack(key len val): Reads eastward operand.
Uuclid(step max): Bangs on Euclidean rhythm.
Vvariable(write read): Reads and writes variable.
Wwest: Moves westward, or bangs.
Xwrite(x y val): Writes operand with offset.
Yjymper(val): Outputs westward operand.
Zlerp(rate target): Transitions operand to input.
*bang: Bangs neighboring operands.
#comment: Halts a line.
:midi(channel octave note velocity length): Sends a MIDI note.
%mono(channel octave note velocity length): Sends monophonic MIDI note.
!cc(channel knob value): Sends MIDI control change.
?pb(channel value): Sends MIDI pitch bench.
;udp: Sends UDP message.
=osc(path): Sends OSC message.
$self: Sends ORCA command.
The MIDI operator
: takes up to 5 inputs('channel, 'octave, 'note, velocity, length).
: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. Velocity is an optional value from
g(127/127). Note length is the number of frames during which a note remains active.
The MONO operator
% takes up to 5 inputs('channel, 'octave, 'note, velocity, length).
This operator is very similar to the default Midi operator, but each new note will stop the previously playing note, would its length overlap with the new one. Making certain that only a single note is ever played at once, this is ideal for monophonic analog synthetisers that might struggle to dealing with chords and note overlaps.
The MIDI CC operator
! takes 3 inputs('channel, 'knob, 'value).
It sends a value between 0-127, where the value is calculated as a ratio of 36, over a maximum of 127. For example,
!008, is sending 28, or
(8/36)*127 through the first channel, to the control mapped with
id0. You can press enter, with the
! operator selected, to assign it to a controller. By default, the operator sends to
CC64 and up, the offset can be changed with the command
cc:0, to set the offset to 0.
The MIDI PB operator
? takes 3 inputs('channel, 'lsb, 'msb).
It sends two different values between 0-127, where the value is calculated as a ratio of 36, over a maximum of 127. For example,
?008, is sending an MSB of 28, or
(8/36)*127 and an LSB of 0 through the first midi channel.
MIDI PROGRAM CHANGE
This is a command (see below) rather than an operator and it combines the MIDI program change and bank select functions.
The syntax is
pg:channel;msb;lsb;program. Channel is 0-15, msb/lsb/program are 0-127, but program will automatically be translated to 1-128 by the MIDI driver.
program typically correspondes to a "patch" selection on a synth. Note that
msb may also be identified as "bank" and
lsb as "sub" in some applications (like Ableton Live).
lsb can be left blank if you only want to send a simple program change. For example,
pg:0;;;63 will set the synth to patch number 64 (without changing the bank)
The UDP operator
; locks each consecutive eastwardly ports. For example,
;hello, will send the string "hello", on bang, to the port
localhost. In commander, use
udp:7777 to select the custom UDP port 7777, and
ip:127.0.0.12 to change the target IP. UDP is not available in the browser version of Orca.
The OSC operator
= locks each consecutive eastwardly ports. The first character is used for the path, the following characters are sent as integers using the base36 Table. In commander, use
osc:7777 to select the custom OSC port 7777, and
ip:127.0.0.12 to change the target IP. OSC is not available in the browser version of Orca.
=1abc will send
/1, via the port
=a123 will send
3, to the path
Some of Orca's features can be controlled externally via UDP though port
49160, or via its own command-line interface. To activate the command-line prompt, press
CmdOrCtrl+K. The prompt can also be used to inject patterns or change settings.
You can quickly inject orca files into the currently active file, by using the command-line prompt allowing you to navigate across multiple files like you would a project. Press
CmdOrCtrl+L to load multiple orca files, then press
CmdOrCtrl+B and type the name of a loaded
.orca file to inject it.
|UDP Input||OSC Input||UDP Output||OSC Output|
All commands have a shorthand equivalent to their first two characters, for example,
write can also be called using
wr. You can see the full list of commands here.
runRuns current frame.
bpm:140Sets bpm speed to
apm:160Animates bpm speed to
frame:0Sets the frame value to
2, to the current frame value.
2, to the current frame value.
color:f00;0f0;00fColorizes the interface.
find:aVSends cursor to string
select:3;4;5;6Move cursor to position
3,4, and select size
inject:pattern;12;34Inject the local file
timePrints the time, in minutes seconds, since
Meet Orbit, the mascot for Orca. Orbit is there to talk about updates relating to Orca.
The livecoding environment for the C implementation runs in a terminal. It's designed to be power efficient. It can handle large files, even if your terminal is small, it is the perfect candidate for your Raspberry Pi.
It is now possible to use Orca in your browser, without the need to install it as an application.
We decided to build a browser compatible version in response to Apple moving toward requiring all applications to be notarized, you can learn more about how this issue will impact small developers here. While we no longer support the OSX platform, our web version will allow Orca users still using Apple products to run Orca in their browser.Use Orca Live