-
Notifications
You must be signed in to change notification settings - Fork 86
Files
# Sound device
SoundDevice=pwm
SampleRate=48000
#ChunkSize=256
DACI2CAddress=0
ChannelsSwapped=0
EngineType=1
Configures the sound device.
-
SoundDevice
can bepwm
(headphone jack, default, worst quality),hdmi
(HDMI output, better quality), ori2s
(i2s DAC, best quality). You need to choose the one that matches your hardware setup. -
SampleRate
is best left at its default -
ChunkSize
is best left at its default -
DACI2CAddress
can be0
or the i2c address of your i2s DAC (some DACs are using i2c in addition to i2s for control). Leaving it at0
will try to autodetect well-known DACs. Note that when entering an i2c address, you can use a decimal number or a hexadecimal number prefixed with0x
-
ChannelsSwapped
can be set to1
if you encounter the left and right stereo channel being swapped. Some hardware is (wrongly) swapping stereo channels -
EngineType
sets the synthesizer engine being used. Possible values are1
(Modern (24-bit), default),2
(Mark I), and3
(OPL Series)
# MIDI
MIDIBaudRate=31250
# MIDIThru=umidi1,ttyS1
MIDIRXProgramChange=1
IgnoreAllNotesOff=0
MIDIAutoVoiceDumpOnPC=1
HeaderlessSysExVoices=0
ExpandPCAcrossBanks=1
PerformanceSelectChannel=0
Configures MIDI settings.
-
MIDIBaudRate
determines the speed of the MIDI bus. Should normally be left at31250
-
MIDIThru
can be used to forward MIDI messages which MiniDexed is receiving, e.g., from a MIDI controller such as a keyboard, to another device attached to MiniDexed, such as a computer or tablet. Please see MIDI-Thru for details -
MIDIRXProgramChange
determines whether MIDI Program Change messages are received. If set to1
, MIDI Program Change messages are received, if set to0
, they are ignored -
MIDIAutoVoiceDumpOnPC
determines whether MIDI sysex dumps are sent when the program is changed. This can be useful, e.g., when MiniDexed is connected to a computer with Dexed or another tool that allows voices to be edited, as it provides a means to keep the tool's display in sync with what is happening on MiniDexed. But it isn't desirable in all circumstances as it does result in extra MIDI data being sent out to all MIDI OUT interfaces every time a voice is selected. If set to1
, MIDI sysex dumps are sent, if set to0
, they are not sent. Please see #386 for details -
HeaderlessSysExVoices
instructs MiniDexed to accept "headerless" SysEx voice bank files. Headerless files are 4096 bytes long, compared to the 4104 bytes of "headered" files. Some voice banks from the Internet have a mix of headered and headerless. The downside of accepting headerless files is that no validation is possible on the data and loading of voices can take longer on startup. An alternative to accepting headerless files is to use an external utility to pre-process SysEx files to ensure they are all in a format that MiniDexed can read. -
ExpandPCAcrossBanks
instructs MiniDexed to accept Program Change message values 0..127 and map them onto four consecutive banks of voices. MiniDexed assumes 32 voices per bank. The original DX7 accepted Program Change values of 0..31 only, but the DX7II accepted 0..63 for internal memory voices and 64..127 for the voices stored on the external cartridge. Note, if this is enabled then PC values are mapped onto the current selected bank and the next three consecutive banks, even if they are empty or not loaded (so not selectable via the MiniDexed UI menus). If this is disabled then PC messages using values greater than 31 are ignored. -
PerformanceSelectChannel
determines if MIDI Program Change (PC) messages should select individual voices within a tone generator or act at the system level and select performances. This mirrors the similarly named control on a DX7II. Setting this to 0 (the default) means PC messages select voices on any tone generators set to the receiving MIDI channel. Setting this to a MIDI channel (1 to 16) means PC messages on that channel will select performances. Setting this to a value >16 selects "Omni" mode so any PC messages received select performances. Note when in performance mode, no PC messages will be passed on to tone generators. Note thatMIDIRXProgramChange
has to be set to 1 for this to have any affect.
# HD44780 LCD
LCDEnabled=1
LCDPinEnable=17
LCDPinRegisterSelect=4
LCDPinReadWrite=0
LCDPinData4=22
LCDPinData5=23
LCDPinData6=24
LCDPinData7=25
LCDI2CAddress=0x00
Configures the pinout for the optional HD44780 LCD.
- If no HD44780 LCD is attached,
LCDEnabled
can be set to0
To use a HD44780 device with i2c (requiring only 4 wires instead of many), set
LCDEnabled=1
LCDI2CAddress=0x27
In this case, all other values in this section will be ignored.
To use a HD44780 device without i2c (requiring more wires but faster), set
LCDI2CAddress=0x00
In this case, all other values in this section will be used.
# SSD1306 LCD
# For a 128x32 display, set LCDColumns=20; LCDRows=2
# For a 128x64 display, set LCDColumns=20; LCDRows=4
SSD1306LCDI2CAddress=0x0
SSD1306LCDWidth=128
SSD1306LCDHeight=32
SSD1306LCDRotate=0
SSD1306LCDMirror=0
# Default is 16x2 display (e.g. HD44780)
LCDColumns=16
LCDRows=2
Configures the optional SSD1306 based OLED. 128x32 and 128x64 display modules with i2c can be used, but currently only 128x32 pixels are used for text mode; contributions to graphically display the selected alogrithm would be very welcome.
- If you use a SSD1306 based OLED, set
SSD1306LCDI2CAddress
to the i2c address of the particular module, usually0x3c
- For a 128x32 display, set
LCDColumns=20
andLCDRows=2
- For a 128x64 display, set
LCDColumns=20
andLCDRows=4
If you use a SSD1306 based display, you can rotate and mirror the display in the following ways:
- To rotate the display by 180 degrees, set
SSD1306LCDRotate=1
- To mirror the display along the short axis, set
SSD1306LCDMirror=1
- To mirror the display along the long axis, set both
SSD1306LCDMirror=1
andSSD1306LCDRotate=1
# GPIO Button Navigation
# Any buttons set to 0 will be ignored
ButtonPinPrev=0
ButtonActionPrev=
ButtonPinNext=0
ButtonActionNext=
ButtonPinBack=11
ButtonActionBack=longpress
ButtonPinSelect=11
ButtonActionSelect=click
ButtonPinHome=11
ButtonActionHome=doubleclick
ButtonPinShortcut=11
# (Shortcut doesn't have an action)
This section configures which pins are used for buttons, and which actions are triggered by which button actions (click, double-click, long-press). By default, the only button being used is the button that is built into the rotary encoder. Pins not used for buttons are set to 0
(disabled). ButtonPinShortcut
defines the pin that is used for rotating the rotary encoder knob while the button is pressed. Probably you will want the button that is built into the rotary encoder to be used for shortcuts.
Optional GPIO Buttons for Program and Tone Generator selection
ButtonPinPgmUp=0
ButtonActionPgmUp=click
ButtonPinPgmDown=0
ButtonActionPgmDown=click
ButtonPinTGUp=0
ButtonActionTGUp=click
ButtonPinTGDown=0
ButtonActionTGDown=click
The above can be used to configure optional additional buttons for program up/down and tone generator up/down selection. Note that program up/down will act on voices if PerformanceSelectChannel
is 0 and performances if configured for a MIDI channel.
# Timeouts in milliseconds for double click and long press
DoubleClickTimeout=400
LongPressTimeout=400
Defines the timing for double-click and long-press actions. NOTE: For logical reasons, LongPressTimeout
cannot be lower than DoubleClickTimeout
(if it is, then the higher value of the two will be used).
This section allows you to use physical buttons on your MIDI controller (like a MIDI keyboard) as the buttons for MiniDexed, instead of or in addition to a rotary encoder and/or GPIO buttons.
# MIDI Button Navigation
# Specify MIDI CC to act as a button
# NB: Off < 64 < ON
# CC channel: 0=OFF; 1-16 MIDI Ch; >16 Omni
MIDIButtonCh=17
MIDIButtonNotes=0
MIDIButtonPrev=00
MIDIButtonNext=02
MIDIButtonBack=03
MIDIButtonSelect=04
MIDIButtonHome=06
MIDIButtonPgmUp=0
MIDIButtonPgmDown=0
MIDIButtonTGUp=0
MIDIButtonTGDown=0
It is possible to emulate any of the UI buttons over MIDI either using MIDI Control Change (CC) messages or Note messages. This section configures which MIDI Control Change (CC) or Note messages to listen to for each button action.
NOTE: Need to set MIDIButtonCh=17
(Omni mode) if MiniDexed should react to these buttons when the MIDI controller is set to any MIDI channel. Also need to define the number of the Control Change message the respective button on the MIDI controller is sending.
NOTE: The MIDI controller may need to be configured so that it does not "Toggle" but "Trigger/Release". Please refer to the documentation of your MIDI controller. (This has been tested on the Nektar Impact LX61+.)
It is possible to use NoteOn/NoteOff messages as "MIDI buttons" too. This may be useful if your MIDI controller has no other buttons and you need to use some white/black keys as buttons. Turn this functionality on with MIDIButtonNotes=1
, then set the MIDIButton
values to MIDI note numbers - e.g. 60
, 62
, 64
, 65
, 67
for C4-G4.
# KY-040 Rotary Encoder
EncoderEnabled=1
EncoderPinClock=10
EncoderPinData=9
(The key EncoderPinSwitch
is no longer used as of June 15, 2022, and can be removed.)
Configures the pinout for the optional KY-040 Rotary Encoder.
-
EncoderEnabled
can be set to0
if no encoder is attached. -
EncoderPinClock
sets the pin attached to one of the Rotary Encoder data pins ("clock" is a bit misleading but Rotary Encoders are labeled this way) -
EncoderPinData
sets the pin attached to the other of the Rotary Encoder data pins -
EncoderPinSwitch
sets the pin attached to the push button
# Debug
MIDIDumpEnabled=0
ProfileEnabled=0
Configures output useful for debugging.
-
MIDIDumpEnabled
can be set to1
to print incoming MIDI messages to an attached HDMI display. This can be useful to see what MIDI data an attached device is sending to MiniDexed -
ProfileEnabled can be set to
1` to periodically print CPU usage information to an attached HDMI display
Some MIDI keyboards need usbspeed=full
to be set in this file, or else you will get missed MIDI events. Note that when usbspeed=full
is set, PC keyboards may no longer work.
Some MIDI controllers attempt to set up other USB endpoints in addition to the audio/MIDIStreaming endpoint. In the event log (on the HDMI display) if you see messages such as the following, then try adding usbignore=int3-0-0
, or whatever the first failing USB interface is for your keyboard. Don't do this for int1-3-0, that is the MIDI interface, (and also note that the message "function is not supported" is not a failure and can be ignored):
usbdev1-1: Interface int3-0-0 found
usbdev1-1: Cannot get HID report descriptor
usbdev1-1: Interface int1-3-0 found
usbdev1-1: Using device/interface int1-3-0
xhciep: Transfer timed out
usbdev1-1: Cannot set configuration (1)
usbhub: Port 1: Cannot configure device
This also seems to be the case for home-built MIDI Controllers based on CircuitPython especially if used with MiniDexed on a Raspberry Pi 4 (for details, see https://github.com/probonopd/MiniDexed/discussions/197). An alternative solution is to disable the HID int3-0-0 interface on the CircuitPython device (as described in this article) by creating a boot.py file that contains the following:
# CircuitPython boot.py file
import usb_hid, usb_midi
usb_hid.disable()
usb_midi.enable()
Some Roland MIDI devices interpret the "All Notes Off" MIDI command differently. Set IgnoreAllNotesOff=1
in minidexed.ini
as a workaround (more information).
Voice data (the contents of cartridges) can be put as .syx
files into the sysex/voice/
directory on the SD card. This isn't part of the release, so has to be created separately.
The files have to be numbered and named in this way:
sysex/voice/000001_filename.syx
sysex/voice/000002_filename.syx
...
The number (000001, 000002) corresponds to the "bank" number (in decimal) used when selecting voices for the tone generators via the menu. "filename" is used as the name for the voice bank. Bank numbers go from 00001 to 16384, giving a total of 16384 banks supported. Note that loading more than a few hundred banks from the same directory will be slow, so it is recommended that subdirectories are used to categorise banks and speed up loading.
Any errors in reading voice data will be printed to an attached display, so if there are voices missing, or no voices at all, check for errors such as "Directory sysex/voice not found", "Invalid filename format" or "Invalid size or format" on startup.
There is a script getsysex.sh
that can download some .syx
files and place them into the sysex/voice
directory with working names for you automatically.
Note: At present there is no way to save voice parameters back to specific banks, but the "live" voice parameter settings can be saved as part of a "performance" (see below).
Voice banks should be in the VMEM (compressed) format and should be in banks of 32 voices each, each voice being 128 bytes in size. The system will support sysex files with a header (4104 bytes in size) and optionally (if HeaderlessSysExVoices=1) files without a header (4096 bytes in size). Files with headers are recommended as MiniDexed is then able to confirm they are Yamaha voice files on loading.
MiniDexed is 8-parts multitimbral and each of these tone generators (TG1 - TG8) can be parameterized. All settings that can be made on the MiniDexed can be saved in a performance.ini file. This includes voice, bank (although see next comment), PAN, detune, volume, cutoff, MIDI channel and so on.
Any changes made under "Edit Voice" are also saved in Performance.ini but note that these changes override any bank or voice numbers stored.
In fact when a performance is saved all currently "live" voice data, whether an edited voice or a voice loaded from a bank, will always be written out to the performance.ini file and when loaded back in it will always take precedence over any bank or voice number specified in the file. The consequence of this is that if a performance.ini file is edited by hand (i.e. away from MiniDexed directly from the SD card) and the bank and voice numbers changed, then the VoiceDataX lines will have to be cleared for the bank and voice settings to take effect. The VoiceData will be recreated from the "live" voice whenever the performance is next saved.
The default performance.ini file is located in root and will load while MiniDexed starts up. Switchable performances files must be saved in a "performance" named folder.
performance/000000_Perf000000.ini
performance/000001_Perf000001.ini
...
The format file name must be: XXXXXX_filename.ini, XXXXXX is the incremental index and Name can't exceed 14 characters. Example: 000001_Perf000001.ini.
#BankNumber#=0 # 0 .. 127
points to the bank from /sysex/voices/
#VoiceNumber#=1 # 1 .. 32
points to voice from the bank
#MIDIChannel#=1 # 1 .. 16, 0: off, >16: omni mode
#Volume#=100 # 0 .. 127
#Pan#=64 # 0 .. 127
64=centre; 0=left; 127=right
#Detune#=0 # -99 .. 99
0=in tune
#Cutoff#=99 # 0 .. 99
#Resonance#=0 # 0 .. 99
#NoteLimitLow#=0 # 0 .. 127, C-2 .. G8
#NoteLimitHigh#=127 # 0 .. 127, C-2 .. G8
#NoteShift#=0 # -24 .. 24
#ReverbSend#=0 # 0 .. 99
#PitchBendRange#=2 # 0 .. 12
#PitchBendStep#=0 # 0 .. 12
#PortamentoMode#=0 # 0 .. 1
#PortamentoGlissando#=0 # 0 .. 1
#PortamentoTime#=0 # 0 .. 99
#VoiceData#= # space separated hex numbers of 156 voice parameters. Example: 5F 1D 14 32 63 [....] 20 55
#MonoMode#=0 # 0-off .. 1-On
#ModulationWheelRange#=99 # 0..99
#ModulationWheelTarget#=1 # 0..7
#FootControlRange#=99 # 0..99
#FootControlTarget#=0 # 0..7
#BreathControlRange#=99 # 0..99
#BreathControlTarget#=0 # 0..7
#AftertouchRange#=99 # 0..99
#AftertouchTarget#=0 # 0..7
# Effects
#CompressorEnable=1 # 0: off, 1: on
#ReverbEnable=1 # 0: off, 1: on
#ReverbSize=70 # 0 .. 99
#ReverbHighDamp=50 # 0 .. 99
#ReverbLowDamp=50 # 0 .. 99
#ReverbLowPass=30 # 0 .. 99
#ReverbDiffusion=65 # 0 .. 99
#ReverbLevel=80 # 0 .. 99