mungewell / zoom-zt2

Python script to install/remove effects from the Zoom G1Four pedal
MIT License
51 stars 10 forks source link

Sysex for MS-50G+ patch #70

Open thammer opened 1 month ago

thammer commented 1 month ago

Hi.

This is the sysex data for a patch from the MS-50G+ pedal. The actual patch data probably starts at offset 10 or 11 in this buffer.

The sysex message is what the MS-50G+ sends out if you change a parameter and wait for 3 seconds. It was captured using this tool: https://www.waveformer.net/zoom-explorer/

It'd be great if you could run it through your scripts and see if anything interesting pops up.

Let me know if you want the data on another format.

Cheers, Thomas

Hexadecimal format:

F0 52 00 6E 45 00 00 09 00 08  00 50 06 04 50 54 43 46 4C 01  00 00 00 02 00 00 00 06 00 00  00 00 00 00 04 00 00 00 00 00  00 00 00 57 46 00 20 53 70 61
63 65 20 00 20 20 00 00 08 10  00 00 00 07 50 00 00 08 20 00  00 00 08 70 00 00 09 00 20 00  00 08 54 58 4A 02 31 54 00 00  00 03 49 57 01 5B 03 67 03 0F
03 3A 45 02 70 0E 67 17 70 79  02 35 02 3D 31 30 14 3F 4E 11  63 0C 63 0A 7A 5F 03 41 03 01  03 0A 03 3A 4A 02 4C 03 74 03  40 77 03 13 03 4E 02 49 13 3E
4B 02 35 02 3D 03 4A 55 03 62  03 65 03 42 03 6A 13 03 4F 03  54 03 45 77 03 13 03 68 02 45  02 60 37 01 42 00 00 54 58 00  45 31 44 00 00 00 43 00 75 74

74 69 6E 67 20 00 73 6F 75 6E  64 20 73 00 75 69 74 61 62 6C  65 00 20 66 6F 72 20 6C 61 00  74 65 20 31 30 27 73 00 20 41  6D 65 72 69 63 00 61 6E 20 66
75 6E 6B 00 20 77 69 74 68 20  61 00 75 74 6F 2D 77 61 68 00  2E 00 00 00 45 44 54 20 42 10  00 00 00 41 00 31 00 10 6C 08  00 07 20 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 21 00 00 0E 12 60 00 00 00  40 01 00 00 00 00 00 00 00 00  00 00 00 04 00 00 00 00 21 00  00 42 50 47 00 00 00 20 00 28
08 08 5C 74 00 00 00 00 00 00  00 00 00 00 00 00 41 00 00 10  22 00 40 00 0C 74 01 00 00 00  00 00 00 00 00 00 00 00 00 09  00 00 00 61 00 00 12 10 16 74

00 02 10 01 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  40 10 00 00 50 08 00 00 07 40  20 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 50 52
4D 32 20 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00 0C 20  42 06 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 05 00 4E 41 4D 45 20 00
00 00 00 57 46 20 53 70 61 00  63 65 20 20 20 20 20 00 20 20  20 20 20 20 20 00 20 20 20 20  20 20 20 00 20 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00  00 00 00 3A 68 4B 45 0F F7

ASCII view of the same patch with non-printable characters replaced with apostrophe:

'R'nE'''''  'P''PTCFL'  ''''''''''  ''''''''''  '''WF' Spa
ce '  ''''  ''''P''' '  '''p'''' '  ''TXJ'1T''  ''IW'['g''
':E'p'g'py  '5'=10'?N'  c'c'z_'A''  ''':J'L't'  @w'''N'I'>
K'5'='JU'b  'e'B'j''O'  T'Ew'''h'E  '`7'B''TX'  E1D'''C'ut

ting 'soun  d s'uitabl  e' for la'  te 10's' A  meric'an f
unk' with   a'uto-wah'  .'''EDT B'  '''A'1''l'  '' '''''''
''''''''''  '!''''`'''  @'''''''''  ''''''''!'  'BPG''' '(
''\t''''''  ''''''A'''  "'@''t''''  ''''''''''  '''a'''''t

''''''''''  ''''''''''  @'''P''''@   '''''''''  ''''''''PR
M2 '''''''  '''''''''   B'''''''''  ''''''''''  ''''NAME '
'''WF Spa'  ce     '         '         ' '''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''

''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''

''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''''''''''  ''''''''''
''''''''''  ''''''''''  ''''''''''  ''':hKE''
thammer commented 1 month ago

