Command Line Options for MIDI Transformation Example with Midicable 2.51: -------------------------------------------------------------------------------- Convert Controller to start-stop: Ctrl #5,Chn1, 64..127 = start, 0..63=stop TR1=FFFF40,B00540,FA,1 (start) TR2=FFFF40,B00500,FC,1 (stop) Convert a controller to NRPN (#1,all channels) (eg. AWE32 cutoff) TR1=F0FF,B001,00637F,03 ( add NRPN MSB-127 ) TR2=F0FF,B001,006215,03 ( add NRPN LSB-21 - AWE32 Filter Cutoff) TR3=F0FF,B001,000600,03 ( add Data MSB 0 ) TR4=F0FF,B001,002680,01 ( convert Ctrl to Data LSB ) Convert Note Velocity to additional Pitchbend (funny "detuned Piano") TR1=F000FF,900000,808040,01 (convert Note-On velo[0] to NoteOff event) TR2=F0,90,E00080,03 (add pitchbend w. velocity to ) Convert Note Velocity to (additional) channel Aftertouch. All Channels TR1=F000FF,900000,808040,01 (convert Note-On velo[0] to NoteOff event) TR2=F0,90,A081,03 (add channel pressure w/ Data2) Convert Note Velocity to Aftertouch and fix Note Velo to 127 TR1=F000FF,900000,808040,01 (convert Note-On velo[0] to NoteOff event) TR2=F0,90,A081,03 (add channel pressure w/ Data2) TR3=F0,90,00807F,01 (for all NoteOn set Data2 to 127 Fix Note Velocity to 127 TR1=F000FF,900000,808040,01 (convert Note-On velo[0] to NoteOff event) TR2=F0,90,00807F,01 (for all NoteOn set Data2 to 127 Convert Active Sense to Bass Drum, MidiClk to HiHat TR1=FF,FE,99247F,03 TR2=FF,F8,992C40,03 Reference: TRx=MASK,TRIGGER,VALUE,FUNC x = 1..4 MASK up to 3 bytes (and a 4th obsolete byte) TRIGGER up to 3 bytes (and a 4th obsolete byte) This 2 patterns are used to compare the message: if ( (Message And MASK ) = TRIGGER ) then DoTransf(....) the AND is a bitwise AND between the two 32bit values. MASK and TRIGGER must be written in MOTOROLA Notation, This has the advantage, that 90 and 9000 and 900000 is the same. If this camparisom is true, then the Result is setted to VALUE, but... if first VALUE byte (status byte) is invalid (i,e, < $80) then the message is not changed. If channel is not masked, then it is unchanged. if VALUE data bytes are invalid (Hi-bit set, $80), the original data is kept. $81 uses the other data byte (data1<->data2). A value of 008080 means unchanged message. Cryptic, but it is. Some Patterns: to match Controller on all channels, use TR1=F0,B0,... Some Warnings: You cannot split Notes by velocity into different Midi channels - The NoteOff-events will get lost ! -------------------------------------------------------------------------------- Functions: 1 = Convert 2 = Remove 3 = Add Velocity to 127: TR1=F000FF00,90000000,80804000,01 TR2=F0000000,90000000,00807F00,01 Velocity 0 to Note Off: TR1=F000FF00,90000000,80804000,01 Controller #2 to AWE Cutoff: TR1=F0FF0000,B0020000,00637F00,03 TR2=F0FF0000,B0020000,00621500,03 TR3=F0FF0000,B0020000,00060000,03 TR4=F0FF0000,B0010000,00268000,01 Controller #3 to AWE Resonance: TR1=F0FF0000,B0030000,00637F00,03 TR2=F0FF0000,B0030000,00621600,03 TR3=F0FF0000,B0030000,00060000,03 TR4=F0FF0000,B0030000,00268000,01 C6 to Modulation: TR1=F0FF0000,90600000,B0018000,01 B5 to AWE Cutoff: TR1=F000FF00,90000000,80804000,01 TR2=F0FF0000,905F0000,B0637F00,03 TR3=F0FF0000,905F0000,B0621500,03 TR4=F0FF0000,905F0000,B0268000,01 A#5 to AWE Resonance: TR1=F000FF00,90000000,80804000,01 TR2=F0FF0000,905F0000,B0637F00,03 TR3=F0FF0000,905F0000,B0621500,03 TR4=F0FF0000,905F0000,B0268000,01 Remove Bank Select: TR1=F0DF0000,B0000000,00000000,02 -------------------------------------------------------------------------------- 99 2E 7F 10 -> Open Hihat Channel 10 Note On with Velocity 127 89 2E 40 10 -> Open Hihat Channel 10 Note Off with Velocity 64 C9 40 -- 10 -> Program Change Channel 10 Value 64 B0 0A 40 10 -> Control #10 Channel 1 Pan to 64 B0 07 7F 01 -> Control #7 Channel 1 Volume to 127 B0 20 02 01 -> Control #32 Channel 1 Map to 2 B0 00 40 01 -> Control #0 Channel 1 Bank to 64 F0 43 10 4C 00 00 7E 00 F7 -> XG Reset F0 41 10 42 12 40 01 58 00 67 F7 -> GS Delay Off C (=1100) 9 (=1001) d (=????) d (=????) F (=1111) F (=1111) 0 (=0000) 0 (=0000) --------------------------------------- AND C (=1100) 9 (=1001) 0 (=0000) 0 (=0000) TRx=FF,C9,C940,01 -> If Patch Change on Channel 10 then value is 64! C (=1100) c (=????) d (=????) d (=????) F (=1111) 0 (=0000) 0 (=0000) 0 (=0000) --------------------------------------- AND C (=1100) 0 (=0000) 0 (=0000) 0 (=0000) TRx=F0,C0,B00040,03 -> If Patch Change then dump a bank 64 controller! 9 (=1001) 9 (=1001) 2 (=0010) E (=1110) v (=????) v (=????) F (=1111) F (=1111) F (=1111) F (=1111) 4 (=0100) 0 (=0000) ----------------------------------------------------------- AND 9 (=1001) 9 (=1001) 2 (=0010) E (=1110) 4 (=0100) 0 (=0000) TRx=FFFF40,992E40,992E7F,01 -> If Open Hihat on Channel 10 then Velocity is 127! B (=1011) c (=????) 0 (=00?0) 0 (=0000) F (=1111) 0 (=0000) D (=1101) F (=1111) --------------------------------------- AND B (=1011) 0 (=0000) 0 (=0000) 0 (=0000) TRx=F0DF,B000,0000,02 -> If Bank or Map Select then remove! TRx=FFFFFFFF,F043104C,F0411042124001580067F7,3 -> If XG Reset then GS Delay Level is 0 (Doesn't work) Convert Note Messages Channel 1->6 and Channel 2->7: C:\WINAPP\SOUND\HWMDCABL.EXE OUT=7 IN=2 TR1=EF,80,058080,1 TR2=EF,82,068080,1 C:\WINAPP\SOUND\HWMDCABL.EXE OUT=7 IN=2 TR1=F0DF,B000,0000,02 TR2=F0,C0,B00040,03 TR3=FFFF40,992E40,992E7F,01 TR4=FF,C9,C940,01 C:\WINAPP\SOUND\HWMDCABL.EXE OUT=7 IN=2 TR1=F0DF,B0,00,02 TR2=F0,C0,B00040,03 TR3=FF,C9,C940,01 TR4=FFFF40,992E40,992E7F,01 FILT=0,0,1 C:\WINAPP\SOUND\HWMDCABL.EXE OUT=6 IN=1 TR1=F000FF,90,808040,01 TR2=F0,90,D081,03 TR3=F0,90,90807F,01