ORchestra is a MIDI sequencer plugin that generates and combines sequences of notes or MIDI CC messages. It features a custom scripting language for creating complex rhythmic patterns through logical operations and phasing of different lengths of data. The ORchestra language does not aim to be a complete programming language. It has been created to fit the specific needs and vision for ORchestra.
There are many other live coding tools out there, and ORchestra is not trying to replace them. Rather, this is my brainchild and idea of what a fun experimental MIDI scripting language inside a DAW could be. It invites experimentation with phasing loops to create semi-algorithmic compositions or patterns.
The original prototype that sparked the idea can be found here: https://github.com/Tronhjem/EuclidsCombinator
Disclaimer: AI has been used on this project to try out GitHub Copilot agents and similar tools forimplementing simple extensions of the language and writing unit tests, build scripts and github pipelines. The majority of the code is still written by me, and this is by no means a vibe-coded project.
Use the latest release for your platform to just get started quickly. Refer to the Usage documentation for how to use it. If you prefer to build yourself find details in the section Build Instructions
Step-by-step notes for adding ORchestra to common DAWs and routing MIDI and getting started can be found in docs/Usage.md.
ORchestra's scripting language, syntax, built-in functions, and examples are documented in detail in docs/LanguageReference.md.
A web version of the documentation is also published at https://tronhjem.github.io/ORchestra
Before building ORchestra, ensure you have the following installed:
- CMake (version 3.22 or higher)
- C++ Compiler with C++17 support (GCC, Clang, or MSVC)
- Git (for cloning and managing submodules)
- JUCE Framework (automatically fetched as a git submodule)
For building, you can run ORchestra with the Projucer. Open the ORChestra.jucer file in /ORchestra/ORChestra.jucer and generate and build the project. This is by far the easiest approach if you do not want to deal with CMake. Follow the JUCE documentation if you get stuck on how to run the project with the Projucer.
Alternatively, you can get started using the provided setup script:
./setup.shThis will:
- Initialize and update the JUCE submodule
- Create a build directory
- Configure CMake with default settings
Then build the project:
cd build
cmake --build .Step 1: Clone and Initialize Submodules
git clone https://github.com/Tronhjem/ORchestra.git
cd ORchestra
git submodule update --init --recursiveStep 2: Create Build Directory
mkdir build
cd buildThe CMake build supports separate compilation of the plugin and tests for faster development:
Build tests only (no JUCE dependency, faster):
cmake -DBUILD_PLUGIN=OFF -DBUILD_TESTS=ON ..
cmake --build .
./Tests/UnitTests/ORchestraTestsBuild plugin only (requires JUCE):
cmake -DBUILD_PLUGIN=ON -DBUILD_TESTS=OFF ..
cmake --build .Build both (default):
cmake ..
cmake --build .All testing tools - unit tests, fuzzers, and the multi-thread stress harness - live in the Tests/ folder. See Tests/README.md for build and run instructions.
Problem: JUCE not found error
Solution: Ensure you've initialized the submodule:
git submodule update --init --recursive
Problem: CMake version too old
Solution: Install CMake 3.22 or higher:
- Ubuntu: sudo apt-get install cmake
- macOS: brew install cmake
Problem: Build fails with missing compiler
Solution: Install build essentials:
- Ubuntu: sudo apt-get install build-essential
- macOS: Install Xcode Command Line Tools
Problem: Reserved keyword error
Solution: Check that you're not using: note, cc, ran, euc, bpm, beat, fn, end, return, print, test, or $ as variable names
Problem: Note name parsing error
Solution: Ensure note names follow the format: [A-G][#/b]?[0-10]
Examples: C4, F#5, Db3
Problem: Index out of bounds
Solution: Verify array indices are within range (0 to array length - 1)
- Open an issue on GitHub
- Check existing issues for similar problems
- Include your ORchestra script and error messages when reporting bugs
AGPLv3 - see LICENSE file for details.
