GR-55 - Complete MIDI Implementation

Started by rockhound, March 04, 2011, 08:40:15 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gumtown

I will hold my breath and wait.. .. .. .. .. .. .. .. gasp!!
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

gumtown

I can take a breath now,
I can't disclose that I now have the specification, due to signing a confidentiality agreement,
but if there is something not already known, i maybe able to discuss this in other ways.
So far nothing new in a 1 minute glance..
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

Gastric

Top secret! Don't tell or you get double secret probation from the Dean!

aliensporebomb

And I thought getting the VG-99 info was tough - although getting what looks like a CIA censored document is awfully similar to VG-99 MIDI spec.  Good luck on your NDA!
My music projects online at http://www.aliensporebomb.com/

GK Devices:  Roland VG-99, Boss GP-10, Boss SY-1000.

MCK

Quote from:  gumtown on November 02, 2011, 12:09:28 PM
I can take a breath now,
I can't disclose that I now have the specification, due to signing a confidentiality agreement,
but if there is something not already known, i maybe able to discuss this in other ways.
So far nothing new in a 1 minute glance..

Congratulations on this recognition from Roland. As absurd as it is, at least they opened the door for you to get access. This is all thanks to the hard work you have been putting in supporting their products with your excellent editors. It was about time!!!

whippinpost91850


gumtown

So i have found an interesting feature that is not actually in the GR-55 menu, but exists in the specification,
in the system GK setup menus for both Guitar and Bass modes, a control labelled "Develop Low Cut".
I have just built it into the editor and will try it tonight to see what it does, maybe it's an adjustable low cut filter for each GK set ??

The only other 'descrepencies' are the modeled tone pitch adjust seems to be for each string rather than a single parameter in the editor(must have missed that in the initial reverse-engineering), and the system midi program patch/bank table is actually separate for guitar and bass modes.

Apart from that, everything is already in the editor.. no more new fancy hidden treasures....  :)
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

Elantric

#32
So even when there is nothing set as an Assignment, just curious if there is any sysex or NRPN messages that may get sent when a user hits a button or a foot control on the GR-55?

I suppose i'm seeking a work around to perhaps remotely trigger the CTRL pedal using a NRPN MIDI message.


QuoteThe only other 'descrepencies' are the modeled tone pitch adjust seems to be for each string rather than a single parameter in the editor(must have missed that in the initial reverse-engineering)

Sure wish we could map these to a controller for pedal steel  / "B Bender" type effects

gumtown

Quote from:  Elantric on November 02, 2011, 07:25:29 PM
So even when there is nothing set as an Assignment, just curious if there is any sysex or NRPN messages that may get sent when a user hits a button or a foot control on the GR-55?

I suppose i'm seeking a work around to perhaps remotely trigger the CTRL pedal using a NRPN MIDI message.


Sure wish we could map these to a controller for pedal steel  / "B Bender" type effects
Easy enough to toggle the CTL pedal
F0 41 10 00 00 53 12 18 00 00 11 01 56 F7 = CTL on
F0 41 10 00 00 53 12 18 00 00 11 00 57 F7 = CTL off
that does the pedal status for CTL pedal function, not sure if that will carry through for assigns using the CTL pedal.
Any GR-55 parameter can be controlled directly via system exclusive sent via GR-55 midi in (or USB),
luckily the CTL pedal status is included.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

Bill Ruppert

Would that would include controlling the "hold" function" via midi/CC?????



///
Quote from:  gumtown on November 02, 2011, 08:14:44 PM
Easy enough to toggle the CTL pedal
F0 41 10 00 00 53 12 18 00 00 11 01 56 F7 = CTL on
F0 41 10 00 00 53 12 18 00 00 11 00 57 F7 = CTL off
that does the pedal status for CTL pedal function, not sure if that will carry through for assigns using the CTL pedal.
Any GR-55 parameter can be controlled directly via system exclusive sent via GR-55 midi in (or USB),
luckily the CTL pedal status is included.

Elantric

