Improve status/error logging on the LCD.
Also fix clearing the screen on reboot by moving the call to Clear() to
the UI core and waiting for the UI core to be done before rebooting.
Now that the LCD updates are done from a secondary core, the scheduler
is unavailable for implementing timing delays.
Replace them with simple delay loops from the CTimer class.
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.
Changes to the velocity scaling logic were also made; mt32lcd now
normalizes the MT-32 part velocity to a floating point number between 0
and 1. The LCD driver can then translate this into a bar pixel height as
required.
Rename enums, functions parameters and class member variables so that
they match the Circle coding style more closely.
Replace /* ... */ comments with // comments.
Fixup some indentation issues/trailing whitespace.
Remove undefined functions and unused #defines.
Reduce code duplication significantly by employing macros and templates
for parsing strings into enums.
Increase efficiency by adding {BEGIN|END}_SECTION markers in config.def
so that we can avoid unnecessary calls to strcmp() with the section name.
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.
The PWM audio device on most Raspberry Pis expects to receive samples in
R-L order rather than L-R.
We use the AreChannelsSwapped() function of Circle to determine the
correct sample order, although this is not really necessary; currently
all of the models of Pi we support will require R-L sample order.
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.