But I haven't yet understood how to get from the 32 bit Effect ID to a 14 bit LSB + MSB in the message above.

The pedal will actually accept 5x 7-bit 'bytes', ie those extra 0x00 at the end of the packet....

I thought I had something scripted, but don't find it. Basically it would be the same as used for the CRC32 checksum upload.

            packet.append(crc & 0x7f)
            packet.append((crc >> 7) & 0x7f)
            packet.append((crc >> 14) & 0x7f)
            packet.append((crc >> 21) & 0x7f)
            packet.append((crc >> 28) & 0x0f)

That worked very well! Fantastic :-D

nomadbyte commented 1 month ago

Attached is the MS-50G+ FLST_SEQ effects index dump: ms-50gplus-flst_seq.txt

It lists 105 effects by category:

catid category neffects
0 BLK 1
1 DYN 8
2 FLT 7
3 DRV 19
4 PRE 22
5
6 MOD 22
7 SFX 6
8 DLY 13
9 REV 7

Category 5 used to be CAB on older models, while category 4 was AMP. On MS-50G+ the amps are now "scaled down" pre-amps (which do use IR profiles), and cabinets are not offered as separate modules.

nomadbyte commented 1 month ago

@thammer Two more info queries for free space on the filesystem SysEx: 60 29, and the filesystem index info SysEx: 60 11.

Again, at this stage I recommend not to experiment with unknown SysEx: 60 commands.

thammer commented 1 month ago

I think that a huge applause is needed for @thammer, he's confirmed what we suspected and has opened a new chapter...

I'd also like to ask what he wants to do. Originally he had started a project page of his own. I'd offer my support to that, if he feels that it is more on task with what he wants. I imagine that the general public want a PC/Apple app to control their pedals, and a smaller population what to experiment with uploading new effects.

Thank you for your kind words :-). You and nomadbyte's help has been invaluable to me. I would like to create a webpage/web-app where people can exchange their custom patches. It'll probably just be a client-side solution where a user connects his pedal, downloads a patch from the pedal to the web-app, converting into an ASCII string that can be shared in posts in various forums. Others can copy that patch-string into the same web-app and upload it to their pedal. Next step for me might be to create an editor, first on-line, and perhaps later as a standalone app. I'd be happy to accept contributions to the code. And I'd be happy to test out any updates you make to your tools, should you decide to support the MS-50G+.

mungewell commented 1 month ago

An online/web-midi app to adjust/control sounds like a great idea...

One thing I noted from the FLST_SEQ.ZT2 is that Zoom have used different IDs, compare to the other pedals. For Example

$ python3 zoomzt2.py -s FLST_SEQ.ZT2 | grep BOMB
0x07000040 : BOMBER.ZD2 (v1.10, 7, 1)

$ grep Bomb zoom_fx_AllZDL7/master.txt 
0x07000010 : Bomber (v1.50, 8.45%), 0xee15a464cc57161677ca42387c6085f4
0x08090010 : Bomber (v1.00, 10.06%), 0xe740dc1f514b46173b7528d04787bd0d

$ python3 zoomzt2.py -s FLST_SEQ.ZT2 | grep 0x07000010
0x07000010 : AUTOPAN.ZD2 (v1.10, 7, 1)

Which will make adapting patches a pain....

At some point we might want to ask/answer whether the older effects can be used on the MS-plus pedals. Just changing the ID will throw the MD5 off, we could dig deeper into the CODE segment to see if the structure of the binary is different.

'We' could extra the XML description, and see if (at least) the parameters for new effects match the older effects.

$ python3 decode_effect.py -x ZNR.ZD2.xml ZNR.ZD2
$ cat ZNR.ZD2.xml
{  
    "Parameters":[  
        {  
           "name":"DETCT",
           "explanation":"Sets control signal detection level.",
           "blackback":false,
           "pedal":false
        },
        {  
           "name":"Depth",
           "explanation":"Sets the depth of noise reduction.",
           "blackback":false,
           "pedal":false
        },
        {  
           "name":"THRSH",
           "explanation":"Adjusts the effect sensitivity.",
           "blackback":false,
           "pedal":false
        },
        {  
           "name":"Decay",
           "explanation":"Adjust the envelope release.",
           "blackback":false,
           "pedal":false
        }
    ]
}
thammer commented 1 month ago

