Orca is a livecoding playground.
Orca is a two-dimensional esoteric programming language in which every letter of the alphabet is an operator, where lowercase letters operate on bang, uppercase letters operate each frame. This livecoding language is designed to procedurally generate MIDI, UDP or OSC messages.
You can find a portable and lightweight version of Orca here, and a version for the norns here. Learn more by reading the manual, or have a look at a tutorial video. If you need help, visit the chatroom or the forum.
Orca is a wildly unique visual programming tool. It's also an inky black and seafoam green alphabet soup, pulsating to some species of broody electronic industrial throb.
—Ivan Reese, The Future Of Coding
I recommend that you keep a copy of the list of operators handy, 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.
Orca operates on a base of 36 increments, operators will convert alphanumeric values into values ranging from 0 to 36. Special characters are used to handle platform and client specific interactions.
This section will teach the basics of playing a note and a sequence of notes.
Send a midi note
D8, will send a bang, every 8th frame.
:03C, will send the
Cnote, on the 3rd octave, to send
C#, use the lowercase
Play a random note
aRG, will output a random value between
G, the rightside uppercase letter indicates an uppercase output.
Make a melody
04TCAFE, will create a track of 4 notes, and output its first value.
Play the melody
8C4, will count from
3, at 1/8th speed.
.8C4..... D804TCAFE .:03C....
This section will teach the basics of automating logic decisions and changing the values of operators dynamically.
Play every second note
2I6, will increment to
6at a rate of
.2I6....... D846TCAFEDG .:03D......
Play a note with an offset
1AC, will add
C, to output
D. To get
D#, use the lowercase
Play a sequence back and forth
2B8, will count from
7, and back down to
0, at half speed.
5AC, will increment the value so the sequence starts at the note
..2B8.. D2.5AC. .:03H..
Play a note at a specific interval
.I4, will increment to
4, at a rate of
.F2, will bang only if leftside input is equal to
I4..... 3F2.1AC ..:03D.
This section will teach the basics of creating new operators procedurally.
Halt a moving operator
E, will travel further eastward, every frame.
H, will stop a
Read an operator at position
22O, will get the operator
Eat the offset
22O... ..E..H .....E
Write an operator at position
22X, will output the operator
Eat the offset
22XE. ..... ..... ....E
Animate a projector
B8, will bounce between
B4.......... 1XE......... ........:03C ........:03D ........:03E ........:03F
This section will teach the basics of storing accessing and combining that stored data.
Write a variable
aV5, will store
5in the variable
Read a variable
Va, will output the value of the variable
a. Notice how variables always have to be written above where they are read.
.....Va ....... aV5..Va .....5. ....... aV6..Va .....6.
Read 3 variables
3Kion, will output the values of
iV0.oV3.nVC ........... 3Kion...... .:03C......
Carry a value horizontally and vertically
Y, will output the west input, eastward.
J, will output the north input, southward.
3.. J.. 3Y3
Carry a bang
- This method will allow you to bring bangs into tight spots.
I hope this workshop has been enlightening, if you have questions or suggestions, please visit the forum, or the chatroom. Enjoy!
Here are a few interesting snippets to achieve various arithmetic operations.
Will output the modulo of
Will output uppercase C.
Will output lowercase C.
Will bang if L free input is not null.
Found a mistake? Submit an edit to orca.
Last update on 20C12, edited 14 times. +85/103fh
- 20C12 — Orca Workshop Mila, Montreal
- 19V04 — Orca Workshop Foolab, Montreal
- 19J13 — Orca Workshop Algomech, Sheffi
- 18W14 — Orca Release