Extending Bravura

Bravura was designed to be extensible. There are currently three primary extension points:

1. Audio Plugins
2. Commands
3. Directives

Audio Plugins

An audio plugin is a "black box" which can accept audio and/or generate audio. Outputs of plugins can be connected to inputs of other plugins in any way desired. In this way, an entire synthesis model can be built of any complexity. At run time, this model is loaded into a synth engine, which itself is a "black box" which routes commands to plugins and runs the plugins contained within. In this way, the complexity of audio synthesis and processing is encapsulated within each plugin and no higher level component has to know anything about lower level logic. All audio plugins must implement the IAudioPlugin interface. The type (or types) of a plugin depends on which plugin interface (or interfaces) it implements above and beyond IAudioPlugin. Currently, the following three plugin interfaces are available:
  • IInstrument
    • Generates audio, controlled via run-time calls to NoteOn, NoteOff and NoteCtl methods.
  • IFilter
    • Processes audio.
  • ISend
    • Accepts audio, primarily to persist the audio data, although in a real-time scenario, an ISend could send the audio to an audio output device.


A command represents a single operation (method call) against an audio plugin. Each command knows what type of plugin it can operate on. This way, the logistics of sending a note-on event or changing the wet/dry mix on a filter is abstracted and the operation can be represented as an object. All commands must implement the ICommand interface.


A directive is a set of one or more timed commands that the music engine sends to an audio plugin at run-time. Each directive knows what type of plugin it can operate on. The music engine itself has no logic around that. That logic is encapsulated in the directive itself. All directives must implement the IDirective interface.

Command Targets

A command target is an object that a command or a directive can be executed against. Command targets are identified with the ICommandTarget interface. The following are valid command targets:

1. Music engine.
2. Synth engine.
3. Audio plugin.

Last edited Sep 9, 2011 at 11:42 PM by pvanukoff, version 4


No comments yet.