@thammer Two more info queries for free space on the filesystem SysEx: 60 29, and the filesystem index info SysEx: 60 11.

Again, at this stage I recommend not to experiment with unknown SysEx: 60 commands.

Here's what I got from those queries:

F0 52 00 6E 60 29 F7 -> F0 52 00 6E 60 04 29 00 00 08 00 72 58 7A 02 00 74 2D 60 00 00 00 00 00 00 00 F7 
F0 52 00 6E 60 11 F7 -> F0 52 00 6E 60 04 11 01 00 08 00 04 00 00 68 07 00 10 0C 00 00 02 00 00 00 00 00 00 F7 
nomadbyte commented 1 month ago

MS-50G+:

Interesting, the TOTAL from the filesystem list is only 3545637 bytes, which is 1080153 short of the DiskUsage; 1MB is being used by something else.

mungewell commented 1 month ago

filesystem list is only 3545637 bytes

We already noted that FLST_SEQ.ZT2 not listed, and the block size will likely mean more space is used than reported file length.

nomadbyte commented 1 month ago

The TOTAL includes the FLST_SEQ.ZT2, I did adjust it. There are just more files that are not listed, at least not listed the "old" way.

The blocksize is 4090 bytes, so the DiskSize is 1517 blocks, DiskFree is 386 blocks. The TOTAL is 968 blocks (aggregated by file). So we're still 163 blocks short, that is 666670 bytes.

If you look at file info SysEx response, all files are attributed with 0x66='f', which may mean "file". While FLST_SEQ.ZT2 info is returned as usual with 0x00. Perhaps, there are just "unlisted" files altogether.

mungewell commented 1 month ago

OK, we also have BDL for output EQ, GUARDZDL.ZT2 for blocking some ZD2 and the raw drum samples (do the MS-plus have the drum machine??).

nomadbyte commented 1 month ago

:) None of this stuff should be on the MS-50G+, especially the GUARDZDL.ZT2 or .raw (no RHYTHM). We can try to get info for those, of course.

The whole thing is that the file info access is now partial. Maybe there's additional parameter to query all.

nomadbyte commented 1 month ago

@thammer Here's another SysEx to test, this one is related to New/Empty Patch. It may clear the currently selected patch, so for the test your may need to create and select some Test patch which is Ok if it gets cleared. It may just return a SysEx with an Empty Patch instead.

First SysEx: 64 47

Then SysEx: 64 42

thammer commented 1 month ago

@thammer Here's another SysEx to test, this one is related to New/Empty Patch. It may clear the currently selected patch, so for the test your may need to create and select some Test patch which is Ok if it gets cleared. It may just return a SysEx with an Empty Patch instead.

First SysEx: 64 47

Then SysEx: 64 42

The current patch was cleared after sending the first sysex command.

Sent: F0 52 00 6E 64 47 F7
Received: F0 52 00 6E 64 26 00 00 08 00 06 00 F7
Received: F0 52 00 6E 64 20 00 64 02 78 00 00 00 00 F7
Received: B0 00 00
Received: B0 20 08
Received: C0 06
Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 01 53 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 02 45 00 00 00 00 F7
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: C0 00
Received: F0 52 00 6E 64 20 01 5F 14 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 15 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 16 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 17 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 18 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 19 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 1A 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7
Received: F0 52 00 6E 45 00 00 08 00 06 00 50 06 04 50 54 43 46 28 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 55 53 00 45 52 2D 30 30 33 20 00 20 00 00 00 00 54 58 00 4A 31 00 00 00 00 54 00 58 45 31 00 00 00 00 00 45 44 54 42 18 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 52 4D 00 32 20 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 07 4E 41 4D 45 20 00 00 00 00 55 53 45 52 00 2D 30 30 33 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 00 00 00 00 00 2D 30 30 32 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 1D 21 00 0B F7
Received: F0 52 00 6E 00 00 F7
Sent: F0 52 00 6E 64 42 F7
Received: F0 52 00 6E 64 43 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F7
nomadbyte commented 1 month ago

...The current patch was cleared after sending the first sysex command.

@thammer Thanks for describing the test in detail. I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

...Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7 .... ...Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7

This is the new patch name (char[00]:0x55='U', .., char[1B]:0x20=' ' , "USER-003 ....").

