Talk to other MIDI Designer users about MIDI Designer, iOS MIDI and related topics. Or share layouts, pages, and ideas.

Check out our Facebook Group.

Of course, if you want to send us an email, feel free.

Open problem reports

Summary of user requests

MIDI Designer
Design your perfect MIDI controller for iPad, iPhone, and now on M-powered Macs
Allow L and V to be used multiple times in "Sysex Bytes in Hex" editor - MIDI Designer Q&A

Allow L and V to be used multiple times in "Sysex Bytes in Hex" editor

0 votes
asked Sep 20, 2021 in Suggestions (Someday, Maybe) by 5din (590 points)
recategorized Sep 21, 2021 by MIDI Designer Team (Dan)
recategorized this as suggestion. I'll take your word for this not working, it frankly never occurred to me as a valid use case. We'll consider it. For now, as always, your fallback option here is to use StreamByter on the output. "When you don't have a fork, use a swiss army knife" or something...
Looking at the information above to see if I can find a solution.  Presume you are working on a CBX-K1XG, since that seems to match the base sysex codes you mention above.  Can you refer me to the page in the manual that has the message you are trying to code?  Most of the sysex messages that I can find have a three byte address in the position of your first V or L above.  Or maybe I am on the wrong XG?
Thanks, jkhiser!  I'm actually doing this for the QY70 (QY70 Data List Book, page 59).

The Systex MULTI PART parameter I'm tweaking is "Rcv Channel" (`08 nn 04 00..7F`, 7F == off).

Any XG voice can be effectively muted by turning its Rcv channel off with `08 nn 04 7F`.   It can be unmuted again by resetting its Rcv Channel back to itself (the same number): `08 nn 04 nn`—which is why it would be useful to reference the same variable twice in MD's Sysex Properties editor.
BTW, some trivia regarding using L vs V for this Rcv Channel off/on technique (which I learned from the QY-70 FAQ at https://www.johannes-emmerling.de/xp-30/QY70_FAQ.htm#shutup):

QY70 has two voice modes: a song mode with voices that respond to the normal MIDI channels 1-16, and a special pattern mode with XG midi "channels" 17-24 (used by the internal sequencer).

So in MD's Sysex Properties editor: x2 L would work fine to unmute song mode voices 1-16, but x2 V would be necessary to unmute Pattern mode voices 17-24, because MIDI channels 17-24 don't really exist.

1 Answer

0 votes
 
Best answer

So I see the challenge now.  Normally switching something on and off, you switch between two fixed values, like 0 and 1.  In this case, you are switching between 7F for off, and another variable, the channel number, for on.  I do not believe that duplicating L or V totally solves the case - it fixes the ON case, but not the off case.

This looks like an ideal opportunity for StreamByter.

And L, while termed channel, is just a single byte variable that can have any value up to 7F.  When you change the L parent control to type "channel changer" - do not accept the option to change the control to 1-16, you want it set for values up to 24.

I would make a sysex control, 43 10 4C 08 L 04 V, use the values 7F for off and 7E for on.  (The 7E is what we are going to trap in SteamByter and change to the channel number.

StreamByter output code should look like:

# Template F0 43 10 4C 08 L 04 V

IF M0 == F0 43 10 4C # Header match
   IF M4 == 08  # M4 match
      IF M6 == 04 # M6 match, so work to do
         IF M7 == 7E # On message
            Ass M7 = M5 # Set value to equal channel number
         end
      end
   end
end


 

answered Sep 23, 2021 by jkhiser (16,170 points)
selected Oct 6, 2021 by 5din
Thanks, jhkiser (especially for taking the time to annotate the sb example)

To be clear: I’m toggling between two subcontrol buttons for each sysex—so the off case already worked in native MD (as it only needs to reference the channel once).  Hard-coding the “on” control’s second value also works.  But since I want to duplicate each control 16–24 times, it would be convenient to just reference the same variable twice in a single sysex string, without needing to resort to SB scripting.

I’m still not sure why the editor prevents this, although it looks like it’s the expected behavior.
I like how clever that SB code is—it looks like it will only require a simple toggle button that way.  If I go that route and later share/upload the layout, will it include the SB code?
The Streambyter output code is part of your layout, and is saved with it.  The only limitation is that a user that loads the layout, and has not purchased the IAP cannot edit the code.

I am not the designer of MDP2, but I see more logic problems with using the values multiple times in a single instance than helping in what is an edge condition.  Is actually fairly quick to edit the individual sysex values in multiple controls, once you get moving - I have had to do it umpteen times in my layouts - sometimes 3 x 88 key values.  So I feel your pain....
Nice, glad we could get this sorted out without having to change code ;)

Thanks all!
...