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 »

Request
F0 41 10 00 00 64 11 - 18 00 20 06 - 00 00 00 02 - 40 F7

This will return the MSB / LSB to select the tone of part 1 which is different for each tone/drum type.
SN-A User returns 89 00
SN-A Preset returns 89 64
SN-S User returns 95 00
SN-S Preset returns 95 64
SN-D User returns 88 00
SN-D Preset return 88 64
PCM-S User returns 87 00
PCM-S Preset returns 87 64

Now I have a request to, does anyone of you know how to retreive a list of all user patch names?

If anyone is interested in getting the right master tune frequency values I can show it to you in C# code.
Took me 2 days to figure it out.
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 XLars,

I included a text file with sysex messages you can use to retrieve all tone/kit/set names on the Integra, both user and preset. Btw, I think patch = tone?

As for the master tune, in my programs I use -100.0 ~ +100.0 cent, so no exact frequency values, but I would love to see your code and learn from it.
Attachments
Roland integra - get names.txt
(8.02 KiB) Downloaded 313 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 »

Thanks! Wonderer.
You saved me a lot of guessing, excellent.
Now below the code to get the Master Tune in herz.

The request:
F0 41 10 00 00 64 11 - 02 00 00 00 - 00 00 00 2F - 4F F7

Returns the System Common data, where the first 4 bytes present the Master Tune.
I put the first 4 received bytes of the Master Tune in in a byte array called 'data' in this example.
Values in the example are hard coded.

Code: Select all

// Example data, must be replaced by the received bytes.
data[0] = 0x00
data[1] = 0x04
data[2] = 0x0F
data[3] = 0x0F
Now we only need the lower nibble from each byte following the MIDI implementation guide.
To extract these, i mask the bytes with 0x0F.

Code: Select all

// Example:
// 0x00 0x04 0x0F 0x0F
//    |    |    |    |
//    &    &    &    &
// 0x0F 0x0F 0x0F 0x0F
//    |    |    |    |
//    0    4    F    F => 0x04 0xFF

// Actual C# code
int nibbles = ((data[0] & 0x0F) << 12 | (data[1] & 0x0F) << 8 | (data[2] & 0x0F) << 4 | (data[3] & 0x0F));
Now the new 'nibbles' have to be converted to 'Cents' which is NOT percents.

Code: Select all

// Actual C# code
 double cents = ((double)nibbles - 1024) / 1000;
Now the 'Cents' can be converted to the frequency in herz where 440[Hz] equals 0 'Cents'.

Code: Select all

// Actual c# code
herz = Math.Pow(2, (cents / 12)) * 440;
And to put it in the same format as on the INTEGRA-7;

Code: Select all

Console.WriteLine(herz.ToString("0.0") + "[Hz]");
That's it, hope it helps, took me some time to get it but i'm no professional programmer.

Code: Select all

// Has to be filled with the actual received data!
byte data = new byte[4]

int nibbles = ((data[0] & 0x0F) << 12 | (data[1] & 0x0F) << 8 | (data[2] & 0x0F) << 4 | (data[3] & 0x0F));
double cents = ((double)nibbles - 1024) / 1000;
herz = Math.Pow(2, (cents / 12)) * 440;
Console.WriteLine(herz.ToString("0.0") + "[Hz]");
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 »

Thanks XLars.
I converted your code to python to fit my Integra editor and it works perfectly.

Keep in mind that editing:
- on the hardware results in 509 steps to go from 415.3 to 466.2 Herz.
- through MIDI there are 2000 steps available for the same range.

So using MIDI is more precise, but then you'll need to round to hundredths or you'll end up with a lot of double numbers.

Btw, I'm no professional programmer either, I just do it for fun.
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 »

Can anyone explain the address part of this system exclusive.
It requests the preset PCM Tone Names 0..63 I got it from the list Wonderer posted, working like a charm by the way.

From the MIDI implementation I don't get how address is obtained [0F 00 04 02] to retreive the tone names.

F0 41 10 00 00 64 11 [ 0F 00 04 02 ] 57 40 00 40 7F F7

