mungewell / zoom-zt2

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

B1On - FX ID Group decoding #30

Closed shooking closed 2 years ago

shooking commented 2 years ago

Hi Mungewell.

You did offer a while back to help brainstorm some B1On right?

So I can find some Sysex that sets 50% of the required values ... but I cannot yet work out the next part.

probeString="F0 52 00 65 31 ${hexFX} 01 ${hexValueLow} ${hexValueHigh} F7" And this sets 1st byte to 2xhexValueLow +1 2nd to hexValueHigh But not worked out how to influence the next bytes - I did try extending sentence 00 vl vh but that didnt work.

I have used the clean 1.30 B1On firmware - so that way no pedal is strictly necessary (but I do love that these B1/G1's can play most of the ZDL FX - Effect Manager 1.1.1 from some Russian source on a VM seems to work nicely!).

Anyhow here I have derived the decoded patch on a B1On - https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/FXID_GID.txt

My method was to create an empty patch. Then cycle the FX one at a time,. And set all the parameters to 0.

So for example I make Ba GEQ have 31 00 00 04 in the first 4 bytes of an FX. Recall on a B1on there are 5 slots, 18 bytes long (once processed). Most efforts to date seem to work on not understanding the crucial roles the 7bit encoding plays in the understanding.

Today I took the B1On 1.3 updater exe. And I found I could search for UK Groove (the first patch) and there it is!

So I started to decode as follows:

1.30 Firmware
1 UK Groove
    Delay == 21 00 C0 02 but I believe 11 00 00 10
    Z Tron == 21 00 20 8A but I believe 11 01 00 04
21 00 C0 02 03 50 00 0A 00 CA 23 28 02 00 00 00 00 00 
21 00 20 8A 02 50 00 0C 80 01 25 03 00 00 00 00 64 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
40 32 04 00 00 00 20 03 00 00 00 55 4B 20 47 72 6F 6F 76 65 20 00 
2 SLAP      
    PitchSHFT == 41 00 00 C2 but I believe it is 41 02 00 0c (bug?)
    M Comp == 61 00 00 84 oh 61 00 00 04 is exciter.
    Exciter == 31 00 00 C4
    Ba GEQ == well that is bypass should be 31 00 00 04

41 00 00 C2 08 30 00 64 A0 00 00 00 00 00 00 00 00 00 
61 00 00 84 07 40 01 64 00 00 00 00 00 00 00 00 00 00 
31 00 00 C4 03 70 00 0D 80 A1 C1 E1 C1 08 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
60 64 04 00 00 00 20 03 00 00 00 53 4C 41 50 20 20 20 20 20 20 00 
3 Fonk      
    D Comp == 31 00 00 42 but is 31 00 00 02 so I guess mask last byte
with 8
    M-Filter == 21 01 00 04 yup
    DuoPhase == 6b 00 00 0c (ok so this method doesnt clear P0)
31 00 00 42 01 30 00 7D 00 00 00 00 00 00 00 00 00 00 
21 01 00 04 10 30 00 08 40 00 20 40 89 0C 00 00 00 00 
6B 00 00 CC 01 48 00 23 E0 A0 40 80 C4 07 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
60 64 22 00 00 00 50 00 00 00 00 46 6F 6E 6B 20 20 20 20 20 20 00 
4 REC FAT CL
    M Comp == 41 00 00 82 == 41 00 00 02
    HRT3500 == 61 00 20 CA == 61 00 20 0A
41 00 00 82 0A 48 00 64 00 00 00 00 00 00 00 00 00 00 
61 00 20 CA 03 58 00 0C E0 01 08 05 60 00 00 00 64 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
40 50 04 00 00 00 20 03 00 00 00 52 45 43 20 46 41 54 20 43 4C 00 
5 ruff      
    Bass OD     == 41 00 80 82 == 41 00 80 02
    BassDrive   == 21 00 c0 c2 == 21 00 c0 02
    Ba GEQ      == 31 00 00 84 == 31 00 00 04
    SVT     == 21 00 20 0A == 21 00 20 0a

41 00 80 82 01 20 00 1D 60 04 00 00 00 00 00 00 00 00 
21 00 C0 C2 02 40 00 0B 20 C4 29 E7 00 00 00 00 00 00 
31 00 00 84 02 50 00 09 80 21 81 81 41 10 00 00 00 00 
21 00 20 0A 02 40 00 09 A0 C1 82 0C 60 00 00 00 64 00 
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
80 5A 04 00 00 00 20 03 00 00 00 72 75 66 66 20 20 20 20 20 20 00 

working on the others over time.

Anyhow I can see if I mask the unpacked sysex patches, as encoded in the updater, I should be able to work backward to get many of the FXIDs and GIDs.

What I am really interested in - you also found the FXID/GID is in a ZD2 for G1XFour etc. It isnt yet clear to me if this exists in a ZDL file. And yet the nice Russian dude's program seems to be allowing loading of MS-CDR70 and other pedal's ZDLs. So for the LoLs I created a firmware with the B1On's FX and a host of others. Surprisingly the FX appear to have changed FXID/GID - to be verified.

Now I also happened across the zDownload on one of the issues here .... and that is producing IDENTICAL ZD2 between pedals. So it seems to me possible that the older pedals "know" which pedal the ZDL is made for?

mungewell commented 2 years ago

I can promise to ask dumb questions.. ;-)

