Previously, the LCD code needed to be aware of each synthesizer to know
how to draw their respective displays, which wasn't very maintainable.
Introduce a UI class where generic drawing utility functions and
"system" drawing code can be implemented, and move synth-specific
drawing to the synth classes themselves. This simplifies the LCD/OLED
drivers to just being interfaces to the hardware.
Also introduce a "MIDI monitor" class which tracks the state of all MIDI
activity per-synth for level meter drawing purposes. This ensures we
never miss a note; previously we were simply polling each synth engine
for its note velocities per LCD update, which was prone to missing fast
notes and also didn't account for channel volume or expression pedal.
Finally, enable support for 16-character wide displays (closes#58).
Add a Doom-style "zone" memory allocator that can be used instead of
malloc()/realloc()/free() for FluidSynth.
This removes the need to reconfigure the Circle heap and could reduce
fragmentation caused by repeated loading/unloading of SoundFonts.
This commit adds a simple physical control system with two schemes:
* simple_buttons: 4-button scheme
* simple_encoder: 2-button scheme + rotary encoder (with button)
This commit adds a driver for the Blokas Pisound audio/MIDI HAT based on
the Linux sources.
Currently this requires a patch to Circle to allow the Pi's I2S audio
device to operate in slave mode.
The Pisound only works at 48000Hz, 96000Hz, and 192000Hz. The Pisound is
automatically detected by the startup code; the user only has to enable
I2S audio output.
MIDI output and recording functionality is not supported.
Closes#42.
Refactor synth code to decouple it from the audio driver and instead use
the drivers' Write() methods to insert rendered audio into a queue from
CPU core 2.
Introduce a ROM manager that scans a 'roms' directory on startup for all
valid ROMs that mt32emu supports.
If none are found in this directory, fall back on searching for
MT32_{CONTROL|PCM}.ROM in the root of the SD card as before.
Add a custom SysEx command that allows the user to switch ROM sets on
the fly.
Add a new config file option for setting the default ROM set.
Closes#18.
This is a significant rewrite of the MIDI stream parsing code. USB and
serial MIDI streams now both use a common parsing class that maintains
its own state and dispatches valid MIDI events as they arrive.
Some more major fixes for devices that send using Running Status like
the UM-ONE MkII have also been made, and support for all valid MIDI 1.0
messages has been added, even though mt32emu may not use all of them.
Fixes#25 and fixes#26.