The Orchestra is a C++20 / JUCE-based orchestral playback and exploration environment.
It focuses on:
- Managing structured instrument metadata (range, transposition, techniques, roles, famous works) loaded from JSON
- Real-time MIDI + audio processing (standalone app and plugin-style architecture)
- Sample-driven playback (sampler voices + instrument selection)
- Fast, structured logging (fmt-backed)
- Comprehensive automated tests (GoogleTest) for core musical domain logic
The project is in active development and aims to become a lightweight orchestral study / sketching tool and foundation for more advanced articulation and performance modeling. Currently the UI (especially the notation rendering) is currently being refactored.
- JSON-driven instrument catalog (Woodwinds, Brass, Strings, Percussion)
- Family -> instrument technique inheritance with instrument-level overrides
- Rich descriptors:
- Playing techniques
- Qualities / timbral zones
- Ranges & Transposition
- Displayed vs actual range (e.g. percussion, harp)
- Famous works & usage roles
- Deterministic lookup by numeric key (e.g. 301 = Violin) with caching
- JUCE
AudioProcessor+AudioProcessorEditorarchitecture - Automatic enumeration & enabling of all available MIDI inputs on startup
- Sample playback via custom sampler classes (tested)
- Real-time safe routing through
AudioDeviceManagerandAudioProcessorPlayer
| Layer | Technologies |
|---|---|
| Core / Engine | C++20, JUCE modules |
| UI / Windowing | JUCE (DocumentWindow, custom editor) |
| Audio / MIDI | JUCE audio & MIDI services |
| Logging | fmt (via embedded logger) |
| Build System | CMake |
| Testing | GoogleTest |
| Tooling (optional) | Clang-Format, CppCheck, Doxygen |
The project uses a modular Python-based build system located in build.py, with supporting modules inside the scripts/ directory. It handles:
- CMake project generation
- Selecting platform, architecture, and configuration
- Automatic versioning
- Environment detection (Dev / Staging / Prod)
- Building and installing
- Running the C++ GoogleTest suite
| Argument | Short | Description | Default |
|---|---|---|---|
--prepare |
-p |
Generate CMake build files only (no build). | False |
--build |
-b |
Generate and build the project (also runs tests). | False |
--platform |
-pl |
Select CMake generator (VS2022, Ninja, Xcode). |
Ninja |
--architecture |
-a |
Target architecture (x64, ARM64). |
x64 |
--configuration |
-c |
Build configuration (Debug, RelWithDebInfo, Release). |
Release |
--runtest |
-t |
Run only the CMake test suite | False |
Generate CMake project files:
python build.py -pSelect platform with the --platform (-pl) option:
python build.py -b -pl VS2022
python build.py -b -pl XCode
python build.py -b -pl NinjaDefault: Ninja
Select configuration with the --configuration (-c) option:
python build.py -b -c Debug
python build.py -b -c RelWithDebInfo
python build.py -b -c ReleaseDefault: Release
Select configuration with the --architecture (-a) option:
python build.py -b -c x64
python build.py -b -c ARM64Default: x64
The script generates the following structure:
/build/<Configuration>/<Architecture>/
Example:
build/Release/x64/This project is licensed under the MIT License. See the LICENSE file for details.