QuoteAny GR-55 parameter can be controlled directly via system exclusive sent via GR-55 midi in (or USB),
luckily the CTL pedal status is included.

OK I want to know the sysex strings for controlling  /reading the "status" of every switch, button, light, on the GR-55! 

So what are the MIDI sysex strings for

FootSwitch1

FootSwitch2

FootSwitch3

Audio Player Button

V-Link Button

"Lead" button

"Rhythm" button

"Other" button

"User" button

"EZ-Edit" button

etc.


Is there ANY equivalent to a  "Local Off" sysex command?

Is there ANY hidden Sysex command to enable MIDI Thru?

mbenigni

gumtown indicates there is "nothing new in a 1 minute glance", so I'll try not to get my hopes up, but these are the things I'm hoping the new documentation might reveal:

-SysEx or other MIDI for Tap Tempo.

-SysEx/MIDI for Pitch Bend (not the PCM semitone/fine, but the Pitch Bend that is assignable to PCM1, PCM2, COSM via Exp Pedal or GK Volume, and not its depth, but the Pitch Bend itself)

-SysEx/MIDI for Hold function

-SysEx/MIDI to turn Tuner on and off

-SysEx/MIDI to turn Phrase Loop mode on and off.  (I know it's been established that Record, Play controls cannot be controlled via MIDI, but I'd love to hear otherwise on those as well.)

-SysEx/MIDI to Write current edits to a patch (e.g. without having to send all characteristics of the pending patch in the SysEx itself.)

-SysEx/MIDI for the h/w editing wheel (specifically with an aim toward coming up with an easier way of renaming patches on the iPad.)

gumtown

Quote from:  Elantric on November 02, 2011, 11:52:35 PM
OK I want to know the sysex strings for controlling  /reading the "status" of every switch, button, light, on the GR-55! 

So what are the MIDI sysex strings for

FootSwitch1

FootSwitch2

FootSwitch3

Audio Player Button

V-Link Button

"Lead" button

"Rhythm" button

"Other" button

"User" button

"EZ-Edit" button

etc.


Is there ANY equivalent to a  "Local Off" sysex command?

Is there ANY hidden Sysex command to enable MIDI Thru?
The surface controls aren't part of the midi spec, best suggestion for those would be midi controlled solenoids pressing on each switch/button, or a PIC micro paralleled up to the midi input with it's own sysex system to operate each pedal via opto isolators.  ;D
Apart from the Foot Switch 1~3 and Audio Player buttons, the rest are of no use to me..
VLink? really? WTF??? but i do like the blue light in the button.!!

It would be great if there was some sort of hack that enabled midi thru and midi note input. I see a few standard PCM synth controls might be able to be controlled by conventional external cc# midi data like
Part Level = cc#7
Part Pan = cc#10
Part Portamento Sw = cc#65
Part Coarse Tune = RPN#2
Part Fine Tune = RPN#1

The closest to "Local Off" would be PCM1/2 Tone on/off.
Even the old GR-20 had local off.  :-\ 
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

gumtown

Quote from:  mbenigni on November 03, 2011, 06:32:03 PM
gumtown indicates there is "nothing new in a 1 minute glance", so I'll try not to get my hopes up, but these are the things I'm hoping the new documentation might reveal:

-SysEx or other MIDI for Tap Tempo.
Wouldn't sending BPM rate also work?,
where F0 41 10 00 00 53 12 18 00 02 3C 01 04 25 F7 = 40 BPM,
and F0 41 10 00 00 53 12 18 00 02 3C 0F 0A 11 F7 = 250 BPM
just need some external way of converting switch taps to a time measured numerical value to drop into the sysx message


-SysEx/MIDI for Pitch Bend (not the PCM semitone/fine, but the Pitch Bend that is assignable to PCM1, PCM2, COSM via Exp Pedal or GK Volume, and not its depth, but the Pitch Bend itself)

-SysEx/MIDI for Hold function

-SysEx/MIDI to turn Tuner on and off

