Bank Editor and Mixer

A project log for OPL2 / OPL3 MIDI Interface and Controller

a MIDI interface for the OPL2 Audio Board and OPL3 Duo!

Maarten JanssenMaarten Janssen 02/28/2021 at 12:100 Comments

Over the past 2 weeks I've been busy figuring out how to implement the different modules such as the sequencer, bank editor and mixer of my project. Also a lot of time has gone into setting up the event system to direct touch events from the pointer to the correct UI component of the active module. The three modules that I have now look like small individual apps that I can run on the device. There is still some plumbing needed to launch the different modules, so for now it will just run whatever module is hardcoded to launch.

Bank Editor

Of course I need a bank editor to change the OPL3 values of each instrument. The bank editor is why I started this project. I've broken out all the settings of the 4 operators of a channel in separate tabs. All settings can already be changed and will immediately change on the MIDI program that is selected, so after changing the OPL3 settings you can hear the result by playing some notes on the keyboard. It's a lot of fun to experiment with!

Currently only 4-operator instruments are supported, but I also want 2-operator bank support in the near future. Right now the my MIDI code simply assumes 4-operator instruments, because I wrote it for my OPL3 Duo boards. Also some additional work is still needed to bring it all together, such as changing the name of an instrument, visualization of the synth mode (AM-AM ... FM-FM) and eventually I want to be able to save and load instrument banks...

MIDI Channel Mixer

The MIDI Channel Mixer is the second module I've started to work on. It shows per channel the program, volume, panning, mute and solo buttons and some LED indicators to thow the output level. This all works in real time from the MIDI events that are received. It's not just a static display; you can drag the sliders to change volume, toggle the mute and solo buttons by clicking them and this will directly influence the MIDI player in the background.

There is still quite some work to be done. The vertical scroll bar to scroll past channel 8 is not yet functional and I have not yet implemented panning iin the MIDI code. Clicking the program name to select a different program is probably also desirable. Some code optimizations are also needed, for example whenever a volume change event is received it will immediately update the volume slider and this can delay processing other MIDI events, so the visual update should only happen during the update of the module.

So far I think it looks great and functionality is already quite nice!