GM-800 Part activation thru MIDI.

Started by bobruz, February 02, 2024, 10:42:40 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

bobruz

Hi All,

Is it possible to turn on/off individual parts in a scene via MIDI?
I don't see the feature in the Parameters guide or the reference manual.

Perhaps a CC message to access the individual parts in a scene exists or could be done.
I don't want to change the parts.  Just turn some on and off within the same scene.

Thanks for any insight in advance eh.
bobruz

gumtown

Yes you can switch all 4 parts & Rhythm by going into the ASSIGNS and selecting a Source option, setting it to a midi CC# of your choice.
A separate Assign to switch on/off each required partial.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

bobruz

Thanx Gumtown.  I just could not seem to find the right info/process.
I will check it out later.

Regards,
bobruz

xtian82

You can directly program the on/off of the parts using sysex codes, as the Boss Tone Studio does.
Here are the codes to send to the GM-800:
Part 1 On : F0 41 10 00 00 00 00 26 12 10 02 00 04 01 6A F7
Part 1 Off: F0 41 10 00 00 00 00 26 12 10 02 00 04 00 6A F7
Part 2 On : F0 41 10 00 00 00 00 26 12 10 02 01 04 01 6A F7
Part 2 Off: F0 41 10 00 00 00 00 26 12 10 02 01 04 00 6A F7
Part 1 On : F0 41 10 00 00 00 00 26 12 10 02 02 04 01 6A F7
Part 1 Off: F0 41 10 00 00 00 00 26 12 10 02 02 04 00 6A F7
Part 2 On : F0 41 10 00 00 00 00 26 12 10 02 03 04 01 6A F7
Part 2 Off: F0 41 10 00 00 00 00 26 12 10 02 03 04 00 6A F7

xtian82

Sorry, the headers was wrong, here is the correction:
Part 1 On : F0 41 10 00 00 00 00 26 12 10 02 00 04 01 6A F7
Part 1 Off: F0 41 10 00 00 00 00 26 12 10 02 00 04 00 6A F7
Part 2 On : F0 41 10 00 00 00 00 26 12 10 02 01 04 01 6A F7
Part 2 Off: F0 41 10 00 00 00 00 26 12 10 02 01 04 00 6A F7
Part 3 On : F0 41 10 00 00 00 00 26 12 10 02 02 04 01 6A F7
Part 3 Off: F0 41 10 00 00 00 00 26 12 10 02 02 04 00 6A F7
Part 4 On : F0 41 10 00 00 00 00 26 12 10 02 03 04 01 6A F7
Part 4 Off: F0 41 10 00 00 00 00 26 12 10 02 03 04 00 6A F7


admin_shawnb

Yes, sysex can work.  Generally it's much easier to simply use an ASSIGN.

Just set the source to your CC# and the target to P-1 TONE SELECT, with a target parameter of PART SWITCH.  Mode = MOMENT.

You'll need one ASSIGN per part.

Note that the MIDI part channels are configurable, and are found in BTS under System | MIDI Setting | Setting 2 (2nd page of MIDI settings).  GM-800 Parameter Guide, pg 18.  In BTS, you get to System by pressing the Menu hamburger at the very top of the screen. 

They default to MIDI channels 11-14 for parts 1 thru 4, with channel 10 devoted to the rhythm part. 

Assign info can be found in the Parameter Guide on pgs 10-11.  The Assign Target list is quite long & is found on pgs 62-66.

Anybody trying to incorporate Roland/Boss into their rigs needs to get comfy with ASSIGNs...

gumtown

#6
Quote from: xtian82 on February 05, 2024, 11:06:53 AMSorry, the headers was wrong, here is the correction:
Part 1 On : F0 41 10 00 00 00 00 26 12 10 02 00 04 01 6A F7
Part 1 Off: F0 41 10 00 00 00 00 26 12 10 02 00 04 00 6A F7
Part 2 On : F0 41 10 00 00 00 00 26 12 10 02 01 04 01 6A F7
Part 2 Off: F0 41 10 00 00 00 00 26 12 10 02 01 04 00 6A F7
Part 3 On : F0 41 10 00 00 00 00 26 12 10 02 02 04 01 6A F7
Part 3 Off: F0 41 10 00 00 00 00 26 12 10 02 02 04 00 6A F7
Part 4 On : F0 41 10 00 00 00 00 26 12 10 02 03 04 01 6A F7
Part 4 Off: F0 41 10 00 00 00 00 26 12 10 02 03 04 00 6A F7