-SysEx/MIDI to turn Phrase Loop mode on and off.  (I know it's been established that Record, Play controls cannot be controlled via MIDI, but I'd love to hear otherwise on those as well.)Nothing found for the above

-SysEx/MIDI to Write current edits to a patch (e.g. without having to send all characteristics of the pending patch in the SysEx itself.)
There is some special magic just for this

-SysEx/MIDI for the h/w editing wheel (specifically with an aim toward coming up with an easier way of renaming patches on the iPad.)
You can do that by sending ASCII text code in the sysx message, like this
F0 41 10 00 00 53 12 18 00 00 01 6D 62 65 6E 69 67 6E 69 27 73 20 70 61 74 63 68 54 F7
F0 41 10 00 00 53 12 18 00 00 01  m  b   e   n  i    g   n   i   '    s       p   a   t   c   h  54 F7
       
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

jayson

Quote from:  gumtown on November 02, 2011, 07:11:37 PM
So i have found an interesting feature that is not actually in the GR-55 menu, but exists in the specification,
in the system GK setup menus for both Guitar and Bass modes, a control labelled "Develop Low Cut".
I have just built it into the editor and will try it tonight to see what it does, maybe it's an adjustable low cut filter for each GK set ??


Very interesting!  I wonder if this might be a solution for piezo noise issue.  Like a software version of what the RMC Subsonic Filter does.  Looking forward to hearing more!

Cheers,

jayson

mbenigni

Hi, Colin.  I got your PM concerning the new sample code for writing patches.  Exciting!  Hope I can get some mileage out of this and the Rename code above.

As for tap tempo, using BPM after calculating difference in event times will work if there's a custom software layer involved, but it's not feasible for someone using simple hardware e.g. a MIDI footswitch, or in my case, a less flexible software solution like TouchOSC.

JCRob

Could I understand something of what you're saying??
Forgive my ignorance in these matters:
Can I, as a final user benefit from having this kind of document???

Thanks to anyone who feels the calling to enlighten this humble player...


Roberto

Elantric

#42
If we speak an unfamiliar  term. Copy and paste it here

http://en.wikiaudio.org/Main_Page

This link can explain sysex, RPN, NRPN
http://en.wikiaudio.org/MIDI_NRPN_practical_utility_tutorial


VGuitarForums Glossary of Terms
https://www.vguitarforums.com/smf/index.php?topic=13765.msg100749#msg100749




mbenigni

Hi Colin.  I just sent you a PM about the Write SysEx examples you sent me, and now I've got to harass you about the Rename code as well.   ;)

The example you provided:  F0 41 10 00 00 53 12 18 00 00 01  m  b   e   n  i    g   n   i   '    s       p   a   t   c   h  54 F7

... will send the full length of the patch name to the GR55.  I'm trying to build a keyboard interface in TouchOSC, and so I need a way to send one character at a time to a specific position in the string.  Is there a way to address the nth character of the name, rather than sending all 16 characters at once?

I tried (somewhat randomly):

F0 41 10 00 00 53 12 18 00 00 01  a  54 F7

and

F0 41 10 00 00 53 12 18 00 00 02  b  54 F7

Assuming the 54 was a checksum which would be ignored, and hoping to write "a" to the first position, and "b" to the second position with respective button presses.  But you're probably not surprised to hear that this didn't work.   :)  Do you have any advice?


gumtown

It should work, so long as the characters sent are in ASCII code and not the actual text (a = hex 61)
F0 41 10 00 00 53 12 18 00 00 01  61  54 F7

here is a ASCII text conversion table
http://www.asciitable.com/

For the magic patch write sequence, a patch address has to be allocated, so maybe there is a way to use TouchOSC to change patch and then record somewhere (to file or a memory space) the current patch address and use that with the patch write.
The GR-55 patch memory works in a strange way that I have never seen before with other Roland/Boss gear,
like the system duplicates a copy of all the user patch data on startup (maybe due to the dual modes),
and to write to the permanent memory the "non addressed' write sequence transfers written data to the permanent memory.
So both write sequences are required, one to write the temporary data to a user memory address,
and the second write sequence transfers that to a more semi-permanent eeprom address,
or else the data written data is lost on power off of the GR-55.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