From the output you showed, only three first letters are received ("USE"), then letters are missing, and only blanks from the letter 15. Where did the letters in the middle go?

shooking commented 1 month ago

On the B1XFour there is what I call GetMoreData that clears buffers.

GetMoreData f0 52 00 6e 60 05 00 f7 whats in buffer seems to flush the current buffer. Useful for getting clean data

So I send a command. Get response. GetMoreData. Repeat

It cleans up the decoding on the earlier pedals at least.

BTW - great work everyone.

thammer commented 1 month ago

...The current patch was cleared after sending the first sysex command.

@thammer Thanks for describing the test in detail. I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

...Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7 .... ...Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7

This is the new patch name (char[00]:0x55='U', .., char[1B]:0x20=' ' , "USER-003 ....").

From the output you showed, only three first letters are received ("USE"), then letters are missing, and only blanks from the letter 15. Where did the letters in the middle go?

If I turn off parameter edit mode by sending "F0 52 00 6E 51 F7", and then send "F0 52 00 6E 64 47 F7", I get no reply, and the pedal says "New Patch Memory Created".

If I start with an empty patch, turn on parameter edit mode by sending "F0 52 00 6E 50 F7", and then send "F0 52 00 6E 64 47 F7", I get this:

Sent: F0 52 00 6E 64 47 F7
Received: F0 52 00 6E 64 26 00 00 08 00 09 00 F7
Received: F0 52 00 6E 64 20 00 64 02 78 00 00 00 00 F7
Received: B0 00 00
Received: B0 20 08
Received: C0 09
Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 01 53 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 02 45 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 03 52 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 14 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 15 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 16 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 17 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 18 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 19 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 1A 20 00 00 00 00 F7
Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7
Received: F0 52 00 6E 45 00 00 08 00 09 00 50 06 04 50 54 43 46 28 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 55 53 00 45 52 2D 30 30 37 20 00 20 00 00 00 00 54 58 00 4A 31 00 00 00 00 54 00 58 45 31 00 00 00 00 00 45 44 54 42 18 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 52 4D 00 32 20 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 07 4E 41 4D 45 20 00 00 00 00 55 53 45 52 00 2D 30 30 37 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6A 61 5A 75 03 F7
Received: F0 52 00 6E 00 00 F7

I repeated this command, but first filled 2 effect slots, and as I got the same set of replies as for the empty patch. I don't know why I got the extra "C0 00" messages last time I tried. I'm not able to reproduce that now.

thammer commented 1 month ago

We have come far :-). One thing I still haven't figured out is how to upload a patch to the current patch memory (edit buffer) - the opposite of 64 13.

So if I for instance first send 64 13 to get the current patch data, then switch to another patch number on the pedal, or clear the current patch, I would like to know how I could send the patch data back to the pedal to update the current patch memory / edit buffer.

shooking commented 1 month ago

Have you hit the pedal with 50 (editor on) then captured packets with with your tool or WireShark? Sometimes that let find some more hidden sysex. I am guessing you are doing this but the pedal isn't emitting the special sauce?

nomadbyte commented 1 month ago

...how to upload a patch to the current patch memory (edit buffer)

Write Current Patch SysEx:28 <patch-data>; actually it's similar to the response of Get Current Patch SysEx:29.

These are "older" commands. SysEx:29 may return some garbage data at the end of the patch; it's still a valid patch, just may not be properly initialized past its end. So for getting the Current Patch/Edit Buffer use SysEx:64 13, that one includes a checksum. It may be possible to send back the received 64 12 but in my tries it did not work as expected. SysEx: 28 worked OK.

nomadbyte commented 1 month ago

@thammer Another query to dump settings, SysEx: F0 52 00 6e 64 18 00 00 64 00 F7, not sure if this model responds.

thammer commented 1 month ago

F0 52 00 6e 64 18 00 00 64 00 F7 It responded :-).

Sent: F0 52 00 6E 64 18 00 00 64 00 F7
Received: F0 52 00 6E 64 19 01 00 00 09 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F7
thammer commented 1 month ago

Have you hit the pedal with 50 (editor on) then captured packets with with your tool or WireShark? Sometimes that let find some more hidden sysex. I am guessing you are doing this but the pedal isn't emitting the special sauce?

I have created a simple web app that uses the Web MIDI API, here: https://www.waveformer.net/zoom-explorer/

