Program Change to NextSongPart / Sysex to PreviousSongPart

Hello

Has anyone an idea how to convert a Program Change command, no matter which number (1-16) to a NextSongPart command?

Is there a way to translate specific sysex commands to PrevSongPart command?

Thanks in advance
Mvc

You mean if a specific MID in port receives any PC command it has to ignore the PC command and produce a NextSongPart command instead? :thinking:

Could you please tell us more about this use case? Is it that your MIDI controller is not able to produce any other more appropriate MIDI message? Which controller do you use? (There is no SysEX involved here)

Hello!
Thank you in advance for your interest in my issue.
I have a Yamaha Electone ELS-02X electronic organ and want to use it as master keyboard with Gigperformer so I can use the organ with VSTs.
The Electone can manage 80 presets in one song, organized in A1-A16, B1-B16 until E16. These presets are accessible using a foot switch. Unfortunately the foot switch does not send any MIDI data. If i choose any preset like for example D11 it only sends a ā€˜Program Change 11ā€™ command, ignoring the bank A-E information. In this case, i can use Gigperformer only with 16 Song parts, since I have no possibility to give further information about the bank to Gigperformer. So I thought using Gigperformer this way: as soon as the organ sends any program change message, Gigperformer just goes one further SongPart. In case I do a mistake and go one program change too far I could use any other button on the organ which unfortunately only sends sysex data. That shuold eventually go one SongPart back in GP.
I hope there is a solution to this issue.

Thanks a lot in advance!

P. S.:
here is a vid how I use the instrument:

Here is the Midi documentation of the 02X:

6 Likes

Amazing performance, mate! Thanks for sharing, and keep the music coming! :grinning: :grinning: :grinning:

Nice playing, thanks. :+1:

GP should be able to solve your issue! :wink: The foot switch, knee lever and bank select messages are all sent via SysEx and using GPScript, GP should be able to convert these messages such that you can use them seamlessly.

Bank select A,B,C,D,E (n=0ā€¦4)
F0, 43, 70, 78, 44, 7E, 0n, 00, F7
=> I propose to convert this into regular MIDI bank select messages, such that you will be able to use them to switch rackspaces/variations, song/songparts the regular way in GP.

Left foot switch
F0, 43, 70, 70, 40, 45, 7F, F7 (ON)
F0, 43, 70, 70, 40, 45, 00, F7 (OFF)
=> I propose to transform this as a CC66 piano pedal regular MIDI message

Knee lever
F0, 43, 70, 70, 40, 47, 7F, F7 (ON)
F0, 43, 70, 70, 40, 47, 00, F7 (OFF)
=> I propose to transform this as a CC67 piano pedal regular MIDI message

CC# message make it possible to use regular GP MIDI mapping, such that you could move using previous/next rackspaces/variations, song/songparts.

Would my proposals fit to your needs?

If yes, this is the Gig GPScript which goes with my proposals:

Gig_GPScript_SysEx_to_CC_and_Bank_Select.txt (2.1 KB)


Var Electone : MidiInDeviceAlias;

On SysexEvent(s : SysexMessage) From Electone
Var                      
  sysExString : string = SM_Pretty(s, s.SM_Length(), True);

  Select
    //Bank select A..E => CC0=0, CC32=n
    sysExString == "F0437078447E0000F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(0, 0));
                                           InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(32, 0));
                                           
    sysExString == "F0437078447E0100F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(0, 0));
                                           InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(32, 1));
                                           
    sysExString == "F0437078447E0200F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(0, 0));
                                           InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(32, 2));
                                           
    sysExString == "F0437078447E0300F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(0, 0));
                                           InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(32, 3));
                                           
    sysExString == "F0437078447E0400F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(0, 0));
                                           InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(32, 4));

    //Left foot switch ON
    sysExString == "F043707040457FF7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(66, 127));
    
    //Left foot switch OFF
    sysExString == "F0437070404500F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(66, 0));
    
    //Knee lever ON
    sysExString == "F043707040477FF7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(67, 127));
    
    //Knee lever OFF
    sysExString == "F0437070404700F7" Do InjectMidiEventViaRigManager(Electone, MakeControlChangeMessage(67, 0));
  End  
End
  • open Rig Manager and define a MIDI port alias ā€œElectoneā€ for your organ MIDI port
  • open the Gig Script Editor
  • copy and paste the GPScript I made for you
  • compile
  • open the Global MIDI Monitor
  • change presets, press the foot switch, act on the knee lever
  • make a screenshot of the Global MIDI Monitor and post it here

I couldnā€™t test the GPScript, so I am not 100% sure it will do the job.

4 Likes

Wow thabk you so much. Asbsoon as I am back home Iā€™ll try! The only problem I see at this moment is the fact that I use the right foot switch, not the left one. Iā€™ll let you know

I didnā€™t see anything regarding a right foot switch, so I suppose it doesnā€™t produce any MIDI message. But, as I explained what I did is supposed to generate bank select messages for PC, so hopefully you will be able to have a GP rackspace following all your Electone PC and bank select, not only 16 PC.

Hi @mvc82, I donā€™t know how much you need what you requested, but I you tested something, it would be nice to have your feedback for other usersā€¦

Hello David
Thanks for your reminder. Unfortunately I have not been able to test it yet, because of a suddenly changed situation in my family. I think I can not test it before October unfortunately.
Cheers

1 Like

And if you can test it after, please still report your results.