mbenigni

Quote from:  gumtown on November 17, 2011, 05:49:07 PM
For the magic patch write sequence, a patch address has to be allocated, so maybe there is a way to use TouchOSC to change patch and then record somewhere (to file or a memory space) the current patch address and use that with the patch write.
The GR-55 patch memory works in a strange way that I have never seen before with other Roland/Boss gear,
like the system duplicates a copy of all the user patch data on startup (maybe due to the dual modes),
and to write to the permanent memory the "non addressed' write sequence transfers written data to the permanent memory.
So both write sequences are required, one to write the temporary data to a user memory address,
and the second write sequence transfers that to a more semi-permanent eeprom address,
or else the data written data is lost on power off of the GR-55.

Really weird.  And what's weirder is this:  I'm not finding the second write to "permanent memory" to be necessary at all.  When I perform the first one, everything sticks, through patch changes and power cycles.  Very happy it works either way!  The only downside is I have to provide the patch number, vs. being able to implicitly write to the current patch, so I had to put a whole bank of Write buttons on screen - one for each of the patches in the first 16 banks.

Quote from:  gumtown on November 17, 2011, 05:49:07 PM
It should work, so long as the characters sent are in ASCII code and not the actual text (a = hex 61)
F0 41 10 00 00 53 12 18 00 00 01  61  54 F7

This did work!  I don't know why it didn't work the first time I tried it; I must have fat-fingered something...  Anyway, I still don't have anything like sequential QWERTY keyboard input available to me in TouchOSC, so the best I could come up with is a slider for each character in the title, optimized (i.e. ommitting characters I use less frequently) for the limited real estate on screen.  Here's a screen shot.  It all seems to work pretty well so far, but I have to do more testing to make sure I haven't missed something regarding that second Write cycle.

Thanks a million, Colin!  This is a huge enhancement for the iPad editor.


Elantric

#46
<Gumtown wrote>
Here is midi structure *.xml document with everything that has been manually mapped out to date (65% complete), the file is best viewed in 'grid view' from an xml document reader (like Altova XMLSpy).

http://grfloorboard.svn.sourceforge.net/viewvc/grfloorboard/midi.xml?view=log
all the editor code is there, as it is opensource too.
http://grfloorboard.svn.sourceforge.net/viewvc/grfloorboard/

The GR-55 program changes are just standard Bank number, Bank change, patch change commands with patch range from 0 to 127 before incrementing the bank change number.
The editor under construction will show you the bank, bank change and patch midi data on the botton status bar,  as well as any sysex parameter change data, if the editor is set to deBug mode from the preferences menu.
http://sourceforge.net/projects/grfloorboard/




Your sysx messages for parameter control need to start with F0 and end with F7. typical data structure is

F0 41 10 00 00 53 12 18 00 10 0A 00 4E F7      = switch Modeling Tone 'on'
F0 41 10 00 00 53 12 18 00 10 0A 01 4D F7      = switch modeling tone 'off'

F0 = sysx message header (message start)
41 = Roland device (manufacuter ID)
10 = Device midi Identity (fixed at device ID 16)
00 00 53 = Roland GR-55 identification
12 = sending parameter change data (11 = requesting data from the GR-55)
18 00 10 0A = address for modeling tone switch in Temporary memory address (10 = guitar modeling, 0A tone switch address)
00 = 'off, 01 = 'on'
4E or 4D = data checksum value
F7 = sysx message finished.

For a Patch/Bank change to U1:1
B0 00 00   = controller 0 bank change 00 is Bank 1
B0 20 00   = controller 32 bank change required to process bank change
C0 00       = patch change to patch 1

For Patch/BAnk change to U99:3
B0 00 02
B0 20 00
C0 28

Modify message
Report to moderator   Logged
Free "GR-55 FloorBoard" editor




