{"id":15028632,"url":"https://github.com/hundredrabbits/orca","last_synced_at":"2025-04-25T14:49:40.492Z","repository":{"id":37318752,"uuid":"121553439","full_name":"hundredrabbits/Orca","owner":"hundredrabbits","description":"Esoteric Programming Language","archived":false,"fork":false,"pushed_at":"2025-04-15T17:03:59.000Z","size":2525,"stargazers_count":4701,"open_issues_count":38,"forks_count":232,"subscribers_count":105,"default_branch":"main","last_synced_at":"2025-04-24T08:56:14.017Z","etag":null,"topics":["esoteric-language","livecoding","midi","osc","programming-language","udp"],"latest_commit_sha":null,"homepage":"https://100r.co/site/orca.html","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hundredrabbits.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"patreon":"hundredrabbits","liberapay":"hundredrabbits"}},"created_at":"2018-02-14T19:42:19.000Z","updated_at":"2025-04-23T13:35:17.000Z","dependencies_parsed_at":"2023-01-21T10:17:37.015Z","dependency_job_id":"fef549ab-4a44-4251-9f3f-5beefba986ee","html_url":"https://github.com/hundredrabbits/Orca","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hundredrabbits","download_url":"https://codeload.github.com/hundredrabbits/Orca/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250838661,"owners_count":21495794,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esoteric-language","livecoding","midi","osc","programming-language","udp"],"created_at":"2024-09-24T20:08:47.048Z","updated_at":"2025-04-25T14:49:40.468Z","avatar_url":"https://github.com/hundredrabbits.png","language":"JavaScript","funding_links":["https://patreon.com/hundredrabbits","https://liberapay.com/hundredrabbits","https://www.patreon.com/hundredrabbits"],"categories":[],"sub_categories":[],"readme":"# ORCΛ\n\n\u003cimg src=\"https://raw.githubusercontent.com/hundredrabbits/100r.co/master/media/content/characters/orca.hello.png\" width=\"300\"/\u003e\n\nOrca is an [esoteric programming language](https://en.wikipedia.org/wiki/Esoteric_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.\n\nThis application **is not a synthesizer, but a livecoding environment** capable of sending MIDI, OSC \u0026 UDP to your audio/visual interfaces, like Ableton, Renoise, VCV Rack or SuperCollider.\n\nIf you need **help**, visit the [chatroom](https://discord.gg/F7W98pXKd7), the [mailing list](https://lists.sr.ht/~rabbits/orca), join the [forum](https://llllllll.co/t/orca-live-coding-tool/17689) or watch a [tutorial](https://www.youtube.com/watch?v=ktcWOLeWP-g).\n\n- [Download builds](https://hundredrabbits.itch.io/orca), available for **Linux, Windows and OSX**.\n- Use [in your browser](https://hundredrabbits.github.io/Orca/), requires **webMidi**.\n- Use [in a terminal](https://git.sr.ht/~rabbits/orca), written in C.\n- Use [on small computers](https://git.sr.ht/~rabbits/orca-toy), written in assembly.\n- Use [on the Monome Norns](https://llllllll.co/t/orca/22492), written in Lua.\n\n## Install \u0026 Run\n\nIf you wish to use Orca inside of [Electron](https://electronjs.org/), follow these steps:\n\n```\ngit clone https://github.com/hundredrabbits/Orca.git\ncd Orca/desktop/\nnpm install\nnpm start\n```\n\n\u003cimg src='https://raw.githubusercontent.com/hundredrabbits/Orca/master/resources/preview.jpg' width=\"600\"/\u003e\n\n## Operators\n\nTo display the list of operators inside of Orca, use `CmdOrCtrl+G`.\n\n- `A` **add**(*a* b): Outputs sum of inputs.\n- `B` **subtract**(*a* b): Outputs difference of inputs.\n- `C` **clock**(*rate* mod): Outputs modulo of frame.\n- `D` **delay**(*rate* mod): Bangs on modulo of frame.\n- `E` **east**: Moves eastward, or bangs.\n- `F` **if**(*a* b): Bangs if inputs are equal.\n- `G` **generator**(*x* *y* *len*): Writes operands with offset.\n- `H` **halt**: Halts southward operand.\n- `I` **increment**(*step* mod): Increments southward operand.\n- `J` **jumper**(*val*): Outputs northward operand.\n- `K` **konkat**(*len*): Reads multiple variables.\n- `L` **less**(*a* *b*): Outputs smallest of inputs.\n- `M` **multiply**(*a* b): Outputs product of inputs.\n- `N` **north**: Moves Northward, or bangs.\n- `O` **read**(*x* *y* read): Reads operand with offset.\n- `P` **push**(*len* *key* val): Writes eastward operand.\n- `Q` **query**(*x* *y* *len*): Reads operands with offset.\n- `R` **random**(*min* max): Outputs random value.\n- `S` **south**: Moves southward, or bangs.\n- `T` **track**(*key* *len* val): Reads eastward operand.\n- `U` **uclid**(*step* max): Bangs on Euclidean rhythm.\n- `V` **variable**(*write* read): Reads and writes variable.\n- `W` **west**: Moves westward, or bangs.\n- `X` **write**(*x* *y* val): Writes operand with offset.\n- `Y` **jymper**(*val*): Outputs westward operand.\n- `Z` **lerp**(*rate* target): Transitions operand to input.\n- `*` **bang**: Bangs neighboring operands.\n- `#` **comment**: Halts a line.\n\n### IO\n\n- `:` **midi**(channel octave note velocity length): Sends a MIDI note.\n- `%` **mono**(channel octave note velocity length): Sends monophonic MIDI note.\n- `!` **cc**(channel knob value): Sends MIDI control change.\n- `?` **pb**(channel value): Sends MIDI pitch bench.\n- `;` **udp**: Sends UDP message.\n- `=` **osc**(*path*): Sends OSC message.\n- `$` **self**: Sends [ORCA command](#Commands).\n\n## MIDI\n\nThe [MIDI](https://en.wikipedia.org/wiki/MIDI) operator `:` takes up to 5 inputs('channel, 'octave, 'note, velocity, length). \n\nFor 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**. Velocity is an optional value from `0`(0/127) to `g`(127/127). Note length is the number of frames during which a note remains active. See it in action with [midi.orca](https://git.sr.ht/~rabbits/orca-examples/tree/master/basics/_midi.orca).\n\n## MIDI MONO\n\nThe [MONO](https://en.wikipedia.org/wiki/Monophony) operator `%` takes up to 5 inputs('channel, 'octave, 'note, velocity, length). \n\nThis 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 synthesisers that might struggle to dealing with chords and note overlaps.\n\n## MIDI CC\n\nThe [MIDI CC](https://www.sweetwater.com/insync/continuous-controller/) operator `!` takes 3 inputs('channel, 'knob, 'value).\n\nIt 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](https://nickfever.com/Music/midi-cc-list), the offset can be changed with the [command](#commands) `cc:0`, to set the offset to 0.\n\n## MIDI PITCHBEND\n\nThe [MIDI PB](https://www.sweetwater.com/insync/pitch-bend/) operator `?` takes 3 inputs('channel, 'lsb, 'msb).\n\nIt 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.\n\n## MIDI BANK SELECT / PROGRAM CHANGE\n\nThis is a command (see below) rather than an operator and it combines the [MIDI program change and bank select functions](https://www.sweetwater.com/sweetcare/articles/6-what-msb-lsb-refer-for-changing-banks-andprograms/). \n\nThe 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 corresponds 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). \n\n`msb` and `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)\n\n## UDP\n\nThe [UDP](https://nodejs.org/api/dgram.html#dgram_socket_send_msg_offset_length_port_address_callback) operator `;` locks each consecutive eastwardly ports. For example, `;hello`, will send the string \"hello\", on bang, to the port `49160` on `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.\n\nYou can use the [listener.js](https://github.com/hundredrabbits/Orca/blob/master/resources/listener.js) to test UDP messages. See it in action with [udp.orca](https://git.sr.ht/~rabbits/orca-examples/tree/master/basics/_udp.orca).\n\n## OSC\n\nThe [OSC](https://github.com/MylesBorins/node-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](https://github.com/hundredrabbits/Orca#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.\n\nFor example, `=1abc` will send `10`, `11` and `12` to `/1`, via the port `49162` on `localhost`; `=a123` will send `1`, `2` and `3`, to the path `/a`. You can use the [listener.js](https://github.com/hundredrabbits/Orca/blob/master/resources/listener.js) to test OSC messages. See it in action with [osc.orca](https://git.sr.ht/~rabbits/orca-examples/tree/master/basics/_osc.orca) or try it with [SonicPi](https://github.com/hundredrabbits/Orca/blob/master/resources/TUTORIAL.md#sonicpi).\n\n\u003cimg src='https://raw.githubusercontent.com/hundredrabbits/Orca/master/resources/preview.hardware.jpg' width=\"600\"/\u003e\n\n## Advanced Controls\n\nSome 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.\n\n### Project Mode\n\nYou 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.\n\n### Default Ports\n\n| UDP Input  | OSC Input  | UDP Output | OSC Output |\n| ---------- | ---------- | ---------- | -----------|\n| 49160      | None       | 49161      | 49162\n\n### Commands\n\nAll 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](https://github.com/hundredrabbits/Orca/blob/master/desktop/sources/scripts/commander.js).\n\n- `play` Plays program.\n- `stop` Stops program.\n- `run` Runs current frame.\n- `bpm:140` Sets bpm speed to `140`.\n- `apm:160` Animates bpm speed to `160`.\n- `frame:0` Sets the frame value to `0`.\n- `skip:2` Adds `2`, to the current frame value.\n- `rewind:2` Removes `2`, to the current frame value.\n- `color:f00;0f0;00f` Colorizes the interface.\n- `find:aV` Sends cursor to string `aV`.\n- `select:3;4;5;6` Move cursor to position `3,4`, and select size `5:6`(optional).\n- `inject:pattern;12;34` Inject the local file `pattern.orca`, at `12,34`(optional).\n- `write:H;12;34` Writes glyph `H`, at `12,34`(optional).\n- `time` Prints the time, in minutes seconds, since `0f`.\n- `midi:1;2` Set Midi output device to `#1`, and input device to `#2`.\n- `udp:1234;5678` Set UDP output port to `1234`, and input port to `5678`.\n- `osc:1234` Set OSC output port to `1234`.\n\n## Base36 Table\n\nOrca 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 `Do` will bang every *24th frame*. \n\n| **0** | **1** | **2** | **3** | **4** | **5** | **6** | **7** | **8** | **9** | **A** | **B**  | \n| :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:    | \n| 0     | 1     | 2     | 3     | 4     | 5     | 6     | 7     | 8     | 9     | 10    | 11     |\n| **C** | **D** | **E** | **F** | **G** | **H** | **I** | **J** | **K** | **L** | **M** | **N**  |\n| 12    | 13    | 14    | 15    | 16    | 17    | 18    | 19    | 20    | 21    | 22    | 23     |\n| **O** | **P** | **Q** | **R** | **S** | **T** | **U** | **V** | **W** | **X** | **Y** | **Z**  | \n| 24    | 25    | 26    | 27    | 28    | 29    | 30    | 31    | 32    | 33    | 34    | 35     |\n\n## Transpose Table\n\nThe midi operator interprets any letter above the chromatic scale as a transpose value, for instance `3H`, is equivalent to `4A`.\n\n| **0** | **1** | **2** | **3** | **4** | **5** | **6** | **7** | **8** | **9** | **A** | **B**  | \n| :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:   | :-:    | \n| _     | _     | _     | _     | _     | _     | _     | _     | _     | _     | A0    | B0     |\n| **C** | **D** | **E** | **F** | **G** | **H** | **I** | **J** | **K** | **L** | **M** | **N**  |\n| C0    | D0    | E0    | F0    | G0    | A0    | B0    | C1    | D1    | E1    | F1    | G1     | \n| **O** | **P** | **Q** | **R** | **S** | **T** | **U** | **V** | **W** | **X** | **Y** | **Z**  | \n| A1    | B1    | C2    | D2    | E2    | F2    | G2    | A2    | B2    | C3    | D3    | E3     | \n\n## Companion Applications\n\n- [Pilot](https://github.com/hundredrabbits/pilot), a companion synth tool.\n- [Aioi](https://github.com/MAKIO135/aioi), a companion to send complex OSC messages.\n- [Estra](https://github.com/kyleaedwards/estra), a companion sampler tool.\n- [Gull](https://github.com/qleonetti/gull), a companion sampler, slicer and synth tool.\n- [Sonic Pi](https://in-thread.sonic-pi.net/t/using-orca-to-control-sonic-pi-with-osc/2381/), a livecoding environment.\n- [Remora](https://github.com/martinberlin/Remora), a ESP32 Led controller firmware.\n\n## Links\n\n- [Overview Video](https://www.youtube.com/watch?v=RaI_TuISSJE)\n- [Orca Podcast](https://futureofcoding.org/episodes/045)\n- [Ableton \u0026 Unity3D](https://www.elizasj.com/unity_live_orca/)\n- [Japanese Tutorial](https://qiita.com/rucochanman/items/98a4ea988ae99e04b333)\n- [German Tutorial](http://tropone.de/2019/03/13/orca-ein-sequenzer-der-kryptischer-nicht-aussehen-kann-und-ein-versuch-einer-anleitung/)\n- [French Tutorial](http://makingsound.fr/blog/orca-sequenceur-modulaire/)\n- [Examples \u0026 Templates](https://git.sr.ht/~rabbits/orca-examples)\n\n## Extras\n\n- This application supports the [Ecosystem Theme](https://github.com/hundredrabbits/Themes).\n- Download and share your patches on [PatchStorage](http://patchstorage.com/platform/orca/).\n- Support this project through [Patreon](https://www.patreon.com/hundredrabbits).\n- See the [License](LICENSE.md) file for license rights and limitations (MIT).\n- Pull Requests are welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhundredrabbits%2Forca","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhundredrabbits%2Forca","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhundredrabbits%2Forca/lists"}