barelymusician v0.1.0
This is the initial release of barelymusician! 🐰
barelymusician is a real-time music engine that is used to generate and perform musical sounds from scratch in a sample accurate way.
Supported platforms: Linux, OSX, Windows, Android, and a native Unity game engine plugin.
Features:
- A Musician class to manage the real-time music engine. The musician governs the global tempo for all musical components.
- An Instrument class to create and control musical instruments in real-time. Instruments can:
- Play notes with pitch and intensity.
- Modify their control values with an optional automation slope that is synced to the global tempo.
- Modify per-note control values in a similar way while playing a note.
- Set opaque data (which can be useful to pass audio sample data).
- Trigger callbacks for note and control change events.
- A Performer class to create and perform musical tasks in real-time. Performers can:
- Create recurring tasks to be triggered in a loop with modifiable properties (such as a metronome tick).
- Schedule one-off tasks to be triggered some time in the future represented in musical beats according to the global tempo.
- Start and stop their playback to trigger their tasks.
- Modify their position and other properties during playback.
- InstrumentDefinition and TaskDefinition structures to define custom instruments and tasks to be used in the music engine. In addition:
- Three pre-defined instrument types are implemented and included for reference, namely:
- An oscillator based polyphonic SynthInstrument with an ADSR envelope.
- A sample based polyphonic SamplerInstrument with an ADSR envelope.
- A sample based PercussionInstrument that can trigger percussion pads by note pitch.
- A Metronome component is implemented and included for reference.
- Three pre-defined instrument types are implemented and included for reference, namely:
- Bazel and CMake targets for multi-platform builds.
- A fully-featured Unity game engine integration with native plugins for each supported platform.
- Example code with scenes and binaries to demonstrate all the features above.
Limitations:
All features aside, there certainly are rough edges here and there throughout the project, although the core functionality is intact. This is especially true when it comes to ease of use, hence the 0.1.0 versioning. :)
That said, more things are yet to come to make use of the engine in more practical ways, which surely includes the adaptive music features from the legacy implementation, so it comes full circle.
See for reference: anokta/barelyMusicianLegacy
Full changelog: https://github.com/anokta/barelymusician/commits/v0.1.0