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

Also check out the Facebook Group.

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

MIDI Designer
Design your perfect MIDI controller for iPad, iPhone and iPod touch.
Fender Cyber Twin SE Receive Midi Status - MIDI Designer Q&A

Fender Cyber Twin SE Receive Midi Status

0 votes
asked Aug 24 in How does MIDI Designer work with X? by tugql (280 points)

5 Answers

0 votes

Progress - I Think


MIDI Target Manufacturer(s): Other/Unlisted Maker

I've posted the following to StreamByter Page:

G'Day,

I'm trying to use data from a SysEx dump to send CC messages.
Not sure if this is possible so I'm following the advice in the help message and asking for assistance.  :) 

For starters, I have a limited understanding of Midi implementation so you'll have to bear with me if I use incorrect terminology.

What I'd like to do is put the data from an amplifier preset dump into an array of some sort and then call on specific "cells" and send as CC to a layout in Midi Designer.
 Here's an example of what the Amp sends to MD:

f0 08 21 12 02 00 00 00 00 53 74 61 64 69

75 6d 00 20 52 6f 63 6b 20 20 0a 20 20 40

5a 21 6a 14 2f 07 61 78 6e 03 36 03 00 00

20 7f 00 7f 7f 7f 00 7f 7f 7f 7f 79 7f

Here’s what I think I know

f0 08 21 12 02 00 = start to sysex message.

00 00 = Preset Number. C00 in this case.

53 74 61 64 69 75 6d 00 20 52 6f 63 6b 20 20. = Preset name. Stadium Rock in this case.

The rest should be specifying tone stack type, tone stack position, drive circuitry, effect type, reverb type, timbre, etc as well as Volume, Gain,Treble, Middle, Bass, Presence and Reverb.
I can work that out by changing parameters on the Amp and seeing what changes in the Sysex message. (I've also asked Fender for a translation but not holding my breath on that one)

I know I could be dreaming here but I'd like to give it a crack and I've purchased StreamByter so why not? 8-) 

Thanks in Advance  :) 

Images
MD Log for One Preset Send
MD Log for One Preset Send
answered Aug 24 by tugql (280 points)
Yes, it is possible to have MDP2 pro decode all this, and position the controls correctly, even if you don't get any more info from the mfr.  Unfortunately, sort of stacked up with a few other projects, so gonna take a few days until I can write out a complete approach for you.  Ping me if I haven't posted something by the end of the weekend.
Thanks Mate, very much appreciated.
I'm running through it now identifying/confirming what dial changes on Amp change the "numbers" in the dump.
I thought I had one confirmed as volume BUT dial settings 1-5 equate to 0H-74H & then at dial 6 it goes back to 12H and starts climbing again to 7EH at dial 10 so I'm guessing there must be two parameters for volume? Looking for it.
We're back in lockdown here so this will keep me occupied for a while I'm sure!!
Pinging as requested. ;-)
Looking at the fender cyber se manual, at first glance it looks like the sysex format is completely defined on pages 29-30.  However, digging deeper, there is lots of missing information.  In the transmit presets message, the format does not specify which preset is requested.  Without further data, you are doing exactly what you have to do to decode - keep everything static except one control.  Move it to min - snapshot, move to max - snapshot, then compare.  Tedious, but once you get into the swing it goes fast.  One thing I liked to do is to drop the sysex messages into a spreadsheet to do auto compares.  Takes a little setup, but the decoding goes much faster once you have it formatted.

Also, you are looking at the "one preset" message - you might also want to look at the "utilities" message - 01H.  Some of the data you need might be there.

The outbound message shows a parameter number followed by a parameter value, what you have tried in your code below.  But I don't see any such pattern in the inbound sysex, suspect it is just the data values in preset positions.

Are there any fender forums, where someone may have already completed the decoding?  Once you have the coding in hand, building the layout is straight forward.
Thanks @JKhiser
The preset requested (and rxd) is the active/selected preset. Confirmed.
See attached page screenshot below.
I'm doing as you suggest..all static & moving one at a time. What is complicating this are some interdependencies eg VOL, GAIN, TRE, MID & BASS all affect 32 (All number are DEC and some controls I've named, I'm not fluent in HEX...Yet!!)

I'd already setup a spreadsheet and have been plugging away at it...very tedious indeed!! Auto compares is a great idea, thanks.
I hadn't considered a Utilities dump so will investigate that as well.

No joy with Fender forums and Fender themselves claim they have no data?? Not even archived!!!

As you say, I'll be fine with the layout once I've got the map in order.

Just to state the objective again. I have a layout that was engineered and shared by ctreitzell (An excellent layout). The beauty of MDP2 in this application is being able to get some space between you and the amplifier when adjusting tones etc. Being able to get the current settings and then sending them to the layout so I know the "starting point" is what I'm after.
0 votes

Yes!


MIDI Target Manufacturer(s): Other/Unlisted Maker
The Midi standard states the first byte of a SysEx is F0 and the last byte is F7. The 2nd byte is the Manufacturer's id. 08 is assigned to Fender. Following bytes may represent model numbers. You need to find which bytes may change and what values they represent.

I decoded a message for an application I have. I found that by changing values that the values were in bytes 10 (MA) and 11 (MB). In addition, values from 0 to 9 were in byte 10 and values 10 and above were in bytes 10 and 11, But the unit value switched from byte 10 to byte 11. Not consistent!

