Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork239
Esoteric Programming Language
License
hundredrabbits/Orca
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Orca is anesoteric programming language designed to quickly create procedural sequencers, in which every letter of the alphabet is an operation, where lowercase letters operate on bang, uppercase letters operate each frame.
This applicationis not a synthesizer, but a livecoding environment capable of sending MIDI, OSC & UDP to your audio/visual interfaces, like Ableton, Renoise, VCV Rack or SuperCollider.
If you needhelp, visit thechatroom, themailing list, join theforum or watch atutorial.
- Download builds, available forLinux, Windows and OSX.
- Usein your browser, requireswebMidi.
- Usein a terminal, written in C.
- Useon small computers, written in assembly.
- Useon the Monome Norns, written in Lua.
If you wish to use Orca inside ofElectron, follow these steps:
git clone https://github.com/hundredrabbits/Orca.gitcd Orca/desktop/npm installnpm startTo display the list of operators inside of Orca, useCmdOrCtrl+G.
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(xylen): 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(ab): Outputs smallest of inputs.Mmultiply(a b): Outputs product of inputs.Nnorth: Moves Northward, or bangs.Oread(xy read): Reads operand with offset.Ppush(lenkey val): Writes eastward operand.Qquery(xylen): Reads operands with offset.Rrandom(min max): Outputs random value.Ssouth: Moves southward, or bangs.Ttrack(keylen val): Reads eastward operand.Uuclid(step max): Bangs on Euclidean rhythm.Vvariable(write read): Reads and writes variable.Wwest: Moves westward, or bangs.Xwrite(xy 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: SendsORCA command.
TheMIDI operator: takes up to 5 inputs('channel, 'octave, 'note, velocity, length).
For example,:25C, is aC note, on the 5th octave, through the 3rd MIDI channel,:04c, is aC# note, on the 4th octave, through the 1st MIDI channel. Velocity is an optional value from0(0/127) tog(127/127). Note length is the number of frames during which a note remains active. See it in action withmidi.orca.
TheMONO operator% takes up to 5 inputs('channel, 'octave, 'note, velocity, length).
This operator is very similar to the default Midi operator, buteach 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 synthesisers that might struggle to dealing with chords and note overlaps.
TheMIDI CC operator! takes 3 inputs('channel, 'knob, 'value).
It sends a valuebetween 0-127, where the value is calculated as a ratio of 36, over a maximum of 127. For example,!008, is sending28, or(8/36)*127 through the first channel, to the control mapped withid0. You can pressenter, with the! operator selected, to assign it to a controller. By default, the operator sends toCC64and up, the offset can be changed with thecommandcc:0, to set the offset to 0.
TheMIDI PB operator? takes 3 inputs('channel, 'lsb, 'msb).
It sends two different valuesbetween 0-127, where the value is calculated as a ratio of 36, over a maximum of 127. For example,?008, is sending an MSB of28, or(8/36)*127 and an LSB of 0 through the first midi channel.
This is a command (see below) rather than an operator and it combines theMIDI program change and bank select functions.
The syntax ispg: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 corresponds to a "patch" selection on a synth. Note thatmsb may also be identified as "bank" andlsb as "sub" in some applications (like Ableton Live).
msb andlsb 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)
TheUDP operator; locks each consecutive eastwardly ports. For example,;hello, will send the string "hello", on bang, to the port49160 onlocalhost. In commander, useudp:7777 to select thecustom UDP port 7777, andip:127.0.0.12 to change the target IP. UDP is not available in the browser version of Orca.
You can use thelistener.js to test UDP messages. See it in action withudp.orca.
TheOSC operator= locks each consecutive eastwardly ports. The first character is used for the path, the following characters are sent as integers using thebase36 Table. In commander, useosc:7777 to select thecustom OSC port 7777, andip:127.0.0.12 to change the target IP. OSC is not available in the browser version of Orca.
For example,=1abc will send10,11 and12 to/1, via the port49162 onlocalhost;=a123 will send1,2 and3, to the path/a. You can use thelistener.js to test OSC messages. See it in action withosc.orca or try it withSonicPi.
Some of Orca's features can becontrolled externally via UDP though port49160, or via its own command-line interface. To activate the command-line prompt, pressCmdOrCtrl+K. The prompt can also be used to inject patterns or change settings.
You canquickly 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. PressCmdOrCtrl+L to load multiple orca files, then pressCmdOrCtrl+B and type the name of a loaded.orca file to inject it.
| UDP Input | OSC Input | UDP Output | OSC Output |
|---|---|---|---|
| 49160 | None | 49161 | 49162 |
All commands have a shorthand equivalent to their first two characters, for example,write can also be called usingwr. You can see the full list of commandshere.
playPlays program.stopStops program.runRuns current frame.bpm:140Sets bpm speed to140.apm:160Animates bpm speed to160.frame:0Sets the frame value to0.skip:2Adds2, to the current frame value.rewind:2Removes2, to the current frame value.color:f00;0f0;00fColorizes the interface.find:aVSends cursor to stringaV.select:3;4;5;6Move cursor to position3,4, and select size5:6(optional).inject:pattern;12;34Inject the local filepattern.orca, at12,34(optional).write:H;12;34Writes glyphH, at12,34(optional).timePrints the time, in minutes seconds, since0f.midi:1;2Set Midi output device to#1, and input device to#2.udp:1234;5678Set UDP output port to1234, and input port to5678.osc:1234Set OSC output port to1234.
Orca operates on a base of36 increments. Operators using numeric values will typically also operate on letters and convert them into values as per the following table. For instanceDo will bang every24th frame.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| C | D | E | F | G | H | I | J | K | L | M | N |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| O | P | Q | R | S | T | U | V | W | X | Y | Z |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
The midi operator interprets any letter above the chromatic scale as a transpose value, for instance3H, is equivalent to4A.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
|---|---|---|---|---|---|---|---|---|---|---|---|
| _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | A0 | B0 |
| C | D | E | F | G | H | I | J | K | L | M | N |
| C0 | D0 | E0 | F0 | G0 | A0 | B0 | C1 | D1 | E1 | F1 | G1 |
| O | P | Q | R | S | T | U | V | W | X | Y | Z |
| A1 | B1 | C2 | D2 | E2 | F2 | G2 | A2 | B2 | C3 | D3 | E3 |
- Pilot, a companion synth tool.
- Aioi, a companion to send complex OSC messages.
- Estra, a companion sampler tool.
- Gull, a companion sampler, slicer and synth tool.
- Sonic Pi, a livecoding environment.
- Remora, a ESP32 Led controller firmware.
- Overview Video
- Orca Podcast
- Ableton & Unity3D
- Japanese Tutorial
- German Tutorial
- French Tutorial
- Examples & Templates
- This application supports theEcosystem Theme.
- Download and share your patches onPatchStorage.
- Support this project throughPatreon.
- See theLicense file for license rights and limitations (MIT).
- Pull Requests are welcome!
About
Esoteric Programming Language
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.


