{"id":28471667,"url":"https://github.com/hundredrabbits/orca-c","last_synced_at":"2025-07-01T22:30:49.195Z","repository":{"id":33639985,"uuid":"158889536","full_name":"hundredrabbits/Orca-c","owner":"hundredrabbits","description":"Live Programming Environment(C Port)","archived":false,"fork":false,"pushed_at":"2025-04-16T03:54:11.000Z","size":938,"stargazers_count":495,"open_issues_count":19,"forks_count":48,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-06-07T11:08:19.343Z","etag":null,"topics":["livecoding","midi","osc","udp"],"latest_commit_sha":null,"homepage":"http://wiki.xxiivv.com/orca","language":"C","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":null,"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}},"created_at":"2018-11-24T00:33:53.000Z","updated_at":"2025-05-22T05:55:43.000Z","dependencies_parsed_at":"2025-04-16T09:33:04.943Z","dependency_job_id":null,"html_url":"https://github.com/hundredrabbits/Orca-c","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hundredrabbits/Orca-c","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca-c","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca-c/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca-c/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca-c/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hundredrabbits","download_url":"https://codeload.github.com/hundredrabbits/Orca-c/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hundredrabbits%2FOrca-c/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263046053,"owners_count":23405125,"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":["livecoding","midi","osc","udp"],"created_at":"2025-06-07T11:08:24.119Z","updated_at":"2025-07-01T22:30:49.182Z","avatar_url":"https://github.com/hundredrabbits.png","language":"C","funding_links":["https://patreon.com/hundredrabbits"],"categories":[],"sub_categories":[],"readme":"# ORCΛ\n\nOrca is an [esoteric programming language](https://en.wikipedia.org/wiki/Esoteric_programming_language) and live editor designed to quickly create procedural sequencers. Every letter of the alphabet is an operation, lowercase letters execute on `*bang*`, and uppercase letters execute each frame.\n\nThis is the C implementation of the [ORCΛ](https://wiki.xxiivv.com/site/orca.html) language and terminal livecoding environment. It's designed to be power efficient. It can handle large files, even if your terminal is small.\n\nOrca is not a synthesizer, but a flexible livecoding environment capable of sending MIDI, OSC, and UDP to your audio/visual interfaces like Ableton, Renoise, VCV Rack, or SuperCollider.\n\n\u003cimg src='https://raw.githubusercontent.com/wiki/hundredrabbits/Orca-c/PREVIEW.jpg' width='600'/\u003e\n\n| Main git repo | GitHub mirror |\n| ------------- | ------------- |\n| [git.sr.ht/~rabbits/orca](https://git.sr.ht/~rabbits/orca) | [github.com/hundredrabbits/Orca-c](https://github.com/hundredrabbits/Orca-c) |\n\n## Quick Start for Debian/Raspbian (Raspberry Pi)\n\n```sh\nsudo apt-get install git libncurses5-dev libncursesw5-dev libportmidi-dev\ngit clone https://github.com/hundredrabbits/Orca-c.git\ncd Orca-c\nmake          # Compile orca\nbuild/orca    # Run orca\n```\n\nTo choose your MIDI output device, press `F1` (or `Ctrl+D`) to open the main menu, and then select `MIDI Output...`\n\n```\n┌ ORCA ───────────────┐┌ PortMidi Device Selection ─────┐\n│   New               ││ \u003e (*) #0 - Midi Through Port-0 │\n│   Open...           ││   ( ) #2 - ES1371              │\n│   Save              │└────────────────────────────────┘\n│   Save As...        │\n│                     │\n│   Set BPM...        │\n│   Set Grid Size...  │\n│   Auto-fit Grid     │\n│                     │\n│   OSC Output...     │\n│ \u003e MIDI Output...    │\n│                     │\n│   Clock \u0026 Timing... │\n│.....................│\n```\n\n## Prerequisites\n\nCore library: A C99 compiler (no VLAs required), plus enough libc for `malloc`, `realloc`, `free`, `memcpy`, `memset`, and `memmove`. (Also, `#pragma once` must be supported.)\n\nCommand-line interpreter: The above, plus POSIX, and enough libc for the common string operations (`strlen`, `strcmp`, etc.)\n\nLivecoding terminal UI: The above, plus ncurses (or compatible curses library), and floating point support (for timing.) Optionally, PortMidi can be used to enable direct MIDI output.\n\n## Build\n\nThe build script, called simply `tool`, is written in POSIX `sh`. It should work with `gcc` (including the `musl-gcc` wrapper), `tcc`, and `clang`, and will automatically detect your compiler. You can manually specify a compiler with the `-c` option.\n\nCurrently known to build on macOS (`gcc`, `clang`, `tcc`) and Linux (`gcc`, `musl-gcc`, `tcc`, and `clang`, optionally with `LLD`), and Windows via cygwin or WSL (`gcc` or `clang`, `tcc` untested).\n\nThere is a fire-and-forget `make` wrapper around the build script.\n\nPortMidi is an optional dependency. It can be enabled by adding the option `--portmidi` when running the `tool` build script.\n\nMouse awareness can be disabled by adding the `--no-mouse` option.\n\n### Build using the `tool` build script\n\nRun `./tool help` to see usage info. Examples:\n\n```sh\n./tool build -c clang-7 --portmidi orca\n    # Build the livecoding environment with a compiler\n    # named clang-7, with optimizations enabled, and\n    # with PortMidi enabled for MIDI output.\n    # Binary placed at build/orca\n\n./tool build -d orca\n    # Debug build of the livecoding environment.\n    # Binary placed at build/debug/orca\n\n./tool build -d cli\n    # Debug build of the headless CLI interpreter.\n    # Binary placed at build/debug/cli\n\n./tool clean\n    # Same as make clean. Removes build/\n```\n\n### Build using the `make` wrapper\n\n```sh\nmake release    # optimized build, binary placed at build/orca\nmake debug      # debugging build, binary placed at build/debug/orca\nmake clean      # removes build/\n```\n\nThe `make` wrapper will enable `--portmidi` by default. If you run the `tool` build script on its own, `--portmidi` is not enabled by default.\n\n## `orca` Livecoding Environment Usage\n\n```\nUsage: orca [options] [file]\n\nGeneral options:\n    --undo-limit \u003cnumber\u003e  Set the maximum number of undo steps.\n                           If you plan to work with large files,\n                           set this to a low number.\n                           Default: 100\n    --initial-size \u003cnxn\u003e   When creating a new grid file, use these\n                           starting dimensions.\n    --bpm \u003cnumber\u003e         Set the tempo (beats per minute).\n                           Default: 120\n    --seed \u003cnumber\u003e        Set the seed for the random function.\n                           Default: 1\n    -h or --help           Print this message and exit.\n\nOSC/MIDI options:\n    --strict-timing\n        Reduce the timing jitter of outgoing MIDI and OSC messages.\n        Uses more CPU time.\n\n    --osc-midi-bidule \u003cpath\u003e\n        Set MIDI to be sent via OSC formatted for Plogue Bidule.\n        The path argument is the path of the Plogue OSC MIDI device.\n        Example: /OSC_MIDI_0/MIDI\n```\n\n### Example: build and run `orca` livecoding environment with MIDI output\n\n```sh\n$ ./tool build --portmidi orca           # compile orca using build script\n$ build/orca                             # run orca\n```\n\n### `orca` Livecoding Environment Controls\n\n```\n┌ Controls ───────────────────────────────────────────┐\n│           Ctrl+Q  Quit                              │\n│       Arrow Keys  Move Cursor                       │\n│     Ctrl+D or F1  Open Main Menu                    │\n│   0-9, A-Z, a-z,  Insert Character                  │\n│    ! : % / = # *                                    │\n│         Spacebar  Play/Pause                        │\n│ Ctrl+Z or Ctrl+U  Undo                              │\n│           Ctrl+X  Cut                               │\n│           Ctrl+C  Copy                              │\n│           Ctrl+V  Paste                             │\n│           Ctrl+S  Save                              │\n│           Ctrl+F  Frame Step Forward                │\n│           Ctrl+R  Reset Frame Number                │\n│ Ctrl+I or Insert  Append/Overwrite Mode             │\n│        ' (quote)  Rectangle Selection Mode          │\n│ Shift+Arrow Keys  Adjust Rectangle Selection        │\n│   Alt+Arrow Keys  Slide Selection                   │\n│   ` (grave) or ~  Slide Selection Mode              │\n│           Escape  Return to Normal Mode or Deselect │\n│  ( ) _ + [ ] { }  Adjust Grid Size and Rulers       │\n│          \u003c and \u003e  Adjust BPM                        │\n│                ?  Controls (this message)           │\n└─────────────────────────────────────────────────────┘\n```\n\n## `cli` command-line interface interpreter\n\nThe CLI (`cli` binary) reads from a file and runs the orca simulation for 1 timestep (default) or a specified number (`-t` option) and writes the resulting state of the grid to stdout.\n\n```sh\ncli [-t timesteps] infile\n```\n\nYou can also make `cli` read from stdin:\n```sh\necho -e \"...\\na34\\n...\" | cli /dev/stdin\n```\n\n## Extras\n\n- Discuss and get help in the [forum thread](https://llllllll.co/t/orca-live-coding-tool/17689).\n- Support this project through [Patreon](https://patreon.com/hundredrabbits).\n- See the [License](LICENSE.md) (MIT) file for license rights and limitations.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhundredrabbits%2Forca-c","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhundredrabbits%2Forca-c","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhundredrabbits%2Forca-c/lists"}