I get the last part where 57 is the PCM Tones, 40 is the preset range and the last 40 is the number of names to retreive.

What i'm trying to do is get the tone category as well.
Any help is welcome.
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 »

Last year I attempted to find all undocumented sysex messages available on the Integra.
I made software to scan all the addresses possible and this is part of the results I found.
That's how the addresses are obtained.

Now for the tone category:
AFAIK, the category is included in the response from the Integra when using the sysex's in the list I posted before, although the numbers seem to be off. It seems that Roland simplified the category list some day and the Integra uses both the old and new lists.

* I included a text file with a list of old and new categories side by side.

With sysex's, the Integra mostly uses the OLD list, but when we use the '0F 00 XX XX' it uses the NEW list.

Take this as example:
F0 41 10 00 00 64 11 0F 00 04 02 57 40 3D 01 7F F7

Integra responds with:
0F 00 04 02 57 40 3D [ 19 ] 00 50 6F 6C 79 20 4B 65 79 20 20 20 20 20 20 20 20 11 F7

The number 0x19 in the response is the category in the NEW list. This equals 0x26 in the OLD list.

Hope this helps.
Attachments
Integra category list.txt
(1.95 KiB) Downloaded 321 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 »

Yes this helped a lot, so I could never have found it using the provided MIDI implementation.
Quite impressive that you wrote a program to scan all addresses.
I think it's even possible to write to the LCD screen.

I also have a SoundCanvas 88-Pro, in early days a friend of my neighbour made a program to draw on it's LCD screen. He made a paint program which updated the LCD screen in realtime, pretty funny.

Thanks again for your reply.
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 »

You're welcome.

Most MIDI implementations are limited to the stuff you can use in a sequencer. The stuff you would need for creating your own editor/library-software is mostly undocumented. AFAIK, this goes for most manufacturers.

There are other undocumented sysex's that deal with:
  • - expansions
    - stored user tones/kits/sets
    - preview tone
    - storing edit buffer
    - ?
If you're interested in those, I can try and document them for you. At the moment my documentation is kinda messy to say the least. ;-)
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 »

Yes, i'm really interested in those, your posts are a big help to me trying to make a librarian as well.

It's really a downer that Roland only supplies the editor for Apple devices and not Android devices. Also the Windows version is bound to Cakewalk, which I like as MIDI editor though, but I don't like the Integra plugin.

But that said, it's also fun trying to write your own.
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 »

But that said, it's also fun trying to write your own.
I agree, that's very much fun to do.

Documentation:
Things to keep in mind about the Integra (and most likely all Roland hardware):

- When doing a data request, it doesn't care about the value of the checksum.

- It allows you to ask for all used parameters in a given address range.

Example:

Code: Select all

                                      address          length
F0 41 10 00 00 64 11    01 00 00 00    00 00 00 38   7F F7 - get setup with proper length
F0 41 10 00 00 64 11    01 00 00 00    01 00 00 00   7F F7 - get setup until system
F0 41 10 00 00 64 11    02 00 00 00    01 00 00 00   7F F7 - get system
F0 41 10 00 00 64 11    01 00 00 00    02 00 00 00   7F F7 - get setup and system
The first line uses the proper length for the setup parameters.
The second line uses the range from setup until system.
Both result in the same answer from the Integra.

The third line uses the range from system until far beyond the end of system.

The fourth line results in the Integra sending both setup and system parameters.

This shows that the Integra will only send the used parameters in a range, and this range can be huge. It always sends in the format and lengths given in the MIDI implementation.

Another example:

Code: Select all

                                      address          length
F0 41 10 00 00 64 11    18 00 00 00    01 00 00 00   7F F7 - get temporary studio set
F0 41 10 00 00 64 11    19 00 00 00    04 00 00 00   7F F7 - get all tones in studio set
F0 41 10 00 00 64 11    18 00 00 00    05 00 00 00   7F F7 - get temporary studio set + all tones
Sysex's for expansions see:
viewtopic.php?f=54&t=55023#p310467

That's it for today, the rest will follow soon.
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 »

Thanks!!
This should keep me busy for a while.

