I have a vbscript that when run in midiox converts the microwave’s sysex dump to controller changes… somewhat related project to this, but no besides buying a few Lua books and reading up and experimenting I haven’t made any real progress to report on building this tool. I’m happy to see there has been some interest and it’s not just me wishing for this in renoise…
here is the vbscript if anyone is interested at all, credit goes to “fozzie” over on the ctrlr forums. I designed, built and coded the ctrlr, he wrote this script.
' Create object
Set mox = WScript.CreateObject("MIDIOX.MOXScript.1", "OnTrigger_")
mox.DivertMidiInput = 0 'no input diversion
mox.FireMidiInput = 1 ' Start processing MIDI
MsgBox "Press OK to end MIDI loop" ' Will not return until after [OK]
mox.FireMidiInput = 0 ' All done processing
mox.DivertMidiInput = 0
mox.ShutdownAtEnd = False
Set mox = nothing ' Cleanup
Sub OnTrigger_SysExInput (strSysex)
If len(strSysEx) > 100 Then
sysex = Split(strSysEx)
port = -1
'MsgBox strSysEx
'Conversion of all relevant Sysex parameters to implemented CC messages on channel 1
strsysexIndexCC = "8 9 10 12 13 14 19 20 21 23 24 25 26 32 33 34 35 36 37 38 43 44 45 46 47 48 49 54 55 56 57 69 70 71 72 73 74 80 81 82 84 86 87 89 91 94 95 96 97 99 100 101 102 103 104 105 106 107 120 121 122 123 124 126 127 128 129 130 156 157 158 159 160 161 162 163 164 166 167 168 169 170 171 173 174 175 176 177 178 179"
sysexIndexCC = Split (strsysexIndexCC, " ")
strccIndex = "33 34 35 36 37 13 38 39 40 41 42 43 44 70 71 72 73 74 75 76 77 78 79 80 81 82 83 45 46 47 48 50 56 54 51 52 53 60 61 62 57 58 55 12 10 65 22 23 5 102 105 104 103 107 106 108 109 110 14 15 16 17 29 18 19 20 21 31 85 86 87 88 89 90 91 92 93 24 25 30 112 113 114 26 28 27 115 116 117 118"
ccIndex = Split (strccIndex, " ")
For i = 0 to 89
mox.OutputMidiMsg port, 176, ccIndex(i), cint("&H" & sysex(sysexIndexCC(i)))
Mox.sleep(10)
Next
'part two of conversion; the parameters that are not coupled to a CC will be transformed into separate sysex parameter change messages (part 1 for parameters 0-127
strsysexIndexUnmappedChannel1 = "58 60 61 62 64 77 83 88 90 92 93 108 109 110 111 112 115 116 117 119 132 133 134"
sysexIndexUnmappedChannel1 = Split (strsysexIndexUnmappedChannel1, " ")
strSysexLoBitIndex = "33 35 36 37 39 46 4C 51 53 55 56 65 66 67 68 69 6C 6D 6E 70 7D 7E 7F"
SysexLoBitIndex = Split (strSysexLoBitIndex, " ")
SysexParamChange = Array ("F0","3E","0E","00","20","00","00","00","00","F7")
For j = 0 to 22
SysexParamChange (7)= SysexLoBitIndex(j)
SysexParamChange (8)= sysex(sysexIndexUnmappedChannel1(j))
SysexParamOutput = Join (SysexParamChange, " ")
mox.SendSysExString SysexParamOutput
Mox.sleep(10)
Next
'part three of conversion; the parameters that are not coupled to a CC will be transformed into separate sysex parameter change messages (part 2 for parameters 128-256
strsysexIndexUnmappedChannel1_pt2 = "135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246"
sysexIndexUnmappedChannel1_pt2 = Split (strsysexIndexUnmappedChannel1_pt2, " ")
strSysexLoBitIndex_pt2 = "00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F"
SysexLoBitIndex_pt2 = Split (strSysexLoBitIndex_pt2, " ")
SysexParamChange2 = Array ("F0","3E","0E","00","20","00","01","00","00","F7")
For k = 0 to 85
SysexParamChange2 (7)= SysexLoBitIndex_pt2(k)
SysexParamChange2 (8)= sysex(sysexIndexUnmappedChannel1_pt2(k))
SysexParamOutput2 = Join (SysexParamChange2, " ")
mox.SendSysExString SysexParamOutput2
Mox.sleep(10)
Next
End If
End Sub
So this parses a sysex patch dump sent from the xt into corresponding CC and 10 byte sysex param changes into midi-ox, out of midiox through a virtual midi port into ctrlr, where all matching param knobs/sliders update before your eyes. If renoise accepts 10 byte sysex parameter changes this should also work within renoise to serve a similar purpose to what I’d like to achieve with an xrns tool…
finally hell no there is no stepping on any toes on this project - if you’d like to take a stab at working on this as a tool in renoise, by all means please do, there is no ownership in this stuff, and I have hardly begun on building this tool.