User Tools

Site Tools


midibox_quad_genesis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
midibox_quad_genesis [2015/10/27 16:23]
sauraen Added synth architecture overview
midibox_quad_genesis [2017/12/20 21:19] (current)
smithy [Hardware components]
Line 3: Line 3:
  
 ====== Summary ====== ====== Summary ======
-MIDIbox Quad Genesis (MBQG) is a homebrew synthesizer project in progress, designed and built by Sauraen and originally commissioned by [[http://​joshwhelchel.com|Josh Whelchel]]. It runs up to four sets of YM2612 (OPN2) + SN76489/​94/​96 (PSG) sound chips, one set of which comprised the sound generation hardware in a Sega Mega Drive / Genesis. The synth is powered by a STM32F4 core running MIOS32, and is based on MIDIbox hardware and software throughout.+MIDIbox Quad Genesis (MBQG) is a homebrew synthesizer project in progress, designed and built by Sauraen and originally commissioned by [[http://​joshwhelchel.com|Josh Whelchel]]. It runs up to four sets of YM2612/​YM3438 ​(OPN2) + SN76489/​94/​96 (PSG) sound chips, one set of which roughly ​comprised the sound generation hardware in a Sega Mega Drive / Genesis. The synth is powered by a STM32F4 core running MIOS32, and is based on MIDIbox hardware and software throughout.
  
 ====== Useful Links ====== ====== Useful Links ======
Line 10: Line 10:
  
 [[http://​midibox.org/​forums/​topic/​19073-midibox-fm-v21-on-stm32f4/​|MIDIbox FM V2.1 (OPL3 synth on STM32F4) forum thread]], including some old discussion with yogi about MIDIbox Quad Genesis ideas [[http://​midibox.org/​forums/​topic/​19073-midibox-fm-v21-on-stm32f4/​|MIDIbox FM V2.1 (OPL3 synth on STM32F4) forum thread]], including some old discussion with yogi about MIDIbox Quad Genesis ideas
- 
-[[http://​goo.gl/​forms/​4Gg5JX6GpX|Fill out this form]] if you might be potentially interested in buying MBHP_Genesis boards 
- 
 ====== Hardware ====== ====== Hardware ======
  
Line 19: Line 16:
   * Zero, one, or two [[http://​ucapps.de/​mbhp_midi_io.html|MIDI_IO]] modules   * Zero, one, or two [[http://​ucapps.de/​mbhp_midi_io.html|MIDI_IO]] modules
   * One, two, or four [[MBHP_Genesis]] modules   * One, two, or four [[MBHP_Genesis]] modules
-  * 2x40 character [[http://​ucapps.de/​mbhp_lcd.html|LCD]] (or VFD) (size mandatory)+  ​* One [[MBHP_Genesis_LS]] level shifter board to interface 3V MCU to 5V sound chip boards 
 +  ​* 2x40 character [[http://​ucapps.de/​mbhp_lcd.html|LCD]] (or VFD, or OLED...) (size mandatory)
   * [[MBQG_FP]] custom front panel board; or alternately,​ [[http://​ucapps.de/​mbhp_din.html|DIN]],​ [[http://​ucapps.de/​mbhp_dout.html|DOUT]],​ and/or [[http://​ucapps.de/​mbhp_dio_matrix.html|DIO_MATRIX]] modules as needed to make custom front panel   * [[MBQG_FP]] custom front panel board; or alternately,​ [[http://​ucapps.de/​mbhp_din.html|DIN]],​ [[http://​ucapps.de/​mbhp_dout.html|DOUT]],​ and/or [[http://​ucapps.de/​mbhp_dio_matrix.html|DIO_MATRIX]] modules as needed to make custom front panel
 +  * [[MBQG_TB_CASE]] a DIY wooden case for MIDIbox Quad Genesis, designed by Technobreath to be easily replicated with little skills and tools.
   * Stereo audio output connection of desired type   * Stereo audio output connection of desired type
   * Mono audio input connection for each SN76494/96 if desired   * Mono audio input connection for each SN76494/96 if desired
 +  * Power supply (see below)
 +
 +
 +===== Power Supply =====
 +
 +All the modules within MIDIbox Quad Genesis run at 5V, so there is no need for a fancy supply. However, the front panel draws up to a theoretical maximum of 1.2A (if the synth crashes with all the LEDs on), and noise from the digital components can easily get into the analog audio output. ​
 +
 +Because of these considerations,​ and wanting to have the most versatile power option possible, I powered my synth as follows. I mounted a standard barrel jack (with an insulating mount, so both terminals were still electrically isolated from the metal case) and a subminiature toggle switch on the back panel. Those, and an internal fuse holder with a 1.5A fuse, were wired in series. This connected to the AC terminals of a bridge rectifier I made from 1N4007 diodes, and the DC output went to a 3300uF electrolytic capacitor. This is the beginning of a standard linear power supply, which means that any input from any wall-wart or adapter in the appropriate voltage range (see below), whether AC or DC of either polarity, will work just the same.
 +
 +This filtered DC was split and sent to two miniature switching regulators, OKI-78SR-5 (Mouser 580-OKI78SR5/​1.5W36C ), which is a fantastic switching regulator that functions as a drop-in replacement for a 7805 linear regulator. It can push 1.5A output and has an input range of 7-36V, meaning that any kind of wall transformer or switching regulator rated at about 8V-30V, AC or DC, will work on the synth.
 +
 +The output of one switching regulator was used exclusively for the front panel, while the output of the other was sent to the core and the Genesis boards. A 0.1uF capacitor was placed from input to ground and output to ground on each regulator, and additionally a 10uF capacitor was placed at the output.
 +
 +This approach worked fine for me. As far as noise, my synth does have audible noise at harmonics of 1kHz, but I don't think this is due to the power supply (the regulators switch at much higher frequencies,​ 500kHz). You are welcome to adapt this design to your needs or build a completely different power supply, though I wouldn'​t recommend trying to power the synth from USB due to the front panel.
  
 ====== Synth Architecture ====== ====== Synth Architecture ======
  
 +|  Dummy  |  Dummy  |  Dummy  |  Dummy  |  [[https://​youtu.be/​N3epEVMNJdY|Dummy!]] ​ |
 +|  Subscreens ​ |||||
 +|  Modes  |||||
 +|  VGM Streaming ​ ||  VGM from RAM  |  VGM Realtime Queue  |  Interface ​ |
 +|  Stream Thread ​ |  VGM Player ​ ||| ::: |
 +|  FAT File System ​ |  Chip State Tracking ​ |||  Front Panel  |
 +|  MIOS32 SD Card  |  MBHP_Genesis I/O  |||  MIOS32 DIO  |
 ===== Overview ===== ===== Overview =====
  
Line 43: Line 63:
  
 ==== Tracker Mode ==== ==== Tracker Mode ====
-A voice in tracker mode has little-to-no synth engine and is simply controlled in realtime by MIDI commands from a DAW or tracker. It is configured to respond to commands from one MIDI port on one channel. The following MIDI messages are supported:​ +A voice in tracker mode has little-to-no synth engine and is simply controlled in realtime by MIDI commands from a DAW or tracker. It is configured to respond to commands from one MIDI port on one channel, according to the GENMDM specificationI have been in contact with Aly James, ​the creator ​of FMDrive, ​the celebrated OPN2 VST plugin, and we are working ​to ensure the MIDI map of his software and my hardware are as identical as possible.
-  * Note On sets the voice'​s frequency and keys on all operators; Note Off keys off all operatorsVelocity is ignored. +
-  * Pitch Bend changes the voice'​s frequency ​in real time (as usual); the Pitch Bend Range RPN is supported. +
-  * CC7 (Volume) changes ​the amplitude ​of the voice'​s carrier operators according to a selectable mapping. +
-  * CC10 (Pan) changes whether the voice is assigned to left, right, or both channels. +
-  * Other CCs (TBD) set all other operator parameters. +
- +
-In addition, each YM2612 may be placed into Tracker mode itself, and then it will respond ​to MIDI messages to set its global parameters (LFO, test registers, etc.). +
 ==== Free Mode ==== ==== Free Mode ====
-A voice in free mode is available to be assigned in real-time by the synth engine to an appropriate instrument. 
  
-===== Instruments ===== +A voice in free mode is available to be assigned in real-time by the synth engine to any program. This sounds simple enough, but this requires tremendous complexity on the inside, for two reasons: 
-An instrument ​is a set of configuration information about one or more voices of certain types. As in a General MIDI ROMplerMIDI channels are assigned to instruments by the user (or via MIDI messages), and the synth automatically assigns those instruments to voices when notes are triggeredHowever, the actual content ​of these instruments is very different from a GM patch in MIDIbox Quad Genesis.+  - A VGM file can use any combination ​of voices ​on one pair of chipsand the voices are not homogenous ​(e.g. FM voices 3 and 6 can do things which 1, 2, 4, and 5 can't; and PSG voice 3 can do things which 1 and 2 can't; but the other way around does work correctly, you can play anything which was intended for voice 1 on voice 3). 
 +  - Certain OPN2 features (the LFO and the test bits) are global to the chipso VGM files which use these features have to be kept on the same chip or carefully assigned across multiple chips. Moreover, for certain ​of these features (the LFO), other voices which ignore the features can share the chip, but for certain ones (the Ugly bit) the feature affects all voices.
  
-An instrument contains: +The synth engine keeps track of what chip resources each VGM file and program ​use (its "usage"). (Even computing this isn't always trivial, since a VGM file can be streamed from the SD card!) When playing ​note on a programit determines where to assign all of its used voices based on many factors; and of course, when actually playing ​the commands within ​the fileit has to reroute them all as well as modifying their pitch if applicableall at 44.1 kHz!
-  * Information about how many of what kinds of voices the instrument will use, and whether it will set or use chip-global features like the LFO +
-  * A "state" VGM file, which must be of time-length 0, which is played when the instrument is loaded to voice +
-  * A "​sample"​ VGM fileany time-lengthwhich is played ​when the instrument is keyed on +
-  * Information about how the MIDI note played combines with frequency information in the VGM to produce the actual frequency values sent to the voice +
-  * Optional operator gating at fixed delay from MIDI note onor in response ​to other MIDI events +
-  * A set of modulators (software LFOsEGs, velocity, CCs) and their assignments to voice parameters+
  
 ===== Interface Modes ===== ===== Interface Modes =====
  
 ==== Voice Mode ==== ==== Voice Mode ====
-Press Voice and select a voice. Use the screen to set whether the voice is in tracker or free mode. If the voice is in tracker mode, the voice controls light up and are functional to set the current state of the voice. This state of course may be overridden by subsequent MIDI messages. The current voice state may be loaded/​saved at any time from/to a VGM state file. 
  
 +Select a voice using the Genesis buttons. The voice controls display the current state of the voice. If the voice is in tracker mode, the voice controls are functional to set the current state of the voice; this state of course may be overridden by subsequent MIDI messages. View the current Genesis'​s audio state on the VU meters, and select whether the right columns display the current voice'​s operator states or the PSG channel states.
 +
 +Planned features:
 +  * Capture button: create a VGM file which represents the state of the current voice. Display a menu of channels so you can choose where this will be stored. Upon selecting a channel, or pressing the Capture button again which will use the last edited channel, a new program will be set up on this channel with that VGM file as its init and appropriate keyon and keyoff files, so you can play this sound on the keyboard as usual.
 ==== Channel Mode ==== ==== Channel Mode ====
-Press Chan. Use the screen ​to select a MIDI channel. Set whether the channel is assigned to a voice in tracker modewhether it should play instruments on voices in free mode, or whether it should be ignored(TODO channel instrument split points for drum sets) In addition, the following elements can be set up: +Use the PSG Voices and OPN2 buttons ​to select a channel. ​(Please note that the number of channels in the synth are 16 x the number of ports, which is by default 4.) Set whether the channel is assigned to a voice in tracker mode or whether it should play instruments on voices in free mode. If the channel is in free mode, load, save, delete, or create ​new program
-  * A multiplier can be added to any MIDI channel to affect one or both of CC 7 and CC 11. If enabled, the multiplier simply multiplies any incoming CC of this type by the 16-bit value and then divides it by 2^8, before passing it on to the synth engine. This allows the volume of channels to be adjusted while they remain responsive to incoming volume messages. +==== Program Mode ==== 
-  * If the channel is in free mode, a program ​change can be sent from this menu.+Edits the program selected in Chan mode.
  
-==== Instrument Mode ==== +A program consists of 3 VGM files: one to init the voice(s), one played at key on, and one played at key off. Program mode allows ​the loading, saving, deleting, or creating new template-based files for any of these functions. Additionally,​ this screen lets the user select the root note of the programi.e. which keyboard note corresponds to no pitch change from the given VGM files.
-Press Inst and use the screen to select a loaded instrument, or select the instrument from Channel mode. Use the screen to load and unload more instrumentschoose ​the instrument'​s state and sample ​VGM files, set up the MIDI note on frequency/​gate behavior, and edit modulators.+
  
-Voices light up corresponding ​to the voices this instrument affects--but not the actual ​voices ​it's being played onrather ​the voices that the VGM files are specifying playback ​on. For instance, if the state file was extracted from a VGM that happened ​to be playing the instrument on FM channel 4, channel 4 would be lit up, even if currently this voice was playing three polyphonic copies on chip 3 channels 1 and 6 and chip 4 channel 2.+Planned features: 
 +  * VGM file tempo adjustment, including the option ​to scale tempo with pitch (like changing analog speed). 
 +  * Drum type programs, which instead of having three VGM files, have 16, one for key-on for each of a definable split region. Key off is fixed to just key-off or silence ​the used voices, ​and the key-on VGM has to contain any set-up commands. 
 +==== VGM Mode ====
  
-Select a voice and use the voice controls to view and edit the voice'​s state. This is the state of the voice after its state VGM is played but before its sample VGM is played. No VGM timing controls are available, as all the commands in the state VGM must happen at time zero.+Full-featured editor for VGM files loaded into RAM, and partial editor for VGM files streamed from the SD card.
  
-==== VGM Mode ==== +Both modes support real-time preview of the VGM file, muting ​and soloing voices (applies even to copies playing from key pressesnot just the preview copy). 
-Press VGM and use the screen ​to select a loaded VGMor load a new oneAlternatelyselect the VGM from Instrument ​mode.+ 
 +For VGM files loaded into RAMsupports editing, inserting, and deleting individual ​VGM commands in Cmds mode. In State mode, shows the current state of the voice on the edit controls, and allows editing of this state directly (by changing the last command before the present which affected that parameter).
  
-TODO+Planned features: 
 +  * For either type of VGM, support defining soft start and end points ("​mark"​) within file. Then, press Crop to make the VGM be only this section, and also only the voices which are soloed or not muted. If the VGM file is a stream and the result of the Crop operation would fit in RAM, load the result into RAM for further editing. 
 +  * For either type of VGM, Capture the current state of a voice as in Voice mode. 
 +  * For RAM only, move, duplicate, or copy-and-paste the individual commands or the marked section to a different position.
midibox_quad_genesis.1445962981.txt.gz · Last modified: 2015/10/27 16:23 by sauraen