By the way, I don't know if you noticed that the GM2 tone request is missing the last tone variations.
You probably never gonna use them, Laser Gun nor Explosion, just for consistency I got them by the following request:

F0 41 10 00 00 64 11 0F 00 04 02 79 02 7F 02 7F F7
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 »

By the way, I don't know if you noticed that the GM2 tone request is missing the last tone variations.
Thanks for informing me about this. It's a nice example of how a messy documentation can lead to errors. I already fixed this in the past, but forgot to delete the faulty part.
My solution at the time was to split it into 4 sysex messages and I put that in the newly attached text file, but your solution also works perfectly.
Attachments
Roland integra - get names.txt
(8.29 KiB) Downloaded 272 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 »

Here is something that's very nice to use in your own software. It imitates pressing the volume button on the Integra to hear a preview of a part.

I put the correct checksums in this time, although I don't think the Integra cares about the values in these messages.

When switching preview parts, always send an "off" message in between, otherwise it doesn't work properly.

Code: Select all

Preview off          F0 41 10 00 00 64 12   0F 00 20 00   00   51 F7
Preview part   1  F0 41 10 00 00 64 12   0F 00 20 00   01   50 F7
Preview part   2  F0 41 10 00 00 64 12   0F 00 20 00   02   4F F7
Preview part   3  F0 41 10 00 00 64 12   0F 00 20 00   03   4E F7
Preview part   4  F0 41 10 00 00 64 12   0F 00 20 00   04   4D F7
Preview part   5  F0 41 10 00 00 64 12   0F 00 20 00   05   4C F7
Preview part   6  F0 41 10 00 00 64 12   0F 00 20 00   06   4B F7
Preview part   7  F0 41 10 00 00 64 12   0F 00 20 00   07   4A F7
Preview part   8  F0 41 10 00 00 64 12   0F 00 20 00   08   49 F7
Preview part   9  F0 41 10 00 00 64 12   0F 00 20 00   09   48 F7
Preview part 10  F0 41 10 00 00 64 12   0F 00 20 00   0A   47 F7
Preview part 11  F0 41 10 00 00 64 12   0F 00 20 00   0B   46 F7
Preview part 12  F0 41 10 00 00 64 12   0F 00 20 00   0C   45 F7
Preview part 13  F0 41 10 00 00 64 12   0F 00 20 00   0D   44 F7
Preview part 14  F0 41 10 00 00 64 12   0F 00 20 00   0E   43 F7
Preview part 15  F0 41 10 00 00 64 12   0F 00 20 00   0F   42 F7
Preview part 16  F0 41 10 00 00 64 12   0F 00 20 00   10   41 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 »

That's realy great, getting the first sounds from my librarian, THANKS!

I attached an image with the overall layout of my librarian, just functional, not styled yet.
Also attached an image of my Pitch envelope control which binds to the envelop time 1-4 & envelop level 0-4.

If you like I can send you the code of the pitch envelope control, to give some in return to all your help, although it is build in C# as WPF custom control and not Pyton.
Attachments
Pitch envelope control with draggable points.
Pitch envelope control with draggable points.
PitchEnvelopeControl.jpg (36.83 KiB) Viewed 6284 times
Overall librarian layout in WPF, MDI style windows, not styled yet.
Overall librarian layout in WPF, MDI style windows, not styled yet.
Layout.jpg (470.63 KiB) Viewed 6284 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 »

If you like I can send you the code of the pitch envelope control, to give some in return to all your help, although it is build in C# as WPF custom control and not Pyton.
As I said before; I would love to read your code. Even if I can't use it, I can learn from it.

My platform is Linux. Sometimes I use C++ for programs that need more speed than python can provide, but I prefer python. I use wxWidgets as GUI with a lot of custom controls.

My project is a mixer/editor/librarian for the Integra but at the moment it's a sleeping project. At some time I will pick it up again but I doubt if I will ever finish it. ;-)

Here's a screenshot of what the main screen looks like at the moment.
Attachments
Integra.jpg
Integra.jpg (327.43 KiB) Viewed 6278 times
Post Reply