Skip to content
Peter edited this page Jul 10, 2023 · 61 revisions

minidexed.ini

Sound device

# Sound device
SoundDevice=pwm
SampleRate=48000
#ChunkSize=256
DACI2CAddress=0
ChannelsSwapped=0

Configures the sound device.

  • SoundDevice can be pwm (headphone jack, default, worst quality), hdmi (HDMI output, better quality), or i2s (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 be 0 or the i2c address of your i2s DAC (some DACs are using i2c in addition to i2s for control). Leaving it at 0 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 with 0x
  • ChannelsSwapped can be set to 1 if you encounter the left and right stereo channel being swapped. Some hardware is (wrongly) swapping stereo channels

MIDI

# MIDI
MIDIBaudRate=31250
# MIDIThru=umidi1,ttyS1
MIDIRXProgramChange=1
IgnoreAllNotesOff=0
MIDIAutoVoiceDumpOnPC=1
HeaderlessSysExVoices=0
ExpandPCAcrossBanks=1

Configures MIDI settings.

  • MIDIBaudRate determines the speed of the MIDI bus. Should normally be left at 31250
  • 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 to 1, MIDI Program Change messages are received, if set to 0, 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 to 1, MIDI sysex dumps are sent, if set to 0, 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.

HD44780 LCD

# 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 to 0

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 OLED

# 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, usually 0x3c
  • For a 128x32 display, set LCDColumns=20 and LCDRows=2
  • For a 128x64 display, set LCDColumns=20 and LCDRows=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 and SSD1306LCDRotate=1

Buttons

# 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.

Timeouts

# 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).

MIDI Button Navigation

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

This section configures which MIDI Control Change (CC) message to listen to.

NOTE: Need to set MIDIButtonCh=17 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

# 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 to 0 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

# Debug
MIDIDumpEnabled=0
ProfileEnabled=0

Configures output useful for debugging.

  • MIDIDumpEnabled can be set to 1 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

cmdline.txt

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()

Workaround for Roland MIDI devices

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 (.syx files)

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.

performance.ini

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.

Clone this wiki locally