some weeks ago I started a side project: MicroDexed. Dexed is the famous Yamaha DX-7 as a VST. Dexed-LV2 is a port of the VST to LV2 and so it is usable for us with MOD-UI.
MicroDexed is a port of the raw Dexed engine with some MIDI-SysEx-magic-glue towards a Teensy(-3.6). On the Teensy-3.6 you can solder a USB-Host port, so you can drive MicroDexed with a USB-MIDI-keyboard - or you can build an additional MIDI-input-circuit. You also need an Audio-Adapter board, which has audio I/O and a headphone output.
The Teensy also has a SD card slot (on the Teensy itself or on the Audio-Adapter) where you can drop SysEx files for sounds. The current MicroDexed can switch volume, bank and voices via keyboard.
Currently MicroDexed works - but it is not ready. The sources are located at GitHub.
Here is a picture from the current Dev-Board (as every time with the nice table cloth ):
NOTICE: If you want to build a MicroDexed you have to order a Teensy-3.6 (and not the Teensy-3.5)! The Teensy-3.5 works, but it has no USB-host and only enough CPU power for 10 voices of polyphony at a time!
If I clearly understand, the presets are stored in an SD card… So if someone wants to enclose the thing into a box, or even into a midi master keyboard, it would be clever to put it in such a way that the SD slut can be accessed without opening the box… ok…
And there’s no possibility to add a volume knob… Volume can only be controlled through MIDI messages… Right ??
And what is the MIDI OUT for ?? Is it in fact a MIDI thru ??
Now a question invades my brain… If it’s possible with the LV2 version of Dexed, then maybe it is also possible with other LV2 synths… Maybe MDA ePiano ?? ZynAddSubFX ??
Yes, access to the SD card(s) should be taken into account.
No. This is just a current implementation to make the system as easy as it can be. Think about buying just the Teensy-3.6, the audio-shield and solder a USB connector: ready is your MicroDexed - and you can change sounds and volume.
But you can also add one (or more) potentiometers for changing the volume and other parameters. A Teensy has much more usable pins - some digital, some analog. So it is possible to change all parameters with external hardware.
I created my own simple development board and I made one with a MIDI-Out which MicroDexed is currently not using. Adding a THRU is also possible. Also a “software”-through is possible.
Hmmmm. Yes and no. In fact it may be possible, but a Teensy has (like all other computers) limitations. So the CPU-frequency is at 180 MHz and memory limit is 512KB (or 256KB?). I am really sure that 180 MHz is not enough for ZynAddSubFX. For MDA ePiano… maybe… it’s also a question about how many simultanious voices should be computed. So I think MDA ePiano is also too much for a Teensy - but why not testing this?
More powerful is an ESP32 (dual core, 240 Mhz). Perhaps this one can be used for MDA ePiano… but there is currently no audio board available (only one from India, shipping is more expensive than the board) and the audio drivers are perhaps not fully tested… but it may be a good choice for the next tests. How about doing this ?
This is very interesting. I’ve used Teensy for other lighting projects in the past & I’ve been impressed by the speed improvements over other Arduino related hardware. I’m much more familiar with the Arduino IDE than using Python so I’m tempted to start yet another side project.
I’m interested in this TeensyX 7…
The only thing is, what about those parameters which are not included in the sysex files ??
Yamaha had chosen to have some common parameters, for all the presets… They are pitch bend range, modulation wheel dpeth, and destination, same for breath controller, same for foo pedal, and same for aftertouch… Did I forget someone ??
How is it possible to set them on the micro dexed ?? Only through midi ?? Or not at all ??
And btw, I(m totally disabled when it comes to programming, so what I would need is a ready to go solution… For example, I don’t know what is a software MIDI thru, and how to do it…
Have a nice day…
Yes, I know about this (I have a real DX7II ).
The good news: no problem - it’s software! The MicroDexed can handle all parameters a DX7 can handle (but not Portamento).
The “bad” news: I am proud that I can read normal voice SYSEX . The other parameters are currently hard coded for testing purposes. But it is no coding problem to store them as global or additional voice parameters - it just has to be done (and will be done).
The parameter list is:
64 MONO/POLY MODE CHANGE 0-1 O=POLY
65 PITCH BEND RANGE 0-12
66 PITCH STEP 0-12
(67 PORTAMENTO MODE 0-1 0=RETAIN 1=FOLLOW)
(68 " GLISS 0-1)
(69 " TIME 0-99)
70 MOD WHEEL RANGE 0-99
71 MOD ASSIGN 0-7 b0: pitch, b1:amp, b2: EG bias
72 FOOT CONTROL RANGE 0-99
73 FOOT ASSIGN 0-7 "
74 BREATH CONT RANGE 0-99
75 BREATH ASSIGN 0-7 "
76 AFTERTOUCH RANGE 0-99
77 AFTERTOUCH ASSIGN 0-7 "
The current code supports only setting by MIDI. But this is not the solution for the future. I think I will add the option to create sets of global configurations for those parameters and you can link a voice towards them or can use one as a default (if there is no link from a voice). Do you have other ideas for this? I would be happy if I can get some (organizational) help for this!
Ah, yep sorry… coder slang…
Normally the MIDI-THRU is electrical linked to the MIDI-IN, so you have no latency of the MIDI signal and other (to the THRU connected) synths can also get the played MIDI data. On my board I have only a MIDI-IN and MIDI-OUT. In the current design there is no space for an additional MIDI-THRU - which is not a big problem to add. So you can create a “fake” MIDI-THRU by simply sending all incoming MIDI data to the MIDI-OUT. But this adds latency… This is currently not implemented, but because it is software, this could be done simply by adding an option to the (currently not existing!) user interface.
I will write down my next steps and put some eye candy into the next post.
Hi all (I hope the Zynthianiacs are forgiving me to write about a slightly non-Zynthian topic).
I used KiCAD5 to create a (modular) PCB for MicroDexed. Or in other words: It is a combined PCB for a Teensy-3. with an optional MIDI interface, USB-MIDI (only T3.6), two different sound card options (cheap or not) and so on.
I could place the tiny dexed inside my Roland A30 keyboard, I’m sure… If not, I could have an external tiny box…
The Roland A30 has 32 program buttons, each calling the 32 presets of the Dexed, that would be fine…
Maybe, with the 32preset-sysex sent to the teensy…there could be a second sysex file including 32 common/global parameters configurations, each one having the same number as the matching program… Or maybe we could add those parameters INTO the Dexed sysex ?? a set of global parameters for each Dexed preset… Then the Teensy would decode and send to Caeasa what is for Caesar… That means that each preset would come with common parameters which would have been decided once forever…
Either 2 sysex, one for the preset parameters, one for the keyboard config… Or an expanded sysex… (The 2nd version woould need to develop a software for that, a software which could add parameters to the Dexed sysex file… I won’t be the one able to do it)
That would be fine for my A30…
Other option is that we have a few configurations, for different uses… We would then have to call one preset, and one cofiguration, each time… That would mean that the same preset woould not be married forever to the same configuration…
That would be fine for my A30 too…
But how many configurations would we need to store ? 12 for the bend range, 12 for the bend step, 8X99 for the mod wheel (99 possible levels, X2X2X2 for each destination), + 8X99 for the foot pedal, etc…
Only a micro USB cable for powering and a USB-connector (connected to the flying cable in front) is missing. Very small…
I am planing to use a simple LCD (16*2) and one encoder as user interface. So sound and bank changing or simple programming (e.g. the link from voice to a global setup) can be done with this interface.
This would be my choice. But selecting a voice should be linked to a global preset, so only one PC (program change) is necessary for loading both.
Currently I am using a 4GB SD card. there are about 40.000 voices stored and it is much space left on this card . It’s only a problem of organization…
Yes. But there is no space for another DIN conector. I have several of such cases laying around:
The PCB is designed to fit into this case. The display and the encoder should be mounted in the front panel. This means that there is only room on the back for the remaining sockets. Alternatively you could convert the OUT jack to THRU by changing hardware and PCB. But then the MIDI-OUT is missing if you want to do other projects with the board.
Yes, right… I meant the link is after the opto-coupler.
As I wrote: this is more a problem of space on the board.
Of course not! But the MDA EP is also a really good sounding plugin - but currently just a test case (and not working yet).
Sincerely, I don’t see any use for the MIDI out…
I mean, as your project is now, it’s of no use at all…
But I fully understand that this project is supposed to evolve, so right, you do well thinking about the future…
So the only option is a software MIDIthru… Especially if it is in fact a MIDI merge, adding the incoming messages to the internal messages produced by the machine itself…
I don’t know how much latency this would add to the incoming MIDI messages, but I guess it can be acceptable…
We talk about the MDA ePiano, but what about SetBfree ?? I gues it needs to have controllers to be fully usable (I mean, no drawbars on the front of you project) but when one has an external midi keyboard with fadersn it’s ok…
And what about the effects ?? I suppose that a reverb should be a minimum…
I never had a real DX7… I had a DX9, a TX81Z… I have a PreenFM2, I use Caustic and mainly the FMsynth (basic, but still rather powerful) and of course, I use Dexed everyday… I never understood why people think that FM is so difficult to program… Probably the interface of the DX7 made it look more obscure than it really is…
I just ordered 10 PCBs as prototype. They should arrive around 10th September (if german customs authorities permit it). After arriving I have to test and write the user interface for LCD/encoder. So a full working version will take some time. I am also planing to distribute kits later - but this is a long way…
Until then everybody, which is interested in, is invited to build a MicroDexed by himself. Buy a Teensy-3.6 and an Audio-Adapter.
The MIDI circuit is described on a web page - or you use/buy a simple USB-socket as USB-MIDI-IN.
You may also need an SD card (2 or 4 GB are enough), format it as fat16 and create subdirectories for the banks (1,2,3,…9). In each directory you can put one 32-voice-SYSEX file.
The current user interface is a little bit crude:
A key of your MIDI keyboard is enabled as “MASTER-KEY” (for me it is C7). If you touch the MASTER_KEY followed by a select key (for me they start at C2) you can change volume, bank and voice:
Volume are the first 10 black keys started from C2
Voices are the 32 first white keys started from C2
Bank changes are the “upper” 10 black keys started from C4 (because the lower black keys are the volume)
This can be enabled/disabled and configured inside the file config.h and is currently only for testing purposes.
Currently not, but I am thinking of using this PCB as a base for self-programmed effects and instruments - Audio and MIDI. So IMHO the MIDI-OUT is more needed than a MIDI-THRU. (BTW: Have a look at the Teensy-Audio-library - for programmers this is a really cool thing!).
This can be calulated:
one_midi_event=3bytes=30bit (8bit plus 1 start- and 1 stop-bit)
The complete round-trip-time for an event is about 2ms (perhaps a little bit more - 1ms getting inside, 1ms sending out, plus some event handling). If you have a sound engine with much latency behind, 2ms of additional latency are bad. For me it is currently ok.
setBfree is an algothmic-monster I think the Teensy has not enough CPU power for this - especially not when generating much notes at the same time. Really heavy CPU power is generated especially by the whirl speaker! IMHO no way.
I forked setBfree (and called it setBfreak) and added the possibility to change the drawbars via LV2 events inside MOD-UI, so I can use the sliders on my MIDI-Master ro control the drawbars (via MIDI): works - BUT: the implementation of the values for the drawbars is based on discrete variables (integers) so you don’t have a slightly sound change but a harsh switching between the values. It can only be used when not playing. (I also have a Korg CX3 which has not this behaviour ).
Also tried and discarded: The Teensy-3.6 has to calculate up to 96 FM-OPs at a single sample… That are 4.233600 OP calculations a second plus the rest of the things a DX7 does (envelopes, pitchbend, …). I am getting much buffer underruns when adding only a simple eq… so this has to be done external . Perhaps with another Teensy (this is the place where my PCB can be used again as effect engine).
The current implementation has a latency of 4-5ms…
I want to buy a PreenFM, but currently it is not available at TubeOhm. And for editing a DX7, there is a very cool hardware available: DT-7.