MicroDexed (also called MD) is a software which runs on a Teensy(-3.6/4.x) microcontroller. It simulates a well know 6 operator FM synthesizer with some additions (like effects) and is controlled and mostly programmed via MIDI. The sound engine is based on [Dexed](https://github.com/asb2m10/dexed), a famous open-source VST plugin.
## Requirements
To use MD, you need suitable hardware. For example [TeensyMIDIAudo (TMA)](https://codeberg.org/dcoredump/TeensyMIDIAudio/src/branch/master/Rev-1.8) was developed directly for MD. The schematics and layouts are open-source, so you can easily build a TMA board. You can also build it on a stripe grid board or use completely different variants - it's up to you how you build the hardware. Another option (with a few extensions) is the [Teensy Guitar Audio Shield](http://blackaddr.com/products/).
Basically your MD "board" needs the following:
* I2C connector for connecting a LCD display (software is written for a 2*16 character display, but a bigger one should do also).
* 2 Encoders (for each encoder one digital input for the button and two digital inputs for the encoder directions).
* A DA converter supported by Teensy (something like a "audio shield", e.g. the Teeensy audio shield, or (the simplest way) you can use the 12bit DA output pins of the Teensy-3.6 (not possiblefor Teensy-4.x!)).
* "A way to get MIDI into the Teensy", like the onboard USB port (will not work for USB-MIDI-keybords, because it is not a host port!), the USB-Host port (with soldering a header) or external IO-components for DIN-MIDI.
* A small FAT32 formated SD card.
* The Arduino-IDE and TeensyDuino for compiling and uploading the program code (tested with Arduino-1.8.12 and TeensyDuino-1.52).
The complete hardware build manual for the TMA-board can be found at [https://codeberg.org/dcoredump/TeensyMIDIAudio/src/branch/master/Rev-1.8/Build-Manual/TMA-Build-Manual.pdf]. So for now we expect that you have a running hardware with installed MD software.
<divstyle="page-break-after: always"></div>
## Operating elements on the front
The normal controls for the user are arranged as follows:
![](../../images/MicroDexed.png)
If you decide to do the arrangement differently this is no problem. You only have to remember how the encoders are assigned to the function:
* Left encoder is named __VOLUME__
* Right encoder is named __PRESET__
### Permament encoder functions
The __VOLUME__ encoder always has the following functions - no matter where you are in the menus:
* __Turn left/right__: Change the volume. The volume-change-screen appears when turing and disapears after a short time and you get back, where you left off.
* __Long-Press__: A MIDI panic is triggered and all voices are muted.
* __Short-Press__: Back (from the selected menu-item or up to the parrent menu)
The __PRESET__ encoder has only one permanent function:
* __Long-Press__: This takes you to the sound/bank selection.
<divstyle="page-break-after: always"></div>
## Quick start
On a freshly installed MD the screen should greet you with the sound/bank selection. The volume is set to 80%.
- [<img src="../../images/LCD_characters_green/small_1_inv.png" width="12"/>](../../images/LCD_characters_green/small_1_inv.png) indicates that you are using timbre 1.
- [<img src="../../images/LCD_characters_green/key.png" width="12"/>](../../images/LCD_characters_green/key.png) indicates that you currently use the monotimbral engine.
- [<img src="../../images/LCD_characters_green/bracket_open.png" width="12"/>](../../images/LCD_characters_green/bracket_open.png)[<img src="../../images/LCD_characters_green/bracket_close.png" width="12"/>](../../images/LCD_characters_green/bracket_close.png) are showing which parameter do you currently edit with the __PRESET__ encoder.
- [<img src="../../images/LCD_characters_green/note.png" width="12"/>](../../images/LCD_characters_green/note.png) below the timbre symbol(s) indicates that there was an MIDI event (if using a Teensy -4.x different height bars (depending on velocity) are displayed per timbre).
**push**: open menu / go up one level in menu hierarchy
**turn**: change master volume
### Right encoder
**push**:
* in menu: open submenu
* in preset selection: go to next option
**turn**:
* in menu: pick menu entry / change value
* in preset selection: change preset or bank
## preset selection
This is the main MicroDexed screen you will use during operation. You can change the currently active preset by turning the right encoder. The preset's name appears in the bottom LCD row. <br>
Presets are organised in banks. Each bank holds 32 presets. If you arrive at the last preset in the current bank and turn the right encoder even further, the first preset of the next bank will become active.<br>
You can switch between preset and bank selection by pushing the right encoder. The active selection is marked by square brackets. <br>
If you compiled MicroDexed to use two Dexed instances, each instance will use its own preset. Which instance you are selecting presets for can be seen in the LCD's top right corner. The active instance's number is displayed white-on-black.<br>
A small lock in the place of instance number 2 means that MicroDexed was compiled to use a single Dexed instance.<br>
A mirrored number in either place means that this instance is currently disabled (polyphony set to 0) and will not use CPU time.
## configuration menu
A note on instances:<br>
When setting parameters in this menu, pushing the right encoder switches between instance 1 or 2 if both are active.<br>
### 1. Voice
#### 1.1 Select
Selecting this entry opens the preset selection screen.
#### 1.2 Audio
##### 1.2.1 Voice Level
##### 1.2.2 Panorama
##### 1.2.3 Effects
**Chorus**<br><br>
**Chorus Frequency** This value controls the LFO frequency that modulates the Chorus. It is given in Hz.<br>
**Chorus Waveform** This sets the LFO modulator waveform for the Chorus. You can choose between sine and triangle wave.<br>
**Chorus Depth** This value sets the Chorus LFO modulator's amplitude.<br>
**Chorus Level** This value controls how much of the Chorus' output is added to the mix.<br>
**Delay**<br><br>
**Delay Time** The time between reflections (milliseconds).<br>
**Delay Feedback** The amount of signal that is fed back to the Delay (percent).<br>
**Delay Level** This value controls how much of the Delay's output is added to the mix.<br>
**Filter** Lowpass? Freq is 0-100?
**Reverb**<br>
Hint: Start by setting Roomsize to 30, Reverb Send to its maximum and Reverb Level to 50%. This should give you the smallest amount of noise. If the reverb sounds distorted when you play a loud preset, decrease Reverb Send until the distortion is gone, then adjust Reverb Level to your liking.<br>
**Reverb Roomsize** This influences how long the reverb will sound.<br>
**Reverb Damping** This controls how fast higher frequencies are filtered from the reverb sound.<br>
**Reverb Level** This value controls how much of the Reverb's output is added to the mix.<br>
**Reverb Send** This value controls how much of the Dexed's signal is fed to the reverb.<br>