What is that probe message actually reading? What sort of thing... effect setting, patch, ???? probeString="F0 52 00 65 31 ${hexFX} 01 ${hexValueLow} ${hexValueHigh} F7"

I grabbed the B1on FW and extracted the ZDLs. There was not a FLST_SEQ.ZT2 (or equiv) which might have been a quick way to get the the IDs. I assume that they might be of a similar 32bit format, with ID, group and version.

Looking at the ZDL file there does not seem to be much before the actual DSP code (following ELF).

$ hexdump -C ZNR.ZDL | head
00000000  00 00 00 00 53 49 5a 45  08 00 00 00 38 00 00 00  |....SIZE....8...|
00000010  bc 2c 00 00 49 4e 46 4f  30 00 00 00 5a 4f 4f 4d  |.,..INFO0...ZOOM|
00000020  20 45 46 46 45 43 54 20  44 4c 4c 20 53 59 53 54  | EFFECT DLL SYST|
00000030  45 4d 20 56 45 52 20 31  2e 30 30 00 01 01 00 00  |EM VER 1.00.....|
00000040  50 00 00 01 31 2e 30 30  00 00 00 00 7f 45 4c 46  |P...1.00.....ELF|
00000050  01 01 01 40 00 00 00 00  00 00 00 00 03 00 8c 00  |...@............|
00000060  01 00 00 00 b4 02 00 00  7c 26 00 00 1c 27 00 00  |........|&...'..|
00000070  00 00 00 00 34 00 20 00  05 00 28 00 24 00 23 00  |....4. ...(.$.#.|
00000080  00 00 00 00 00 00 00 00  00 00 00 00 d8 0f 10 03  |................|
00000090  66 e2 9b 0f 7c 21 c6 31  13 88 00 10 4c 01 27 46  |f...|!.1....L.'F|

Your listing suggests that ZNR.ZDL is Group 0x02 and ID 0x0000a1. https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/FXID_GID.txt#L12

mungewell commented 2 years ago

So it looks like there IS a FLST_SEQ.ZDT file in there, I remember that the JAR tool only lists files if knows about... maybe there's a another way to grab it?

B1on_v1.30_Win_E/extract/.rsrc/1041/BIN$ hexdump -C 136 | grep _SEQ
000034b0  46 4c 53 54 5f 53 45 51  2e 5a 44 54 ff ff ff ff  |FLST_SEQ.ZDT....|
00005dd0  46 4c 53 54 5f 53 45 51  2e 5a 44 54 ff ff ff ff  |FLST_SEQ.ZDT....|
00007dd0  46 4c 53 54 5f 53 45 51  2e 5a 44 54 ff ff ff ff  |FLST_SEQ.ZDT....|
000094b0  46 4c 53 54 5f 53 45 51  2e 5a 44 54 ff ff ff ff  |FLST_SEQ.ZDT....|
002e7840  65 63 74 54 79 70 65 5f  53 45 51 5f 46 69 6c 74  |ectType_SEQ_Filt|
002e7bc0  66 65 63 74 54 79 70 65  5f 53 45 51 5f 46 69 6c  |fectType_SEQ_Fil|
002e7c50  69 63 45 66 66 65 63 74  54 79 70 65 5f 53 45 51  |icEffectType_SEQ|
mungewell commented 2 years ago

Looks like you can get directly at the patches via the 133 file.

$ python3 ~/SearchBin-github/searchbin.py -t "UK Groove" *
Match at offset:           1125          465 in  133

00000400  21 00 c0 02 03 50 00 0a  00 ca 23 28 02 00 00 00  |!....P....#(....|
00000410  00 00 21 00 20 8a 02 50  00 0c 80 01 25 03 00 00  |..!. ..P....%...|
00000420  00 00 64 00 01 00 00 00  00 00 00 00 00 00 00 00  |..d.............|
00000430  00 00 00 00 00 00 01 00  00 00 00 00 00 00 00 00  |................|
00000440  00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|
00000450  00 00 00 00 00 00 00 00  00 00 40 32 04 00 00 00  |..........@2....|
00000460  20 03 00 00 00 55 4b 20  47 72 6f 6f 76 65 20 00  | ....UK Groove .|

Since these are in the binary, and also that the ASCII name is not encoded (7bit <-> 8bit), why would the rest be???

For the G1Four, the EBTG section of the patch was a weird bit reversed format, and the parameters were either 12 or 8 bits (and not aligned to the original bytes).

Remember this is with the bytes reversed... https://github.com/mungewell/zoom-zt2/blob/master/decode_preset.py#L39

mungewell commented 2 years ago

If we focus on the 'UK Groove' patch, what are the values for each of the parameters for each effect in the patch? ie. as shown on the pedal itself.

Rough first stab... b1on_test.py.zip

shooking commented 2 years ago

Hi there. Well this opens up a lot of interesting avenues for investigation.

I invited you to the ZoomPedalFun github. My hope is we can wiki some of this for others.

I didn't get the 133 file business. But I have managed to decode the parameters etc based on your work. The code in under the B1ON directory.

Today my Pi won't boot off the SSD. Got to fix that then I will document the UK Grove both what is on screen, in the dumps and what i decode. Later on the 8 bit patch data seems to be there. That's what got me to see the FXID and GID in the firmware albeit just for the Patches.

On Wed, 4 Aug 2021, 06:57 mungewell, @.***> wrote:

If we focus on the 'UK Groove' patch, what are the values for each of the parameters for each effect in the patch?

Rough first stab... b1on_test.py.zip https://github.com/mungewell/zoom-zt2/files/6928933/b1on_test.py.zip

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/mungewell/zoom-zt2/issues/30#issuecomment-892385468, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFO7EVYRZXYAJRWRBYPIUODT3DJFVANCNFSM5BPQKXGA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .

shooking commented 2 years ago

OK so I used WIKI on my site to summarise what I had found to date: https://github.com/shooking/ZoomPedalFun/wiki/De-re-B1On

FXM_ID.sh -> this can set the FXID but not the group. Recall on the B1XFour there are additional parameters to the sysex that sets the group as well. If you get it wrong you get missing.

Pi is still restoring. I had to copy all the data off the SSD then reformat it. Lost bootloaders etc.

shooking commented 2 years ago

So I manually decoded the UK groove here

https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/Patches/UKGroove.txt

I would like to get my Pi back before I send you on a wild goose chase. So what I want to do is confirm that when I set patch parameters, dump the sysex, then decode it that I get the right results. I am sure I did - but the data from the B1On firmware seems a bit odd.

shooking commented 2 years ago

Ok I updated again

So the sysex I thought was related to the UK Groove in the firmware is quite different from what ends up in the pedal. I updated https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/Patches/UKGroove.txt to reflect fresh capture. I also posted the bit masks I use to pull out the parameters from the 7->8 data,. I found it helps to consider 5 x 18 bytes for FX1 - 5 then FX6 seems to write into the next area (volume?) and finally you get to the names.

So I am pretty confident I can pull out the correct parameter decode - it's the FXID I am after.

I got these by inference (setting pedal FX, setting parameters to 0 .. oh look the first 4 bytes seem to be the FXID and GID). It seems to me similar patterns exist in the firmware.

Really intrigues on what means 133 files.

shooking commented 2 years ago

finally your hint about the pattern for ZDL was gratefully accepted. I used it and some other python to pull out the ZDLs I will compare them with other ZDLs tomorrow - getting late here

https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/README.md

mungewell commented 2 years ago

I think that you are misunderstanding the patch format, it seems that you don't have the 'enabled' bit accounted for (the LSB of the 1st byte). I have adapted my code now you explain the parameter settings and get this decode from Midi.

I am not confident on param5..8, if you post sample with more parameters active we can tweak.

        reversed = Container: 
            control = Container: 
                param8 = 0
                param7 = 0
                param6 = 0
                param5 = 100
                unknown2 = 0
                param4 = 10
                param3 = 70
                param2 = 30
                param1 = 565
                unknown = 0
                id = 134217736 (0x8000008)
                enabled = True

You are right that the binary and decoded midi are not the same, the parsing does not work on the binary one.

From binary:
00000000: 21 00 C0 02 03 50 00 0A  00 CA 23 28 02 00 00 00  !....P....#(....
00000010: 00 00 21 00 20 8A 02 50  00 0C 80 01 25 03 00 00  ..!. ..P....%...
00000020: 00 00 64 00 01 00 00 00  00 00 00 00 00 00 00 00  ..d.............
00000030: 00 00 00 00 00 00 01 00  00 00 00 00 00 00 00 00  ................
00000040: 00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  ................
00000050: 00 00 00 00 00 00 00 00  00 00 40 32 04 00 00 00  ..........@2....
00000060: 20 03 00 00 00 55 4B 20  47 72 6F 6F 76 65 20 00   ....UK Groove .
None

From midi (after 7bit -> 8bit)
00000000: 11 00 00 50 8D F0 00 46  40 01 80 0C 00 00 00 00  ...P...F@.......
00000010: 00 00 11 01 00 84 02 28  00 19 80 0C 00 00 00 00  .......(........
00000020: 00 00 00 00 21 00 20 8A  02 50 00 0C 80 01 25 03  ....!. ..P....%.
00000030: 00 00 00 00 64 00 01 00  00 00 00 00 00 00 00 00  ....d...........
00000040: 00 00 00 00 00 00 00 00  01 00 00 00 00 00 00 00  ................
00000050: 00 00 00 00 00 00 00 00  00 00 40 32 04 00 00 00  ..........@2....
00000060: 20 03 00 00 00 55 4B 20  47 72 6F 6F 76 65 20 00   ....UK Groove .

b1on_test.py.zip

mungewell commented 2 years ago

I was right about the JAR project only shows some files... https://github.com/Barsik-Barbosik/Zoom-Firmware-Editor/blob/31539401b470af380100dcab726d26887e00a663/src/main/java/zoomeditor/controller/ApplicationController.java#L148

Can you see if you can use the csplitb technique to extract the ZDT file? I think that the ZDT will be fairly readable and might confirm the IDs/Groups for the effects.

mungewell commented 2 years ago

Managed to pull it, though it's not too useful - just the ASCII names. b1on_flst_seq

mungewell commented 2 years ago

The description here does not seem to match what you had suggested, is it possible that the patch has been overwritten on your pedal? https://tonelib.net/forums/threads/factory-a0-uk-groove.275/

Effect: "BassDrive" (Overdrive / Distortion), active - "yes"
"Bass" = 2​
"Trebl" = 0​
"Prese" = 0​
"Gain" = 80​
"Blend" = 30​
"Level" = 65​
"Mid" = 7​
        reversed = Container: 
            control = Container: 
                param8 = 0
                param7 = 0
                param6 = 17 (mid 7, if -10..+10)
                param5 = 65 (level)
                unknown2 = 0
                param4 = 7760 (gain and blend??? - something wrong here)
                param3 = 10 (pres 0)
                param2 = 10 (treble 0)
                param1 = 12 (bass +2, if -10..+10)
                unknown = 0
                id = 23068688 (0x1600010)
                enabled = True
mungewell commented 2 years ago

Fixed

        reversed = Container: 
            control = Container: 
                param8 = 0
                param7 = 17
                param6 = 65
                param5 = 30
                param4 = 80
                param3 = 10
                param2 = 10
                param1 = 12
                unknown = 0
                id = 23068688
                enabled = True

b1on_test.py.zip

shooking commented 2 years ago

Snap on the FLST_SEQ.ZDT - I had posted it here:

https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/B1On_ExamineGroupID_From_Catalog_Firmware_Dump.txt

So it seems to me the byte after the 3e3e3e 00 is related to the GID. I can rationalize them all except for the Folder ID 5 (SVT).

What I suggest I do is make a list over the weekend of factor restored patch v parameters v decode.

I am pretty sure I get them right (although I only tested all the parameters of a random sample of the 100 presets).

The enabled part - IIRC this is reason for x1 in 1st byte. x0 would be off (which we can control via sysex).

I also posted a question to Barsik incase he had some idea if the FXID/GID is encoded in the ZDL itself OR an artifact of installing the FX on the pedal.

If it is the latter, then I need to discover the equivalent (if it exists) of your live pedal state dump.

On a side note I just got me a Zoom GCE. About to make a YT video on it then will be seeing what can be controlled via midi. It's tiny - but claims to be able to store and emulate most of the pedals. Just how much fun can one have for £60 quid these days!

shooking commented 2 years ago

Interesting! So for sure I reinstalled the 1.30 firmware to the B1On. BUT ... that wasnt enough to reset it. So then I followed the "hold down HOME" and switch on Now my 1st patch is still UK Grove but has FX: Bass Drive: display Bass:2, Trebl: 0, Prese: 0, Gain:80, Blend: 30, Level: 65, Mid: 7 midi value: 12. 10, 10, 80, 30, 65, 17 FX: SVT: display Bass: 0, Mid: 0, Trebl: 0, Mid_F: 200Hz, Gain: 40, Level: 25, Ultra: off, CAB: SVT, Mix:50 midi values: 10, 10, 12, 12, 40, 25, 0, 0, 50

Effect: "BassDrive" (Overdrive / Distortion), active - "yes" "Bass" = 2​ "Trebl" = 0​ "Prese" = 0​ "Gain" = 80​ "Blend" = 30​ "Level" = 65​ "Mid" = 7​

    reversed = Container: 
        control = Container: 
            param8 = 0
            param7 = 17
            param6 = 65
            param5 = 30
            param4 = 80
            param3 = 10
            param2 = 10
            param1 = 12
            unknown = 0
            id = 23068688
            enabled = True

Perfect!!

A bingo - and it makes more sense to me now.

mungewell commented 2 years ago

I'm not suggesting that you pillage ToneLib's forum, but they do have a decode for each of the factory patches https://tonelib.net/forums/forums/zoom-b1on-b1xon.14/page-9

They also have a download in their own format, which might also be a 3rd way to confirm things.

You mentioned (noticed) the byte after '>>>' in FTSL_SEQ, you may be correct that this is a group. Knowing FX used in the patches (from Tonelib) and their groups, you may be able conclude whether the ID in the decode is correct.

shooking commented 2 years ago

Excellent idea. I will ask my Pi to churn our the patches and decode them. Then try to build descriptions in git. Meantime like you suggest I will see what tonelib is up to. I will recreate from my pedal for consistency. But we already know Tonelib isn't really reading the pedal since it doesn't know about new FX. I strongly suspect it rewrites the patches from store FX snippets. Hence why I started to look for alternative approach.

shooking commented 2 years ago

hi so I wrote sysex (0x29) patches out plus their "all parameters 0" here: https://github.com/shooking/ZoomPedalFun/tree/main/B1ON/DerivedData/1.30

I also added Total_Decode.txt which is my current decode status.

I will make a start looking at the ToneLib - I suspect they used 1.21 firmware. In which case I will try to reload that and generate content for that state to compare.

I am reasonably positive the same names ZDL gives different FXID numbers. So I plan to find some examples from say a CDR70, inject it, test itex).

I dont think I got the FXID/GID decoding wrong - but so long as I get it right in the end I will be happy. Doesnt help if I cannot discover the magic sysex (except to know what to inject in full patch sysex).

I got me a GCE-3. Fun - 65 00 10 00 rather than B1X 65 00 00 00. Lots of new sysex sentences to try! I think I will open up a folder on my github to collate the info. It is doing the FLST_SEQ trick - nice.

shooking commented 2 years ago

hi @mungewell I think I can sort of decode the FX/GID from a ZDL now. I would appreciate a 2nd opinion .. never sure if one should use 128 or 256 as a multiplier!!

You can see my full decode/comparison here: https://github.com/shooking/ZoomPedalFun/blob/main/B1ON/DerivedData/NewerDecodeLogicForFX.txt

# -*- coding: ascii -*-
import sys

def check(name):
    f = open(name, "rb")
    f.read(64)
    x = f.read(8)
    f.close()
    print( "{} {} {} {}".format( hex(x[0]), hex(x[1]), hex(x[2]), hex(x[3]) ) )
    mult = 256
    if x[2] & 0xC0 == 0:
        print("{} \t\t{} {} {}{}{}{}".format(name, hex( x[1] * mult + x[0] ), hex(x[3]) ,
            chr(x[4]), chr(x[5]), chr(x[6]), chr(x[7])) )
    else:
        print("{} \t\t{} {} {}{}{}{}".format(name, hex( x[1] * mult + x[0] ), hex(( (x[3] * mult) + (x[2] & 0xC0)) >> 4) ,
            chr(x[4]), chr(x[5]), chr(x[6]), chr(x[7])) )

if __name__ == "__main__":
    if len(sys.argv) == 2:
        check(sys.argv[1])

As you discovered, the modern ZT2 format stores the GID, type and version. The B1On doesnt. But I lucked out today. No idea why but I got attracted to 0x40 offset of a ZDL. And well the above python (checkme.py) reads the FXID, GID and version from a ZDL.

F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>more checkme.bat
@echo off
del decodeFLST_SEQ.txt
for /f %%g in (FLST_SEQ.txt) do python checkme.py %%g >> decodeFLST_SEQ.txt

@echo on
``

I downloaded and installed the "Zoom Effect Manager - 1.1.1\". It has files\effects files.

Now when one sets the FXID via sysex it doubles value and adds 1.
Alas I have not worked out how to send the GID also. Bummer.

There is some trickery to do with if 3rd byte (index 2) has top 2 bits set.. If yes, then GID = ((byte[3] & 0x0F) << 8) + byte[2] & 0xC0) >> 5.
That;s if the hex is 256 rather than 128.

Otherwise I got to scale it back a bit.

The key thing is I can obtain numbers from the patch and from the ZDL and I can find a way to correlate them.
I do hit on exception above with a GID - I will look into it

F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>python checkme.py "_BASSDRV.ZDL" 0x10 0x0 0x60 0x1 _BASSDRV.ZDL 0x10 0x14 1.00

F:\Interests\Guitars\Zoom Effect Manager - 1.1.1\files\effects>python checkme.py _BASSMUF.ZDL 0x30 0x0 0x40 0x1 _BASSMUF.ZDL 0x30 0x14 1.00



So the 0x140 does seem to imply they should be in same group. FLST_SEQ suggests otherwise.
I will check later in the week
![FXGID_FROM_ZDL](https://user-images.githubusercontent.com/22934103/133660164-9220b409-7669-4594-bdff-8d4ab8a38666.png)
.
shooking commented 2 years ago

FXGID_FROM_ZDL

shooking commented 2 years ago

Closing as I managed to find where in a ZDL the IDs are stored. On a B1On we can only set part of the FXID - we cannot change the group with a short sysex command. The only viable way I know is to send full patch.