Midi messages

Page updated with firmware 2.03.

This page explains what midi messages the preenfm2 can send or respond to.

You can select in the menu settings what midi messages you want the preenfm to respond to (none, CC, NRPN, both) and what midi messages you want it to send on its midi output jack when you modify a parameter (none, CC, NRPN).
If Usb midi is set to « In/Out » then the output will also be sent to your USB midi connection.

The preenfm2 responds to several well known midi messages such as :

  • Hold Pedal (CC#64), do not listen anymore to note off.
  • Keyboard pitch wheel, global after touch and modwheel (CC#1) can be routed in matrix sources.
  • Realtime midi clock (time clock, start, stop, continue)
  • Program change
  • Bank select (CC#0) and Bank Select LSB (#32)
  • Bank select=0 =>  BankLSB=Preenfm bank number
  • Bank select=1 => BankLSB=Combo number
  • Bank select=2 => BankLSB=DX7 bank 0->127
  • Bank select=3 => BankLSB=DX7 bank 128->255
  • Onmi On (CC#124) and Omni Off (CC#125). Allow an instrument to listen to all midi channel.
  • All sounds off (CC#120) mute immediatly all voices
  • All note off (CC#123) send note off to all voices. Release stage will be heard.

Sysex can be used to store and restore single presets. This sysex is not really usable outside the preenfm2. It contains a memory dump of the the preenfm2 memory. Set of 32 bits floating point numbers split in 7bits messages.

The preenfm2 will  flush all its parameters with NRPN midi messages if it recevies a NRPN with ParamLSB = 127 and ParamMSB = 127. Can be used by editors to read the preenfm2 current preset.

The following table shows with more details the parameters, their NRPN param number and values as well as the midi control change if available.

Parameter MSB LSB  Value max Comment CC
Algorithm number 0 0 28 16
Velocity 0 1 16 the higher the more the velocity of a note will impact the volume opf the note
Voice 0 2 16 number of voices for the current instrument
Glide 0 3 10 Valid only if voices
IM <n> 0 4 + (n-1)*2 1600 Value of the modulation index #n (1 <= n <= 5) The real value is the nrpn one divided by 100 17 + (n-1)
IM <n> velocity 0 5 + (n-1)*2 1600 the modulation index #n (1 <= n <= 5) that depends on velocity.
Mix <n> 0 16 + (n-1)*2 100 Value of the mix #n (1 <= n <= 6 for NRPN and <=4 for CC) 22 + (n-1) *2
Pan <n> 0 17 + (n-1)*2 200 Value of the pan #n. 0 = Pan Left / 100 = center / 200 = pan right. Only the 4 first Mix are available with CC (1 <= n <= 6 for NRPN and <=4 for CC) 23 + (n-1) *2
Arpeggiator Clock 0 28 2 0=Off. 1 = internal. 2 = external
Arpeggiator BPM 0 29
Arpeggiator Direction 0 30
Arpeggiator Octave 0 31
Arpeggiator Pattern 0 32
Arpeggiator Division 0 33
Arpeggiator Duration 0 34
Arp. Latch 0 35
Filter Type 0 40 4 0 = Off / 1 = Mix / 2 = LP / 3 = HP / 4 = Bass 70
Filter Param1 0 41 100 71
Filter Param2 0 42 100 72
Filter Gain 0 43 200 73
Op<n> Shape 0 44 + (n-1)*4 7 1 <= n <= 6. n is the operator number.
Op<n> Freq Type 0 45 + (n-1)*4 1
Op<n> Frequency 0 46 + (n-1)*4 50 + (n-1)
Op<n> Fine tune 0 47 + (n-1)*4
Op<n> env Attack 0 68 + (n-1)*8 1600 74 + (n-1)
Op<n> env Attack level 0 69 + (n-1)*8 100
Op<n> env Decay 0 70 + (n-1)*8 1600
Op<n> env Decay level 0 71 + (n-1)*8 100
Op<n> env Sustain 0 72 + (n-1)*8 1600
Op<n> env Sustain level 0 73 + (n-1)*8 100
Op<n> env Release 0 74 + (n-1)*8 1600 82 + (n-1)
Op<n> env Release level 0 75 + (n-1)*8 100
ALL Op env Attack Modify the Attack of the 6 operators at the same time (CC only) 80
ALL Op env Release Modify the Release of the 6 operators at the same time (CC only) 81
Matrix row<n> Source 0 116 + (n -1)*4 1 <= n <=3
Matrix row<n> Multiplier 0 117 + (n -1)*4 2000 Value = 0 mutliplier = -10.0; Value = 1000 mutliplier = 0.0; Value = 2000 mutliplier = 10.0. Only 4 first matrix rows are available with CC. 46 + (n-1)
Matrix row<n> Destination 0 118 + (n -1)*4
Matrix row<n> Source 1 (n -4)*4 4 <= n <= 12. NRPN value is simply the following of the previous one. Matrix row4 Source param value = 128. Which is MSB= 1 and LSB =0.
Matrix row<n> Multiplier 1 1 + (n -4)*4 2000 Value = 0 mutliplier = -10.0; Value = 1000 mutliplier = 0.0; Value = 2000 mutliplier = 10.0
Matrix row<n> Destination 1 2 + (n -4)*4
Performance param<n> 1 36 + (n-1) n is the parameter number : 1 <= n <= 3 115 + (n-1)
LFO <n> Shape 1 40 + (n-1)*4 164 1 <= n <= 3. Value : 0 = sin / 1 = Ramp / 2 = saw / 3 = square / 4 = rand 94 + (n-1)
LFO <n> Frequency 1 41 + (n-1)*4 56 + (n-1)
LFO <n> Bias 1 42 + (n-1)*4 91 + (n-1)
LFO <n> Key sync 1 43 + (n-1)*4
LFO <n> Phase 1 68 + (n-1) 88 + (n-1)
Free Env1 Attack 1 52
Free Env1 Decay 1 53
Free Env1 Sustain 1 54
Free Env1 Release 1 55
Free Env2 Silence 1 56 60
Free Env2 Attack 1 57
Free Env2 Decay 1 58
Free Env2 Loop 1 59
Step Seq<n> BPM 1 60 + (n-1)*4 n can be 1 or 2.
Step Seq<n> Gate 1 61 + (n-1)*4 61 + (n-1)
Letter <n> of preset name 1 100 + n You can send a ASCII value to change the letter <n> of the preset name
Step Seq1 Step<n> 2 n 16 0<=n<=16.
Step Seq2 Step<n> 3 n 16 0<=n<=16.