Curious if anyone has done any work on an E1 preset for the Roland Integra 7. Nothing in the preset library so checking here before I go down the rabbit hole
OK. I’ve jumped down the rabbit hole. Fortunately, the sysex documentation is pretty extensive. But I have a question. For most parameters the data is of the form 0aaa aaaa
or smaller, so in the range 0-127. I am having no trouble creating sysex messages for that case.
Here is an example
function pEqMidGain()
local cc = parameterMap.get (deviceId, PT_VIRTUAL, 2000 ) + 79
local ee = parameterMap.get (deviceId, PT_VIRTUAL, 9012 )
local array = {0x41, 0x10, 0x00, 0x00, 0x64, 0x12, 0x18, 0x00, cc, 0x04, ee, 0x7F }
midi.sendSysex (port, array)
end
where ee, in this case, is a value in the range (0 - 30). But for some parameters the data is of the form
0000 aaaa
0000 bbbb
0000 cccc
0000 dddd
with valid values in the range of 0 - 65535.
My question is how do I put that type of data to my sysex message? Attaching the Integra midi doc INTEGRA-7_MIDI.pdf (658.2 KB) in case that explains it better than I did. Thanks.
I have figured it out. By watching the change in sysex messages from the Integra when I changed one of the parameters with this data structure I could see what was happening. I need 4 hex numbers in the message rather than 1, and each is 4 bytes instead of 7. In the case of this example the parameter values go from 0 to 100 so this function worked
function reverbPredelay() -- range is 100ms : 08 00 00 00 to 08 00 06 04
local val = parameterMap.get (deviceId, PT_VIRTUAL, 7608 )
for i=1,7 do
if val > (i-1)*16-1 and val <=i*16-1 then gg = i-1 hh = val - (i-1)*16 end
end
local array = {0x41, 0x10, 0x00, 0x00, 0x64, 0x12, 0x18, 0x00, 0x06, 0x07, 0x08, 0x00, gg, hh, 0x7F }
midi.sendSysex (port, array)
end
I’m making slow but steady progress on the preset. I have set up controls for the “supernatural” acoustic tones and synth tones, and have had some initial success with patch parsing. But I have run into two road blocks.
- When I request a tone from the Integra it sends back two system excusive messages. The first are the tone parameters and the second are the associated effect parameters. How do I capture both these messages in the E1 preset? Using the UI mapping tool I have only been able to capture and map the second message. The first one seems to be ignored by the mapping tool. I need to map both messages. Can this be done via lua scripting? Or should I try doing it in the JSON file? Can anyone offer advice please?
- I have created virtual functions for the Integra parameters that send the appropriate Sysex message. I have 10 pages of controls. But when I tried to add a control to the 11th page the E1 locked up (the USB device and host lights stayed on and needed a reboot). However, if I delete a control from one of the other pages the E1 does not lock up. I’m guessing I have reached a memory limit on the E1. Does that sound right to you? It may be just my poor coding skills, or I will I need a second preset. I have setup only 1/2 of the available parameters in the Integra.
Thank you!
- Can you put the header of both message responses, as coming out of the synth, in the thread here? And also a screenshot of the response headers you built yourself in the E1 editor?
- Are you on Mark 1 or Mark 2 ? If on Mark 1, I would not attempt to make an Integra preset honestly.
Tip: keep the lua page of the editor open while you are uploading or trying out a preset in the making. The bottom lines will provide you valuable feedback coming from the E1.
Thanks. Here is the message sent
F0 41 10 00 00 64 11 19 00 00 00 00 20 00 00 7F F7
Here is the two message response
F0 41 10 00 00 64 12 19 02 00 00 46 75 6C 6C 20 47 72 61 6E 64 20 31 20 20 20 20 7F 01 40
40 40 40 40 40 40 40 40 01 00 01 40 01 40 00 40 40 40 3F 00 40 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 73 F7
F0 41 10 00 00 64 12 19 02 02 00 01 7F 7F 7F 00 12 60 13 60 00 40 00 40 01 02 00 00 08 00
00 01 08 00 01 01 08 00 00 07 08 00 00 0F 08 00 00 03 08 00 00 0B 08 00 00 0F 08 00 00 03
08 00 00 00 08 00 00 0F 08 00 07 0F 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00
00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00
08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00
00 00 08 00 00 00 1F F7
The first response contains the tone parameters. The second contains the effects parameters.
The header for the first is
41 10 00 00 64 12 19 02 00 00
The header for the second is
41 10 00 00 64 12 19 02 02 00
In the E1 editor this the default request message.
[edit: Corrected. I initially forgot to include the checksum byte - the Integra doesn’t seem to care the value as long as something is there)
This is the first default response message
This is the second response message
Note that the E1 mapping tool populates with the second response message if I send the request message via the MidiOx sysex tool. I also get a response if I send the default request using the patch request button. Edit: adding the checksum byte fixed the non-response issue
FYI these are the actual parameter addresses for the message responses (superNATURALAcoustic Tone Common, and superNATURAL Acoustic Tone MFX). The MFX is complicated by the fact that the MFX parameter bytes are divided into packets.
Finally. I am using mkii on the latest firmware. I have thought of a way to reduce the number of separate controller functions, and will try that today.
Oh wait! I had the two response messages in the wrong order in the mapping tool - I didn’t think the order mattered. But it does. If I change the order to match the order received then both responses can be received.
OK. Now on to trying to map those packets. From the Integra midi guide:
Transmission of “#” marked address is divided to some packets. For example, ABH in
hexadecimal notation will be divided to 0AH and 0BH, and is sent/received in this
order.
I’m trying to follow (whcih is a bit hard since I don’t know when the edits came into the story). Nevertheless, do I understand correctly that, now the messages are in the right order, and a checksum is added, both repsonses are parsed?
Yes, both messages are now parsed correctly. To handle memory constraints I decided to create a separate presets for the instrument sounds and for the synthesizer. I have the instrument preset almost finished and should be ready for testing in a day or two.