Sysex data request for Temporary Tone Part Name

Forum for Integra 7
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

Wow, looking great!

Indeed there are so many options inside the Integra that it consumes lots of time and sometimes you just have to take a brake from a project.

I attached the files for the Pitch Envelope control, hope you can make any sense out of it. :)
Attachments
MainWindow.xaml.txt
The main test window, how to use the control in a project. (values are not bound, just test values)
(1.22 KiB) Downloaded 262 times
LimitedPoint.cs.txt
From the control libray, used to define a point with min & max values for drawing.
(1003 Bytes) Downloaded 253 times
Generic.xaml.txt
From the control library, the generic style, WPF automatically reads the generic.xaml file for a control library.
(1.89 KiB) Downloaded 241 times
PitchEnvelopeControl.cs.txt
From the control library, the actual control code.
(23.47 KiB) Downloaded 252 times
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

I've been looking at your files and I noticed they are very structured and readable.
One thing I like a lot is that you use the width of present monitors (more than 80 columns for text), something I hardly ever see. Very nice.


Here is a captured sysex that came up when writing set/tone/kit.

Code: Select all

F0 41 10 00 00 64 11  0F 00 10 00   mm ll pp nn   cc F7 - Write Set/Tone/Kit
  mm = 55 = Studio set
  mm = 56 = PCM drumkit
  mm = 57 = PCM-synth tone
  mm = 58 = SN drumkit
  mm = 59 = SN-acoustic tone
  mm = 5F = SN-synth tone

  ll  pp = Number of user memory

  nn = Part number - 1 for tones/kits, 7F for studio sets  

  cc = checksum


The Integra responds with:
F0 41 10 00 00 64 12   0F 00 10 01   00 00 00 mm ll pp nn   cc F7

Then when writing studio set:
F0 41 10 00 00 64 12   01 00 00 04   mm ll pp                      cc F7

Or when writing tone/kit
F0 41 10 00 00 64 12   18 00 2x 06   mm ll pp                      cc F7
  x = part number

Last response:
F0 41 10 00 00 64 12   0F 00 10 02   00 00 00 mm ll pp nn   cc F7
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

I try to comment my code as much as possible and use long descriptive variable names which is tedious when writing, sometimes commenting takes more time than writing code. But I can leave my code for a week and jump right back in. Also in visual studio the <summary> tags are automatically exported to create a documentation file.

I posted some code attachments that I use to obtain and handle tone banks from the Integra.
For now I use static tone banks, but probably gonna convert this to use a backend database.
By the way, I use midi-dot-net from github for my MIDI interaction.

I have one question about the 'pp' when using PCM / SNA / SNS the range of user tones exceeds 127 aka 7F.
So for PCM usertone range 128 - 255 the request will be 12 pp ?
Attachments
ApplicationUsage.txt
Partial code how to use it in an application.
(1.47 KiB) Downloaded 253 times
IntegraSystemExclusive.cs.txt
System exclusive structure.
(7.78 KiB) Downloaded 262 times
IntegraToneLists.cs.txt
Stores tones for use in the application.
(3.27 KiB) Downloaded 249 times
IntegraBaseStructure.cs.txt
Base for IntegraToneLists.
(4.82 KiB) Downloaded 262 times
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

XLars wrote:I try to comment my code as much as possible and use long descriptive variable names which is tedious when writing, sometimes commenting takes more time than writing code. But I can leave my code for a week and jump right back in.
Same here, but I try to find as short as possible variable names that are still descriptive. Doesn't always work well though. Also I try to write code as simple as possible.
XLars wrote:I posted some code attachments that I use to obtain and handle tone banks from the Integra.
For now I use static tone banks, but probably gonna convert this to use a backend database.
I will definitely have a look at the code in 2 weeks, for now I'm busy preparing for my holidays that start next week :-)
XLars wrote: By the way, I use midi-dot-net from github for my MIDI interaction.
I'm using a slightly altered version of pyportmidi, a wrapper for portmidi.
XLars wrote:I have one question about the 'pp' when using PCM / SNA / SNS the range of user tones exceeds 127 aka 7F.
So for PCM usertone range 128 - 255 the request will be 12 pp ?
ll = lower case LL.
The request is 00 pp, 01 pp, 02 pp, 03 pp to get a range of 512.
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

Not the first time I mess up 1's and l's with with that font type. :)

Thanks and enjoy your holliday.
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

In addition to my earlier post, how to get the frequency for the master tune, I found a way to convert the frequency value back to the system exclusive data part.

Code: Select all

// Bytes to store the result.
byte aa, bb, cc, dd;

