[image: MIDIbox FM V2.0 Prototype, testing temperament system with Goldberg Variations]
http://discourse.midibox.org/t/topic/16179
Up to two OPL3 modules controlled by parallel interface.
Each OPL3 module provides all of the following: 12 2-op voices, each pair of which can be combined into one 4-op voice, for up to six 4-op voices; plus 3 2-op voices which can’t be combined; plus 3 2-op voices which can be turned as a whole into 5 percussion voices. This means that, from each module, you can have up to 18-voice polyphony of 2-op voices, up to 6-voice polyphony of 4-op voices plus up to 6-voice polyphony of 2-op voices, or either of the above minus three 2-op voices plus drums. You may use one or two OPL3 modules and set up any of the voices arbitrarily (within the hardware limits of the chip).
The parallel interface will have D7:D0 of the OPL3 module connected to J10 of the LPC17 module, /RS of the OPL3 module connected to J19:RC1 or RC2 (whichever is not otherwise in use), and the other OPL3 pins (A0, A1, /CS for OPL3 A, and /CS for OPL3 B) connected to J28. I expect one full register write operation to take around 15 us.
Front panel using MBNG framework.
If you don’t like what buttons/knobs I’m putting on the front panel of mine, make your own! All synth engine parameters (both OPL3 parameters and things like modulator connections) will be MBNG commands that you can write into your configuration file. The default config file will also have all the parameters hooked up to incoming CCs, and you can modify this as well of course.
In addition to just modifying all the parameters of the OPL3, sophisticated core-based modulation like in MBFM 1.4 (but slightly more powerful).
Each 2-op voice gets:
- one 6-step (ADBSSR) EG
- two LFOs, with frequency, delay, and waveshape controls; option for whether the frequency is a function of the tempo, or of the system time
- 32-step “wavetable” parameter sequencer
- Velocity modulator
- Mod Wheel modulator
- CC2/Variation modulator
For a 4-op voice, you get doubles of the first three of these (2 EGs, 4 LFOs, and 2 Wavetables). Doubling the last three wouldn’t make any sense!
Each of these modulators has an Assign button. Hold down that button and tweak any knob on the front panel to make that modulator affect the value of that knob. The value that the parameter was set to before being assigned (or whatever you change it to while not holding the Assign button) is the “middle” value of the parameter, what it will use when the modulator is halfway through its range. The amount by which you adjust the knob, in either direction, while holding down Assign is the depth of the modulation, the range around that middle value.
You can assign any modulator to any number of targets, including parameters of the same modulator, with independent depths. Edit: However, each voice supports a maximum of 16 of these modulation connections due to RAM consumption. Currently not sure whether my synth engine is going to be able to handle 32 connections for a 4-op voice, or if it’ll be 16 connections there too. Still don’t think you’re ever going to run out, consider other synths give you 4 per voice or 8 for the whole machine.
Equal temperament or custom temperament system editable straight from front panel.
Arbitrary, semi-dynamic voice allocation based on MIDI channels.
Select a MIDI channel and assign any number of voices to it. Load a patch and it will fill out those voices in polyphony as well as possible.
One voice that is a polyphonic “copy” of another will be linked to it with a DUPL button (automatically done on loading the patch). Also available is a LINK button that will cause the two voices to be sounded simultaneously, with any parameters that you modify of the LINKed voice remaining independent from the first, but changes to all others on the first affecting both. A patch may consist of any configuration of LINKed voices, not just two. CC 0 / CC 32 bank change messages and Program change messages will be supported properly (not mapped to any other parameters).
Save a patch or a complete state of the synth to SD card (no BankSticks).
Small fractal drum sequencer (later feature).
12(10) tracks, 16(17) steps per measure, 8(4) measures, 18 patterns in RAM. Let me explain…
When I write a drum pattern for a song, most of the time measures 1, 3, 5, and 7 are identical; measures 2 and 6 are identical and slighty more “interesting” than measure 1; measure 4 is more “interesting” (a fill) than measure 2, and measure 8 has the most fill. So I decided to make a sequencer that plays just those measures in that order: 1-2-1-4-1-2-1-8. When you record a part for the first time, it automatically fills up measures with higher indices than itself but not lower ones, so you can start the beat the way it is for all the measures and then just record the changes when they come along.
But there’s one problem with this: the crash cymbal that very often occurs on the downbeat of measure 1 (but not measures 3, 5, and 7!). Since the front panel already has 18, not 16, buttons in a row for selecting voices and potentially for selecting steps of a measure, I had an idea. Make each measure 17 steps long and have it overlap with the next measure by 1 step. Thus, the first step played when you start the sequence is both step 1 of measure 1 and step 17 of measure 8. Record that crash cymbal in 8.17, and it will only play at the beginning of the whole pattern, not every time measure 1 is played again! So the display will have steps 1-16 of the current measure in buttons 2-17; the 17th step, which overlaps onto the next measure, in button 18; and the currently-overlapping step from the last measure in button 1.
Now to the more specific features of the sequencer. Each step for each track contains:
- 1 bit note on
- 1 bit velocity: track-wide setting for what the two values are that this selects, default 80 and 120 or something
- 2 bit gatelength: selects 1/4 of a step, 1/2, 15/16, or 1 (full, no retrigger of note at beginning of next step)
- 1 bit variation parameter, that sends either 0 or 127 to the CC2/Variation modulator of this instrument, so you can get two different sounds out of a track
Even though the OPL3 only has 5 percussion voices (if enabled), namely Bass Drum, Snare Drum, Hi Hat, Tom Tom, and Cymbal, MBFM V2.0 will have 6 drum trigger buttons and apparent tracks (per OPL3), the extra one being for Hi-Hat Open. This is actually implemented by using the variation parameter–closed is variation = 0, open is variation = 127, and you can map that to Decay Time or whatever in order to get the two cymbal sounds. (So internally it’s just one track for HH, with the variation bit determining whether the step shows up in the editor for HHC or HHO.) Thus the variation parameter per se is not available for the two HH channels; and due to bit widths, it is also not available for the Cymbal track.
18 patterns are selectable by holding down the PTN button and pressing a voice select button. If you press the button once, the sequencer will jump to that pattern at the end of the 8-measures; if you press it again, it will jump to the current position in that pattern immediately (morph). Edit: Again due to RAM consumption, the 18 patterns may not be actually loaded into RAM, it may just be the one. Estimated 2 ms delay between selecting a new pattern and it completely overwriting the current one (this delay will not affect the tempo clock, which is an independent hardware timer, just when the changeover between patterns actually takes place).