I also have some code snippets that I run from a local version of that webpage that I haven't published yet, as it isn't very well structured.

So I'm basically just sending some MIDI messages to the pedal and listening to what it sends back using regular Web MIDI.

I would really like to be able to listen to the traffic between Zoom's Handy Guitar Lab for MS-50G+ (iPhone) and the pedal, but I haven't figured out a way to do that yet.

shooking commented 1 month ago

Not sure about the iPhone. If there is a Mac app then Wireshark can tun on that. I used it on Windows with the older pedals.

thammer commented 1 month ago

...how to upload a patch to the current patch memory (edit buffer)

Write Current Patch SysEx:28 <patch-data>; actually it's similar to the response of Get Current Patch SysEx:29.

These are "older" commands. SysEx:29 may return some garbage data at the end of the patch; it's still a valid patch, just may not be properly initialized past its end. So for getting the Current Patch/Edit Buffer use SysEx:64 13, that one includes a checksum. It may be possible to send back the received 64 12 but in my tries it did not work as expected. SysEx: 28 worked OK.

If I send sysex command 29, I get two short replies:

Sent: F0 52 00 6E 64 29 F7
Received: F0 52 00 6E 00 00 F7
Received: F0 52 00 6E 64 2A F7

I don't know what that means. It's way obviously too short to be a complete patch.

If I send sysex command 64 13, I get back a 985 bytes long sysex that starts with "F0 52 00 6E 64 12 01 50 06 00..."

I assume everything after (not including) the sixth byte is the patch data, ending with the 5 (7-bit) byte CRC and F7.

If I try to send that same patch data back to the pedal using sysex command 28, I get no reply, and nothing changes on the pedal.

nomadbyte commented 1 month ago

...Sent: F0 52 00 6E 64 29 F7

You need to send SysEx: 29 , not 64 29.

thammer commented 1 month ago

...Sent: F0 52 00 6E 64 29 F7

You need to send SysEx: 29 , not 64 29.

Sorry. That was a typo. If I send "F0 52 00 6E 29 F7 ", I get no reply. If I try to set the patch with "F0 52 00 6E 28 \<patch goes here> F7", I get no reply, and the pedal doesn't change state. The patch data I send start with "01 50 06 00", and ends with the 5 7-bit byte CRC.

Sent: F0 52 00 6E 29 F7
<no reply>
Sent: F0 52 00 6E 64 13 F7
Received: F0 52 00 6E 64 12 01 50 06 00 50 54 43 46 34 01 00 00 00 02 00 00 00 02 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 48 6F 00 75 6E 64 20 44 6F 67 00 20 30 00 00 08 41 00 00 00 04 54 58 4A 31 40 0A 00 00 00 03 65 01 5B 55 03 76 03 47 03 52 01 3A 5B 02 70 0E 67 17 70 79 02 35 02 3D 35 30 14 3F 4E 11 63 0F 09 0A 7A 7D 02 4C 03 0D 03 62 03 3E 4E 03 13 03 0D 01 5B 75 03 0B 03 54 03 45 03 6F 13 03 68 02 45 02 37 40 01 42 00 00 54 58 45 00 31 30 00 00 00 45 61 00 72 6C 79 20 35 30 27 00 73 20 72 6F 63 6B 20 00 27 6E 27 20 72 6F 6C 00 6C 20 73 6F 75 6E 64 00 20 77 69 74 68 20 74 00 61 70 65 20 65 63 68 00 6F 2E 00 00 45 44 54 00 42 30 00 00 00 61 00 05 00 50 25 00 00 08 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 03 00 00 48 00 78 10 00 0B 34 40 16 0C 0D 00 01 00 00 00 00 00 00 00 00 00 00 00 50 52 4D 00 32 20 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 0C 02 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 20 0B 4E 41 4D 45 20 00 00 00 00 48 6F 75 6E 00 64 20 44 6F 67 20 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 5E 25 09 0A F7
<changed patch on the pedal to something else>
Sent: F0 52 00 6E 28 01 50 06 00 50 54 43 46 34 01 00 00 00 02 00 00 00 02 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 48 6F 00 75 6E 64 20 44 6F 67 00 20 30 00 00 08 41 00 00 00 04 54 58 4A 31 40 0A 00 00 00 03 65 01 5B 55 03 76 03 47 03 52 01 3A 5B 02 70 0E 67 17 70 79 02 35 02 3D 35 30 14 3F 4E 11 63 0F 09 0A 7A 7D 02 4C 03 0D 03 62 03 3E 4E 03 13 03 0D 01 5B 75 03 0B 03 54 03 45 03 6F 13 03 68 02 45 02 37 40 01 42 00 00 54 58 45 00 31 30 00 00 00 45 61 00 72 6C 79 20 35 30 27 00 73 20 72 6F 63 6B 20 00 27 6E 27 20 72 6F 6C 00 6C 20 73 6F 75 6E 64 00 20 77 69 74 68 20 74 00 61 70 65 20 65 63 68 00 6F 2E 00 00 45 44 54 00 42 30 00 00 00 61 00 05 00 50 25 00 00 08 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 03 00 00 48 00 78 10 00 0B 34 40 16 0C 0D 00 01 00 00 00 00 00 00 00 00 00 00 00 50 52 4D 00 32 20 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 0C 02 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 20 0B 4E 41 4D 45 20 00 00 00 00 48 6F 75 6E 00 64 20 44 6F 67 20 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 5E 25 09 0A F7
<no reply>
shooking commented 1 month ago