// Replace with the frequency from your UI.
double frequency = 440.0;

// Gets the cents from the frequency (divided by 100!)
var cents = 12 * (Math.Log(frequency / 440) / Math.Log(2));

// Converts the cents to the MIDI range 24..2024
int midiValue= (int)((cents * 1000) + 1024);

// Limit the midiValue to be in range, because max 466.2 Hz and min 415.3 Hz are just outside the MIDI bounds.
midiValue= Math.Min(midiValue, 2024);
midiValue= Math.Max(midiValue, 24);

// Store the midi value in the byte array, the reversed process of my earlier post.
aa = (byte)((midi >> 12) & 0x0F);
bb = (byte)((midi >> 8) & 0x0F);
cc = (byte)((midi >> 4) & 0x0F);
dd = (byte)(midi & 0x0F);

Using the result:
F0 41 10 00 00 64 11 - 02 00 00 00 - aa bb cc dd - checksum F7

Earlier post, getting the frequency:
https://forums.rolandclan.com/viewtopic ... 15#p314245
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

I have a question, I'm struggling with the Studio Set Common Chorus.
The parameters 1 to 20 are shared based on the chorus types (Off, Chorus, Delay, GM2 Chorus).
In my application I read the complete range as described in the MIDI implementation and for example, the chorus type is currently set to 'Delay'.
Now I change the 'Delay Left' paramater to for example 1000[msec].
The 'Delay Left' parameter is parameter # 2.

The problem is, when I switch the chorus type in my application to 'Chorus' and reread the parameters from the Integra, parameter #2 is out of range because it is bound to the 'Cutoff Freq' and it's range way smaller than the 'Delay Left'.

If I do the same steps on the Integra itself, there is no problem, e.g. the numbers are stored in between changes of the chorus type.

Any idea?
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

Hi, I'm back again. :-)

I had the same problem with common chorus, reverb and multiFX. My present solution is to store the data in my program, keep it updated and read it from there when needed.
It's not the most elegant way, but it works.
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

Welcome back and thanks for your answer.
I'll have to do as you described (I thought so alread), for chorus and reverb it's ok, but for the MFX it's less pretty, never mind.

I was able to implement the loading of expansions you posted, working great.
Is it possible to request which expansion boards are currently loaded?
Also is it possible to get the tone names of the expansions which are not loaded?
Currently I am able to get the tone names of the expansions if they are loaded, but on the Integra in the expansion window you are able to get the tones when clicking on the 'INOF/LIST' button even if they are not loaded.
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

XLars wrote:I was able to implement the loading of expansions you posted, working great.
Is it possible to request which expansion boards are currently loaded?
Yes, that's possible. Here are all the sysex's (AFAIK) you can use with expansions in 1 list.

Code: Select all

Get loaded exp :  F0 41 10 00 00 64 11  0F 00 00 10  00 00 00 00  7E  F7
From Integra     :  F0 41 10 00 00 64 12  0F 00 00 10  aa bb cc dd  61  F7

Load exp           : F0 41 10 00 00 64 11  0F 00 30 00  aa bb cc dd  ss  F7
From  Integra    : F0 41 10 00 00 64 12  0F 00 30 01  00 00 00 00  40  F7  start loading
From  Integra    : F0 41 10 00 00 64 12  0F 00 30 02  00 00 00 00  3F  F7  finished loading

Get startup exp : F0 41 10 00 00 64 11  0F 00 00 11  00 00 00 00  60  F7
From Integra     : F0 41 10 00 00 64 12  0F 00 00 11  aa bb cc dd  ss  F7

Set startup exp : F0 41 10 00 00 64 12  0F 00 00 11  aa bb cc dd  ss  F7


aa = expansion virtual slot A
bb = expansion virtual slot B
cc  = expansion virtual slot C
dd = expansion virtual slot D
ss = checksum

aa, bb, cc, dd value:
00 = OFF
01 = SRX-01
02 = SRX-02
03 = SRX-03
04 = SRX-04
05 = SRX-05
06 = SRX-06
07 = SRX-07
08 = SRX-08
09 = SRX-09
0A = SRX-10
0B = SRX-11
0C = SRX-12
0D = ExSN1
0E = ExSN2
0F = ExSN3
10 = ExSN4
11 = ExSN5
12 = ExSN6
13 = ExPCM
XLars wrote: Also is it possible to get the tone names of the expansions which are not loaded?
Currently I am able to get the tone names of the expansions if they are loaded, but on the Integra in the expansion window you are able to get the tones when clicking on the 'INOF/LIST' button even if they are not loaded.
That's weird, I didn't even know about that option. LOL.
I never found a list of those names when scanning the Integra, so I guess it's not there.

