Files - probonopd/MiniDexed GitHub Wiki
The following files affect the configuration of MiniDexed in various ways:
Note: The #
character is used to denote comments in MinfiDexed .ini
files, not the ;
character (details).
minidexed.ini
Sound device
# Sound device
SoundDevice=pwm
SampleRate=48000
#ChunkSize=256
DACI2CAddress=0
ChannelsSwapped=0
EngineType=1
QuadDAC8Chan=0
MasterVolume=64
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 defaultChunkSize
is best left at its defaultDACI2CAddress
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 channelsEngineType
sets the synthesizer engine being used. Possible values are1
(Modern (24-bit), default),2
(Mark I), and3
(OPL Series)QuadDAC8Chan
is an advanced option for the Raspberry Pi 5 only. It allows the use of four I2S DACs to give 8 independent mono audio channel outputs - one per tone generator (TG1 = DAC1 Left; TG2 = DAC1 Right; TG3 = DAC2 Left; etc). In this mode there are no effects and any pan or effect settings in performances are ignored. More details can be found here.MasterVolume
sets the overall volume of the synthesizer from 0 (muted) to 128 (loudest). The default is 64
MIDI
# MIDI
MIDIBaudRate=31250
# MIDIThru=umidi1,ttyS1
MIDIRXProgramChange=1
IgnoreAllNotesOff=0
MIDIAutoVoiceDumpOnPC=0
HeaderlessSysExVoices=0
ExpandPCAcrossBanks=1
PerformanceSelectChannel=0
MIDISystemCCVol=0
MIDISystemCCPan=0
MIDISystemCCDetune=0
MIDIGlobalExpression=0
# See https://github.com/probonopd/MiniDexed/wiki/Hardware#usb-gadget-mode
USBGadget=0
#USBGadgetPin=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 detailsMIDIRXProgramChange
determines whether MIDI Program Change messages are received. If set to1
, MIDI Program Change messages are received, if set to0
, they are ignoredMIDIAutoVoiceDumpOnPC
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 detailsHeaderlessSysExVoices
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) and Bank Selection (CC BANKSEL) messages should select individual voices/banks 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/banks 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. Also note thatMIDIRXProgramChange
has to be set to 1 for this to have any affect.MIDISystemCCVol
enables separate MIDI CC control of the volume of each Tone Generator. Ideal for use in performance mode when all TGs are responding to the same MIDI channel, this allows individual control of each TG via a series of 8 distinct MIDI CC messages - one per TG. There are 7 fixed maps of 8 MIDI CC messages that can be chosen for any of TG volume, pan or detune: 0=not used (default); 1-7 are defined as detailed on the MIDI pages here.MIDISystemCCPan
as above but for individual control of each Tone Generator's pan setting.MIDISystemCCDetuned
as above but for individual control of each Tone Generator's detuned setting.MIDIGlobalExpression
if non-zero causes MiniDexed to respond to MIDI CC 11 (Expression) on the specified channel (1-16) as a global setting across all tone generators. If omitted or set to 0, Expression is a per MIDI channel-only setting.
USB MIDI Settings.
USBGadget
determines how the USB ports are used. If set to1
then USB Gadget (device) Mode is enabled otherwise the system runs in USB Host mode. When used as a USB Gadget MiniDexed can be plugged into other devices, e.g. a PC. The normal mode is USB host which means other devices (e.g. keyboards, MIDI controllers) can be plugged into MiniDexed. USB Gadget mode is only supported on certain versions of the Raspberry Pi and has some important considerations for how the system is powered. IMPORTANT: Read this before enabling this option.USBGadgetPin
can be used whenUSBGadget=1
to allow hardware control over the USB mode. When the pin defined withUSBGadgetPin
is pulled LOW (andUSBGadget=1
), then USB gadget mode is enabled. If the pin is unconnected (i.e. left to be pulled HIGH) then USB host mode is assumed.
LCD
# LCD
LCDEnabled=1
Set this to 1
if a HD44780 or SSD1306 display is attached.
- If no LCD is attached,
LCDEnabled
can be set to0
HD44780 LCD
# HD44780 LCD
LCDPinEnable=17
LCDPinRegisterSelect=4
LCDPinReadWrite=0
LCDPinData4=22
LCDPinData5=23
LCDPinData6=24
LCDPinData7=25
LCDI2CAddress=0x00
Configures the pinout for the optional HD44780 LCD.
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, 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
ST7789 SPI Displays
# ST7789 LCD
# SPIBus=0 for any RPi (GPIO 10,11,8,7).
# Note: Leave blank (default) if no SPI device required.
# Select=0|1 for CE0 or CE1
# Data = GPIO pin number
# Optional: Reset, Backlight = GPIO pin numbers
# Rotation=0,90,180,270
# SmallFont=0 (default), 1
#
# For a 240 wide display set LCDColumns=15 with LCDRows=2
SPIBus=
ST7789Enabled=0
ST7789Data=
ST7789Select=
ST7789Reset=
ST7789Backlight=
ST7789Width=240
ST7789Height=240
ST7789Rotation=0
ST7789SmallFont=0
There is some support for ST7789 based graphical displays. On a Raspberry Pi the default SPI bus (0) uses GPIO 10 and 11. SPI GPIO pin 9 (MISO) is not required. One of the chip select pins (0 or 1) should be configured. For the default SPI bus (0) these are on GPIO 8 and 7.
On a Raspberry Pi 4 or above there are additional SPI bus and pin options (more here).
To fully control a ST7789 display also requires a data pin. Some displays also include options for a reset pin and pin to control the backlight.
The other options (width, height, rotation) should be set for the display. SmallFont can be enabled if the display is relatively low resolution, but for displays of 240 pixels or higher is not recommended.
For a 240 pixel display without SmallFonts, the display will only support 15 columns:
LCDColumns=15
LCDRows=2
Advanced SPI Options
The following advanced options should only be used if the display is not being recognised and it is known that an alternative SPI configuration is required:
SPIBus=
SPIMode=
SPIClocKHz=
SPIBus has already been mentioned. SPIMode will allow one of the four SPI modes to be configured: 0, 1, 2, 3. These related to the different combinations of clock polarity and clock phase. The default is mode 0 (more here). SPIClockKHz permits an alternative SPI clock speed to be set (in KHz). The default is 15000 (i.e. 15MHz).
Note that it is recommended that SPI is left inactive if no SPI display is configured (the default). Also note that given the wide range of ST7789 displays, there is no guarantees that any particular display will be supported, but feel free to add details of the configuration used to the "list of hardware" thread in the discussions (here) for any that are found to work.
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.
Optional GPIO Buttons for Program and Tone Generator selection
ButtonPinPgmUp=0
ButtonActionPgmUp=click
ButtonPinPgmDown=0
ButtonActionPgmDown=click
ButtonPinBankUp=0
ButtonActionBankUp=click
ButtonPinBankDown=0
ButtonActionBankDown=click
ButtonPinTGUp=0
ButtonActionTGUp=click
ButtonPinTGDown=0
ButtonActionTGDown=click
The above can be used to configure optional additional buttons for program up/down, bank up/down and tone generator up/down selection. Note that program and bank up/down will act on voices if PerformanceSelectChannel
is 0 and performances if configured for a MIDI channel.
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
MIDIButtonPgmUp=0
MIDIButtonPgmDown=0
MIDIButtonBankUp=0
MIDIButtonBankDown=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
# 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 pinsEncoderPinSwitch
sets the pin attached to the push button
Debug
# 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 MiniDexedProfileEnabled
can be set to1
to periodically print CPU usage information to an attached HDMI display
Advanced Options
These are more advanced options and do not appear by default in minidexed.ini.
ToneGenerators=8
Polyphony=16
On a Raspberry Pi 4 or above, the number of Tone Generators can be either 8 or 16 - the default is 8. For the Raspberry Pi V1/Zero, the number of Tone Generators is fixed at 1 - i.e. a single Tone Generator. Pi V2, V3 and Zero 2 are fixed at 8 Tone Generators.
The polyphony per Tone Generator can be adjusted for all Raspberry Pi versions. The following are the default and maximum settings:
- Pi V1 (inc Zero 1/W): default 8, max 8.
- Pi V2/V3 (inc Zero 2): default 16, max 16.
- Pi V4 (inc 400): default 24, max 32.
- Pi V5: default 32, max 32.
Adjusting these settings can lead to performance issues. If the sound starts to glitch or crackle with certain voices or performances then try reducing the amount of polyphony.
config.txt
For most cases the Raspberry Pi config.txt configuration shouldn't need to be changed, but it can be useful in some cases.
The Pimoroni Audio boards, for example, have an "audio enable" GPIO pin which isn't directly supported by MiniDexed, but it can be pre-enabled automatically by the Raspberry Pi firmware by adding the following to config.txt.
gpio=25=op,dh
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).
.syx
files)
Voice data (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 parts corresponds to a tone generator (TG1 - TG8) which can be parameterized. All settings that can be changed from the MiniDexed menu 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 and 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" folder:
performance/000002_FirstPerf.ini
performance/000003_NextPerf.ini
...
performance/000128_LastPerf.ini
The file name has to have the following format: XXXXXX_PerfName.ini, where XXXXXX is the performance number (000001 to 000128) and PerfName can't exceed 14 characters.
Note that performance 1 refers to the original performance.ini file stored in the root directory, so additional performances will start from 000002.
Performances can also be stored in additional banks as follows:
performance/002_FirstBank/000001_Bank2FirstPerf.ini
performance/002_FirstBank/000002_Bank2NextPerf.ini
performance/003_SecondBank/000001_Bank3FirstPerf.ini
performance/003_SecondBank/000128_Bank3LastPerf.ini
performance/128_LastBank/000128_LastBankLastPerf.ini
The bank name format is BBB_Bankname.ini, where BBB is a bank number between 002-128. The first bank (001) refers to the performance files in the performance/ directory itself so cannot be used for an additional bank.
When MiniDexed is configured so that MIDI Program Change messages will select performances, the performance number (XXXXXX above) corresponds to the MIDI Program Change number (1..128) and the bank number (BBB above) corresponds to the MIDI BANKSEL message (1-128). Note that only the BANKSEL LSB is actually significant, but the MIDI specification states that both MSB and LSB should be transmitted. MiniDexed will change banks when it receives the LSB message, pairing it with the last received MSB.
Also note as detailed in the MIDI specification, the 1..128 performance and bank numbers will be converted to the MIDI 0..127 range "on the wire" in MIDI messages.
MiniDexed supports up to 128 banks each containing 128 performances, although as previously noted, Bank 001/Perf 000001 is reserved for the default performance.ini file.
All performance files have the following format and parameters, with the first section repeated for each of the 8 tone generators and then an additional effects section at the end.
As mentioned above, BankNumber and VoiceNumber are only significant if VoiceData is empty, but VoiceData will be automatically populated every time a performance is saved.
TG 1-8
BankNumber#=0 # 0 .. 127, points to the bank from /sysex/voices/ (in MIDI 0..127 format at present)
VoiceNumber#=1 # 1 .. 32, points to voice from the bank
MIDIChannel#=1 # 1 .. 16, 0: off, >16: omni mode
Volume#=100 # 0 .. 127, volume of the Voice
Pan#=64 # 0 .. 127, 64=centre; 0=left; 127=right
Detune#=0 # -99 .. 99, 0=in tune
Cutoff#=99 # 0 .. 99, Filter setting
Resonance#=0 # 0 .. 99,
NoteLimitLow#=0 # 0 .. 127, C-2 .. G8, 60 for the middle C3
NoteLimitHigh#=127 # 0 .. 127, C-2 .. G8,
NoteShift#=0 # -24 .. 24, each value is detuned by one semitone
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
MiniDexed Performance File Parameter Specification
Each performance file contains up to 8 Tone Generator (TG) sections, each with the following parameters, plus a global effects section at the end.
Tone Generator Parameters (per TG, 1–8)
Parameter | Type | Bytes | Min | Max | Default | Notes |
---|---|---|---|---|---|---|
BankNumber | uint8 | 1 | 0 | 127 | 0 | Voice bank number (used if VoiceData is empty) |
VoiceNumber | uint8 | 1 | 1 | 32 | 1 | 1-based in file, 0-based internal (used if VoiceData empty) |
MIDIChannel | uint8 | 1 | 0 | 255 | 0 | 0=off, 1–16=channel, >16=omni |
Volume | uint8 | 1 | 0 | 127 | 100 | MIDI volume |
Pan | uint8 | 1 | 0 | 127 | 64 | MIDI pan (center=64) |
Detune | int8 | 1 | -99 | 99 | 0 | |
Cutoff | uint8 | 1 | 0 | 99 | 99 | Filter cutoff |
Resonance | uint8 | 1 | 0 | 99 | 0 | Filter resonance |
NoteLimitLow | uint8 | 1 | 0 | 127 | 0 | Lowest MIDI note |
NoteLimitHigh | uint8 | 1 | 0 | 127 | 127 | Highest MIDI note |
NoteShift | int8 | 1 | -24 | 24 | 0 | Note transposition |
ReverbSend | uint8 | 1 | 0 | 99 | 50 | Reverb send amount |
PitchBendRange | uint8 | 1 | 0 | 12 | 2 | Pitch bend range (semitones) |
PitchBendStep | uint8 | 1 | 0 | 12 | 0 | Pitch bend step (semitones) |
PortamentoMode | uint8 | 1 | 0 | 1 | 0 | 0=off, 1=on |
PortamentoGlissando | uint8 | 1 | 0 | 1 | 0 | 0=off, 1=on |
PortamentoTime | uint8 | 1 | 0 | 99 | 0 | Portamento time |
VoiceData | string | 156 | — | — | "" | 156 bytes, space-separated hex, takes precedence if present |
MonoMode | bool | 1 | 0 | 1 | 0 | 0=poly, 1=mono |
ModulationWheelRange | uint8 | 1 | 0 | 99 | 99 | |
ModulationWheelTarget | uint8 | 1 | 0 | 7 | 1 | |
FootControlRange | uint8 | 1 | 0 | 99 | 99 | |
FootControlTarget | uint8 | 1 | 0 | 7 | 0 | |
BreathControlRange | uint8 | 1 | 0 | 99 | 99 | |
BreathControlTarget | uint8 | 1 | 0 | 7 | 0 | |
AftertouchRange | uint8 | 1 | 0 | 99 | 99 | |
AftertouchTarget | uint8 | 1 | 0 | 7 | 0 |
Global Effects Parameters
Parameter | Type | Bytes | Min | Max | Default | Notes |
---|---|---|---|---|---|---|
CompressorEnable | bool | 1 | 0 | 1 | 1 | 0=off, 1=on |
ReverbEnable | bool | 1 | 0 | 1 | 1 | 0=off, 1=on |
ReverbSize | uint8 | 1 | 0 | 99 | 70 | |
ReverbHighDamp | uint8 | 1 | 0 | 99 | 50 | |
ReverbLowDamp | uint8 | 1 | 0 | 99 | 50 | |
ReverbLowPass | uint8 | 1 | 0 | 99 | 30 | |
ReverbDiffusion | uint8 | 1 | 0 | 99 | 65 | |
ReverbLevel | uint8 | 1 | 0 | 99 | 99 |
Notes:
- All parameters are stored as key=value pairs in the INI file.
- Each TG section is repeated for TG1–TG8.
- If
VoiceData
is present (non-empty),BankNumber
andVoiceNumber
are ignored for that TG. - All values are decimal except
VoiceData
, which is a space-separated hex string (156 bytes). - Defaults are used if a parameter is missing from the file.