My Input Rules are:

IF M0 == F0 7D 01 00 # Received Master General LCD message
  IF MA == 20 # no general selected
    SND B8 09 00
  END
  
  IF MA != 20
    IF MB == 20 # value is <10
      MAT J5 = MA - 30 #J5 => 1 to 9
      SND B8 09 J5 #CC 9 09 J5 = Mast Gen digit value (1 to 32)
    END
    
    IF MB != 20
      MAT J5 = MA - 30 # Tens value 3t - 30 = t
      MAT J5 = J5 * A # t * 10 = 10, 20, 30, ...
      MAT J6 = MB - 30 # Units value 1 to 9
      MAT J5 = J5 + J6 # J5 = 10*t + u = 1 to 99
      #SND B7 J5 00 #test
      IF J5 > 99
        ASS J5 = 0
      END
      SND B8 09 J5 #CC 9 09 J5 = Mast Gen digit value (1 to 99)
    END
  END
END
answered Aug 26 by dsabou2062 (1,920 points)
Thanks for the script above...I'm learning to translate it.

I've discovered that the real action WRT the dials starts at byte 33 (B33). The previous info is as described above and also the preset name.

What is happening is that B33 is at 0FH for volume levels 1-5 and then changes to 1FH for volume levels 6-10.
B36 increases from 00H to 7FH for volume levels 1- 5 and then repeats for 6 - 10 after B33 switches over.

This I could handle BUT B33 is also changing with changes in Gain (B37) and Treble (B38) so I need to map this all out which I'm slowly progressing through.

Additionally, I thought I'd let MDP2 do the mapping work me by creating a page with sliders for B33, B36,B37 and B38.
Working through it. Thanks again for the advice.
My LCD message included multiple changes, but I was detecting only one at this time. The first IF, detects the desired SysEx was being received. Many CC messages were constantly being received that bypassed the code. The second IF then detected if the message was the one I needed to decode. I found byte 10 would always be 20H if my message were not present.

You may want to use StreamByter for your final solution to prevent unwanted messages from being processed by MDP.
@ dsabou2062
Now that I've deciphered what you are doing in your script (and I understand it!), that process is going to be very helpful. Thanks.
As you pointed out in your last sentence, I needed to filter out the unwanted messages which were causing me grief:
if M0 == F0
if ML == $55
Assign I0 = $24 #  INDEX  
Assign I1 = $24
While MI0 != F7
Send B0 I1 MI0
calc I0 = I0 + 1
calc I1 = I1 + 1
End
 End
End

I now have a page with knobs (tried sliders but prefer knobs for visual ID of changes) that are mapped to the message values.
It's going to take a while to sort out due to numerous interdependencies of the controls which I sort of alluded to in my previous comment. I'm focussing on EQ and Gain (Front Controls) first and will tackle effects later.
I read somewhere about the possible splitting of the messages and use of MSB/LSB. I'm yet to educate myself on the intricacies of that subject :-0
0 votes

Analysis Page


MIDI Target Manufacturer(s): Other/Unlisted Maker
The page being used to read the SysEx message.
Images
CTSE Page
CTSE Page
answered Aug 30 by tugql (280 points)
0 votes

EQ and Gain Data


MIDI Target Manufacturer(s): Other/Unlisted Maker

This the matrix of the message data for Byte 32 of the 55 Byte Sysex message compared to the Amp dial settings.

All 5 Amp dials (Vol, Gain, Treb, Mid & Bass) are interrelated with Byte 32 as shown in table.
Vol, Gain, Treb, Mid & Bass are Bytes 35-39 respectively.
I used "Hi" & "Lo" for dial settings because they are identical for each control.
As an example, the two red bordered areas show Volume Hi (6-10 on the dial) and Volume Lo (1-5 on the dial) when others are all at Hi setting (dial 6-10).

Any ideas on how I can translate all this into single CC values for each control?


 

Images
CTL 32 Matrix 1MB 2.jpeg
CTL 32 Matrix 1MB 2.jpeg
answered Aug 30 by tugql (280 points)
edited Sep 1 by tugql
0 votes

Cracked Open


MIDI Target Manufacturer(s): Other/Unlisted Maker
Bits 1- 5 of Byte 32 are switching bits for Bass, Middle, Treble, Gain & Volume respectively.

IF ML == $55        # Message is 55 bytes ?

calc I35 = M$32 & 10 # Vol

calc J35 = M$35 / 2

IF I35 == 10

    calc J35 = J35 + $64

end

Send B2 $103 J35

calc I36 = M$32 & 08 # Gain

calc J36 = M$36 / 2

IF I36 == 08

    calc J36 = J36 + $64

end

Send B2 $102 J36

calc I37 = M$32 & 04 # Treble

calc J37 = M$37 / 2

IF I37 == 04

    calc J37 = J37 + $64

end

Send B2 $104 J37

calc I38 = M$32 & 02 # Middle

calc J38 = M$38 / 2

IF I38 == 02

    calc J38 = J38 + $64

end

Send B2 $105 J38

calc I39 = M$32 & 01 # Bass

calc J39 = M$39 / 2

IF I39 == 01

    calc J39 = J39 + $64

end

Send B2 $106 J39

End
answered Sep 9 by tugql (280 points)
...