BTW - I would like to link your work on ZoomPedalFun wiki so others can find it. If you are OK with this please send the link I should add.

I can also open up ZPF wiki if you or others would like to tabulate these new strings for the device - we cab also check if it unlocks other strings on the older pedals.

Best regards Steve

nomadbyte commented 1 month ago

...The patch data I send start with "01 50 06 00", and

@thammer The 7bit packed patch data starts with 04 50 54 43 46; SysEx: 28 is without checksum.

As for SysEx:29 giving you no response, you may want to send Editor Mode On SysEx:50 before it (51 is Off). Though, it's possible that MS-50G+ no longer supports the "older" SysEx.

thammer commented 1 month ago

...The patch data I send start with "01 50 06 00", and

@thammer The 7bit packed patch data starts with 04 50 54 43 46; SysEx: 28 is without checksum.

As for SysEx:29 giving you no response, you may want to send Editor Mode On SysEx:50 before it (51 is Off). Though, it's possible that MS-50G+ no longer supports the "older" SysEx.

I tried sending command 50 first, and then a new message with 29. This works fine with my MS-50G, but it does not work with the MS-50G+.

thammer commented 1 month ago

...The patch data I send start with "01 50 06 00", and

@thammer The 7bit packed patch data starts with 04 50 54 43 46; SysEx: 28 is without checksum.

That worked! :-D

This is the reply I got from the 64 13 message:

F0 52 00 6E 64 12 01 50 06 04 50 54 43 46 <rest of patch> <CRC> F7

I shaved off 64 12 01 50 06 from the start and added 28 instead.

F0 52 00 6E 28 04 50 54 43 46 <rest of patch> <CRC> F7

And that worked like a charm, both with and without the CRC.

nomadbyte commented 1 month ago

Great! As I mentioned earlier, SysEx:28 does not need a checksum.

thammer commented 1 month ago

Great! As I mentioned earlier, SysEx:28 does not need a checksum.

Noted.

Do we know what those 5 bytes I shaved off before the patch data represent?

64 12 01 50 06

The first two (64 12) represent the data type (patch data). But what about the remaining 3 bytes (01 50 06)?

thammer commented 1 month ago

...The current patch was cleared after sending the first sysex command.

@thammer Thanks for describing the test in detail. I wonder if all that "Received" SysEx output was from the first command or you also used the buttons/controls on the pedal after the first SysEx?

...Received: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7 .... ...Received: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7

This is the new patch name (char[00]:0x55='U', .., char[1B]:0x20=' ' , "USER-003 ....").

From the output you showed, only three first letters are received ("USE"), then letters are missing, and only blanks from the letter 15. Where did the letters in the middle go?