Here is an alternative to do Patch/Bank change on the GR-55, this is quite unique to the GR-55, where instead of standard patch change data, system exclusive data is sent like this
F0 41 10 00 00 53 12 01 00 00 00 00 00 7F F7 = Patch U01:1
F0 41 10 00 00 53 12 01 00 00 00 00 7F 00 F7 = Patch U43:2
F0 41 10 00 00 53 12 01 00 00 00 01 00 7E F7 = Patch U43:3
F0 41 10 00 00 53 12 01 00 00 00 01 7F 7F F7 = Patch U86:1
F0 41 10 00 00 53 12 01 00 00 00 02 00 7D F7 = Patch U86:2
F0 41 10 00 00 53 12 01 00 00 00 02 28 55 F7 = Patch U99:3
the data is sent to the GR-55 system area.
The same data address, as a request, will also ask the GR-55 which patch it is currently on.

The problem you are going to have for each control is..
a) setting the control data range.
b) using the same data as meaningful GUI text (displaying the patch number).
c) getting the control to add header and footer data as a complete sysx message.

ForestCat

#47
Wasn't sure whether to post this in the forum, since it may be a bit much for most. 


Colin, I hope you, Marc, Elantric, etc., will weigh in on this. You guys know more than anyone re: the GR-55 sysex format.  I use the floorboard extensively in debug mode to gather strings, etc.

I'm trying to write some fairly highly abstracted(for me, anyway, lol) code in Lemur, to achieve a degree of portability between modules/maintainability, etc.

Have you found any rhyme or reason w/ the sysex implementation re: everything east of "f0 41 10 00 00 53 12 18" (seems like the start address, 18, is the same for all params?)? 

Here's what I mean:  Say you want a function, we'll call it SendSyxEx(Addr, Data) whose purpose in life, is, strangely enough, to send a sysex string to the GR.

I'm writing "pseudo-code" here for readability/simplicity, not real Lemur code, etc, but programmer types should be able to follow it.  So the function might contain something like:

*****************

DataVal = Fader1.x        //grab the value of a fader or other control
SyxString = "f0 41 10 00 00 53 12 18" + Addr + DataVal + "01 F7"  //seems like the checksums aren't mandatory, ok to just use "01"?
SendToMIDI(SyxString)    // dump the (hopefully) properly formatted sysex string to the GR

*****************
Is there some sort of rule of thumb/conversion function that could make this kind of approach work across all available params?  Or, are there major "groups" of params that share a common sysex format?

It seems to me like the values of everything between the f0-18 "header" and the checksum change in strange, mysterious ways that are tough for a dummy like me to fathom...

Can this be done with one clever function?  Five? Ten?

Where the hell is my coffee...


gumtown

OK...So you are attempting to open the lid on Pandora's box..
I will quickly type out a few brief notes:
Sysx package format
F0 = sysx start header
41 = manufacturer (Roland)
10 = unit midi ID (fixed at 10)
00 00 53 = model number (GR-55)
12 = data send  (11 = request data)
18 XX XX XX = 4 byte address, the 18 is the address range of the Temporary data patch (the current GR-55 patch)
XX = single byte data send, can be any length but starts from the given address, to receive data this must be a 4 byte data request size.
xx F7 = checksum and sysx footer (send of message)

Some of the GR-55 data is of odd size and format, one byte, two byte (MSB+LSB) and 3 byte, but only using the LSB of each byte,
for example 0F 0F 0F actually is the value FFF.
Some synth and Assign parameters centre '0' at 400 where + values are higher and - values are lower. Some values translated to parameters are not linear, requiring a data lookup table to translate parameters (what you see) to data values.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

ForestCat

Thanks, gumtown.  OK, so at least I wasn't nuts when I concluded that there wasn't a discernible pattern to what I saw coming out of the Floorboard editor.

So then, the big question:  How many different scenarios?  i.e., do 80% of the params use 1 byte, and are linear?  How many different lookup tables did you need?  Is it practical to "group" the GR parameters so that they could be given a "type" tag in my own code to redirect them to the appropriate function? 

I'm just wondering how many separate functions you had to write to handle all cases?