The checksum (second to last number) will be different in each case.

F0 41 10 00 00 00 00 26 12 10 02 00 04 01 69 F7 = Part 1 On
F0 41 10 00 00 00 00 26 12 10 02 00 04 00 6A F7 = Part 1 Off
F0 41 10 00 00 00 00 26 12 10 02 01 04 01 68 F7 = Part 2 On
F0 41 10 00 00 00 00 26 12 10 02 01 04 00 69 F7 = Part 2 Off
F0 41 10 00 00 00 00 26 12 10 02 02 04 01 67 F7 = Part 3 On
F0 41 10 00 00 00 00 26 12 10 02 02 04 00 68 F7 = Part 3 Off
F0 41 10 00 00 00 00 26 12 10 02 03 04 01 66 F7 = Part 4 On
F0 41 10 00 00 00 00 26 12 10 02 03 04 00 67 F7 = Part 4 Off

Roland checksum calculator app (data offset set at byte 9 for the GM-800 system exclusive)
https://www.bwalk.com.au/Convert/Convert.html
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

gumtown

In my use case, I have set all part midi channels and general midi receive all to channel 1.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

admin_shawnb

I set them all to channel 1 also.

That makes it easy to use standard CCs - eg, CC1 controls modulation, CC7 (sometimes CC11) controls volume, CC74 cutoff (very useful!!), CC71 resonance, CC73/CC74 attack/release, CC91/CC93 chorus & reverb - across all parts in a scene.

These are used on many GM-800 voices. 

xtian82

You are right, the checksum must be calculated for each sysex frame.
I use the software "Gig Performer" to automate part selections, as well as programming Midi channels per string. The goal being, live, to be able to change guitars that do not have a GKx sensor and I use, in this case, the excellent software "Midi guitar 2" to control the sounds of the GM-800.

Here some examples extracted from the Global Rackspace script for this fonctionality:

Function retSysEx(p1 : Integer, p2 : Integer, p3 : Integer, p4 : Integer, p5 : Integer) Returns SysexMessage
  // Checksum calculation
  var
    mySysEx  : SysexMessage
    myChkSum : Integer
 
  mySysEx := # F0 41 10 00 00 00 00 26 12 00 00 00 00 00 00 F7
  SM_ChangeValue(mySysEx,  9, p1)
  SM_ChangeValue(mySysEx, 10, p2)
  SM_ChangeValue(mySysEx, 11, p3)
  SM_ChangeValue(mySysEx, 12, p4)
  SM_ChangeValue(mySysEx, 13, p5)
  myChkSum = 128 - ((p1+p2+p3+p4+p5) % 128)
  SM_ChangeValue(mySysEx, 14, myChkSum)
 
  result = mySysEx
End

On WidgetValueChanged (newValue : Double) from Part1
   // Toogle the switch selection Part1 of the GM-800
   
  if DispMess then Print("Part1 Toogle") end
  if newValue == 1.0 then
    SendSysexExternal(MidiOutST1, retSysEx(16, 2, 0, 4, 1))
  else
    SendSysexExternal(MidiOutST1, retSysEx(16, 2, 0, 4, 0))
  end 
 
End

On WidgetValueChanged (newValue : Double) from G800Level
   // Set the Part 1 level of the GM-800
   if DispMess then Print("Scene Level: " + Floor(newValue*127)) End
   SendSysexExternal(MidiOutST1, retSysEx(16, 0, 0, 19, Floor(newValue*127)))
   
End

On WidgetValueChanged (newValue : Double) from MG2Switch
   if newValue == 0.0 then
     //SetWidgetValue(MidiInMG2,0.0)
     // Change MIDI channel Rx per Part 1 to 4 -> 11 to 14
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 1, 10))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 2, 11))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 3, 12))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 4, 13))
     // Change Note source to GK In
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 8, 0))

   else
     // Change MIDI channel Rx per Part 1 to 4 -> 1
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 1, 0))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 2, 0))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 3, 0))
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 4, 0))
     // Change Note source to USB
     SendSysexExternal(MidiOutST1, retSysEx(0, 0, 6, 8, 2))
   end
End