BTW. The "get names.txt" I posted before is not complete, it doesn't hold sysex's that read the names of the SRX expansions (when loaded). You might have noticed that and already added them, otherwise I can complete it, I just didn't get to it yet.
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

Great, my loading of expansions is now fully implemented and I implemented a keyboard control (which I attached as text file.)
BTW. The "get names.txt" I posted before is not complete, it doesn't hold sysex's that read the names of the SRX expansions (when loaded). You might have noticed that and already added them, otherwise I can complete it, I just didn't get to it yet.
I noticed the SRX are missing, my guess range was, referencing the list you posted:

Code: Select all

0F 00 04 02  57 60 .. ..
But that's not working. :(
Sometimes I think I get the logic, but Integra says no. LOL

I also noticed all these neat functions are in the 0F range, I get it that you can request a full range of data but figuring out what they mean is quite difficult.
btw. I found a good freeware hex editor for viewing ranges of data.
https://mh-nexus.de/en/hxd/
Maybe it's useful for you, but propably already got one.
Attachments
KeyboardControlWPF.txt
WPF Keyboard control implementation.
(10.46 KiB) Downloaded 251 times
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

XLars wrote:Great, my loading of expansions is now fully implemented and I implemented a keyboard control (which I attached as text file.)
Keep on going :-)
XLars wrote:Sometimes I think I get the logic, but Integra says no. LOL
There is some logic in it but you have to be aware that the functions in the 0F range don't seem to follow the standard protocol of requesting "address ranges".

If you look closely to the "address range", you'll find that, in this case, the second part represents the "Bank select MSB/LSB" and "Program change" values.

0F = Special functions
00 = ??
04 = ?? tone
02 = ?? get names
57 = BS MSB
00 = BS LSB
00 = PC start point
40 = nr of names to get

I added an updated "get names.txt" file, hope it's complete now.
XLars wrote:I also noticed all these neat functions are in the 0F range, I get it that you can request a full range of data but figuring out what they mean is quite difficult.
Yes, all the functions are in the 0F ranges.
No, you can't request a full range in this case.
I assume these functions were added for communication between the Integra and the software editor.
There are other functions that seem to do someting, but I didn't figure them out completely yet. Some have to do with used and/or unused "user memory" places.
XLars wrote:btw. I found a good freeware hex editor for viewing ranges of data.
https://mh-nexus.de/en/hxd/
Maybe it's useful for you, but propably already got one.
Thanks for sharing, but I only use Linux and Mac, Windows software won't run on my systems. Others might find it very useful though.
Attachments
Roland integra - get names.txt
(14.38 KiB) Downloaded 251 times
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

I added an updated "get names.txt" file, hope it's complete now.
Yes, the list is complete thanks.

There is one little mistake in the list for ExSN6:
F0 41 10 00 00 64 11 0F 00 04 02 59 65 00 07 7F F7
Which should be:
F0 41 10 00 00 64 11 0F 00 04 02 58 65 00 07 7F F7
No complaint, just for consistency :). LOL

When setting the default startup expansions, they get set on the Integra but on power down and up again they are lost.
Probably have to send a system write message?
User avatar
Wonderer
Posts: 65
Joined: 21:47, 23 August 2018
Location: The Netherlands

Re: Sysex data request for Temporary Tone Part Name

Post by Wonderer »

XLars wrote: There is one little mistake in the list for ExSN6:
F0 41 10 00 00 64 11 0F 00 04 02 59 65 00 07 7F F7
Which should be:
F0 41 10 00 00 64 11 0F 00 04 02 58 65 00 07 7F F7
No complaint, just for consistency :). LOL
Thanks for letting me know, it's so easy to make mistakes when dealing with a lot of numbers.
The file has been updated.
XLars wrote: When setting the default startup expansions, they get set on the Integra but on power down and up again they are lost.
Probably have to send a system write message?
I'm still trying to find the system write message. The official software has no option for even setting the startup expansions so it might not be there at all. For now just have to do a manual system write.
XLars
Posts: 20
Joined: 08:40, 24 May 2019
Location: The Netherlands
Contact:

Re: Sysex data request for Temporary Tone Part Name

Post by XLars »

That's ok, probably not gonna use it much anyway.
I probably store it in my librarian to auto load when I switch studio sets.

I post my project as a zip file, you are probably not be able to run it, but you can view the .cs code files.
Attachments
Integra.zip
Integra Librarian
(4.5 MiB) Downloaded 260 times
Post Reply