Yes. This is strange. I tried sending the same two commands using the MIDI-OX software, just to see if there was a problem with my code, but I got a similar reply in MIDI-OX.

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 0002B50F  MOX  2     F0  Buffer:     7 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 47 F7
 00005355   1  --     F0  Buffer:    13 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 26 00 00 09 00 05 00 F7
 00005366   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 00 64 02 78 00 00 00 00 F7
 0000562A   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 00 55 00 00 00 00 F7
 0000562A   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 01 53 00 00 00 00 F7
 0000562A   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 02 45 00 00 00 00 F7
 0000562A   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 03 52 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 15 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 16 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 17 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 18 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 19 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 1A 20 00 00 00 00 F7
 0000562C   1  --     F0  Buffer:    15 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 20 01 5F 1B 20 00 00 00 00 F7
 00005631   1  --     F0  Buffer:   989 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 45 00 00 09 00 05 00 50 06 04 50 54 43 46
 SYSX: 28 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 04 00
 SYSX: 00 00 00 00 00 00 00 55 53 00 45 52 2D 30 31 31 20 00
 SYSX: 20 00 00 00 00 54 58 00 4A 31 00 00 00 00 54 00 58 45
 SYSX: 31 00 00 00 00 00 45 44 54 42 18 00 00 00 00 01 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 50 52 4D 00 32 20 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 40 00 0C 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 07 4E 41
 SYSX: 4D 45 20 00 00 00 00 55 53 45 52 00 2D 30 31 31 20 20
 SYSX: 20 00 20 20 20 20 20 20 20 00 20 20 20 20 20 20 20 00
 SYSX: 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 1C 4A 54 30 03 F7
 00005637   1  --     F0  Buffer:     7 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 00 00 F7
 00047F8C  MOX  2     F0  Buffer:     7 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 42 F7
 00021D95   1  --     F0  Buffer:   101 Bytes   System Exclusive      
 SYSX: F0 52 00 6E 64 43 01 01 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 SYSX: 00 00 00 00 00 00 00 00 00 00 F7
thammer commented 1 month ago

BTW - I would like to link your work on ZoomPedalFun wiki so others can find it. If you are OK with this please send the link I should add.

I can also open up ZPF wiki if you or others would like to tabulate these new strings for the device - we cab also check if it unlocks other strings on the older pedals.

Best regards Steve

Hi Steve. That's kind of you. You could link to https://github.com/thammer/zoom-explorer/ and https://www.waveformer.net/zoom-explorer/. If you give me access to the ZPF wiki, I can add some of the commands I know works with the MS-50G+.

nomadbyte commented 1 month ago

...But what about the remaining 3 bytes (01 50 06)?

In SysEx: 64 12, 50 06 is length of the unpacked data, that is the patch (0x50 + 0x06*128 = 848 bytes)

nomadbyte commented 1 month ago

@thammer How did you get the SysEx: 64 26 response? You mentioned it on your repo's README. I wonder what was the SysEx request or action?

thammer commented 1 month ago

@thammer How did you get the SysEx: 64 26 response? You mentioned it on your repo's README. I wonder what was the SysEx request or action?

I first send the parameter edit enable command F0 52 00 6E 50 F7. Then, whenever I change to a different patch on the pedal using the arrow up or down buttons, the pedal will send a burst of MIDI messages. This is what happens when I change to patch number 42 using the arrow buttons:

1 Received: F0 52 00 6E 64 26 00 00 04 00 01 00 F7
2 Received: F0 52 00 6E 64 20 00 64 02 29 01 00 00 00 F7
3 Received: B0 00 00
4 Received: B0 20 04
5 Received: C0 01

Message number 1 is F0 52 00 6E 64 26 00 00 <bank> 00 <program> 00 F7. Message number 2 is tempo (169 BPM), F0 52 00 6E 64 20 00 64 02 <LSB> <MSB> 00 00 00 F7 Message number 4-5 is program and bank change, isn't it? I haven't looked too closely at it. I'm not sure why the pedal sends message number 3?

thammer commented 1 month ago

@mungewell What are your thoughts on having zoomzt2.py support the MS Plus pedals? If you're interested, I have a few small local changes that I could clean up and submit a PR for.

nomadbyte commented 1 month ago

...I'm not sure why the pedal sends message number 3?

Bank number is 2 7-bit bytes, and consists of MSB (most significant bits, as set with MIDI:B0 00) and LSB (least significant bits, MIDI: B0 20) .

I guess, MS-50G+ now supports the program change with a SysEx: 64 26. Not sure if it actually responds/reacts to this SysEx too.

mungewell commented 1 month ago

What are your thoughts on having zoomzt2.py support the MS Plus pedals?

@thammer I am all for it, from comments so far this might be as easy as adding some changes so that the different Midi identification is recognized. Please continue discussions on this topic under #71.