Open shooking opened 2 years ago
So I created a "7fx" on a B1XFour. 5 FX are displayed but it uses 7 slots
So I created a "7fx" on a B1XFour. 5 FX are displayed but it uses 7 slots
Not sure if you had to tweak MIDI to get those 7 screens for B1X FOUR in the GL.
Looks like the patch above uses 2 "wide" effects (those that take multiple pages). So even though there are 5 effect modules in the chain, they occupy the 7 screens. This can also be done directly on the pedal itself (at least on G1 FOUR).
In fact it's possible to load "wide" effects into all of the allotted 5 positions in the chain (thus with 5*2=10 total page count). However, in practice this would be restricted by the available DSP Load.
P.S. Curiously, it looks like ToneLib Zoom (v4.3.1) has a bug that disallows adding an effect module into remaining free position when the current "page-count" exceeds the allotted number of the positions (5 for G1 FOUR). This occurs when there's a "wide" module in the chain. To work around this bug, setup the chain with "narrow" modules, then assign the "wide" modules into the intended positions by replacing the "narrow" modules.
Have people figured out how to load Wide effects on the B1/G1x Four yet?
... it's possible to load "wide" effects into all of the allotted 5 positions in the chain (thus with 5*2=10 total page count). However, in practice this would be restricted by the available DSP Load.
Well, looks like it's a ToneLib UI related behavior. The actual pedal's firmware (G1 FOUR) does not allow the operation of more that 2 "wide" (8-param) effects in the chain; it allows assignment of wide effects into all 5 positions, yet only 2 of them will be functional, the other ones will be flagged with exclamation point (DSP overload warning).
Yet 2 "wide" and 3 normal effects in the patch chain will be all functional (provided the DSP load is below ~92%).
So, with G1 FOUR and similar it looks like there's allowance for up to 7 active "slots" (22 + 31); each "wide" effect takes up 2 slots. Curiously, this yields max 28 parameters (7*4), like 7 of those mini-screens with four knobs each.
I wonder if this limitation is rather artificial (for GuitarLab UI purposes) and the pedal's DSP hardware itself is capable to operate "wide" effects in all of the 5 positions in the chain (up to the DSP load capability).
...the pedal's DSP hardware itself is capable to operate "wide" effects in all of the 5 positions in the chain (up to the DSP load capability).
Confirmed. The G1 FOUR pedal hardware is well able to operate the 5 wide effects in the chain. Attached is a photo with the same chain of effects as was shown above [FD TWNR => 3xGt GEQ7 => BG MK1], DSP load: 84%.
@shooking: If you've a chance, could you also check the G5n output from the following SysEx commands?
0x55: f052006e55f7 0x44: f052006e44f7 (0x64, 0x0a): f052006e640af7
If you have G3n (emulated on GCE-3 is ok), it'd be nice to see the output too, to compare.
@mungewell: If you still have the GCE-3, maybe you could try getting the output from the 0x55
(model info), 0x44
(bank info), and (0x64 0x0a)
(settings info) SysEx commands while in the G5n and G3n emulation mode? All of these commands are queries, that is they should not change any settings. I have the outputs for the G1 FOUR and need output from other models to make sense of it.
Sure do... is this what you wanted?
GCE3-as-G5n
$ amidi -l
Dir Device Name
IO hw:1,0,0 ZOOM GCE-3
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 55 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
96 bytes read
00000000 f0 52 00 6e 54 01 00 00 00 00 01 00 00 00 00 00 |.R.nT...........|
00000010 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 f7 |................|
00000060
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 44 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
30 bytes read
00000000 f0 52 00 6e 43 48 01 78 05 48 01 04 00 02 00 00 |.R.nCH.x.H......|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 |..............|
0000001e
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 0a 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
19 bytes read
00000000 f0 52 00 6e 64 09 75 00 01 01 05 00 00 01 00 32 |.R.nd.u........2|
00000010 06 00 f7 |...|
00000013
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 48 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
22 bytes read
00000000 f0 52 00 6e 47 01 00 00 00 00 01 00 00 00 00 00 |.R.nG...........|
00000010 00 00 00 00 09 f7 |......|
00000016
Sure do... is this what you wanted?
GCE3-as-G3n
$ amidi -l
Dir Device Name
IO hw:1,0,0 ZOOM GCE-3
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 55 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
96 bytes read
00000000 f0 52 00 6e 54 01 00 00 00 00 01 00 00 00 00 00 |.R.nT...........|
00000010 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 f7 |................|
00000060
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 44 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
30 bytes read
00000000 f0 52 00 6e 43 16 01 78 05 16 01 03 00 02 00 00 |.R.nC..x........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 |..............|
0000001e
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 0a 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
19 bytes read
00000000 f0 52 00 6e 64 09 75 00 01 00 05 00 00 01 00 32 |.R.nd.u........2|
00000010 06 00 f7 |...|
00000013
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 48 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
22 bytes read
00000000 f0 52 00 6e 47 01 00 00 00 00 02 00 00 00 00 00 |.R.nG...........|
00000010 00 00 00 00 07 f7 |......|
00000016
BTW, do you know about the 'decode_screens.py' script. This gives a representation of what's on the device's screen.
Thanks! That's the info I wanted. Can't say this makes it all clear but for sure it gives more details. Will be looking into the outputs.
Yeah, I saw the screens script -- great effort! The 'screen' basically joins the ZD2 parameters with their current values, so there is no need to separately parse out ZD2 or query it from a db -- the firmware does it nicely.
For completeness
G1 FOUR:
amidi -p hw:1,0,0 -S "f0 52 00 6e 55 f7" -t 1 -r temp.bin ; hd -v temp.bin
96 bytes read
00000000 f0 52 00 6e 54 02 00 00 00 00 01 00 00 00 00 00 |.R.nT...........|
00000010 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 f7 |................|
00000060
amidi -p hw:1,0,0 -S "f0 52 00 6e 44 f7" -t 1 -r temp.bin ; hd -v temp.bin
30 bytes read
00000000 f0 52 00 6e 43 32 00 78 05 32 00 0a 00 00 00 01 |.R.nC2.x.2......|
00000010 00 00 00 01 01 00 00 00 00 00 00 00 00 f7 |..............|
0000001e
amidi -p hw:1,0,0 -S "f0 52 00 6e 64 0a f7" -t 1 -r temp.bin ; hd -v temp.bin
15 bytes read
00000000 f0 52 00 6e 64 09 75 00 00 00 05 00 00 01 f7 |.R.nd.P........|
0000000f
amidi -p hw:1,0,0 -S "f0 52 00 6e 48 f7" -t 1 -r temp.bin ; hd -v temp.bin
22 bytes read
00000000 f0 52 00 6e 47 01 00 00 00 00 10 00 00 00 00 00 |.R.nG...........|
00000010 00 00 00 00 07 f7 |......|
00000016
P.S. Updated (0x64 0x09)
response to output BPM:117:(0x75 0x00) and Autosave:On:0x01 to be uniform with the other models above.
This is what I thought the '0x44' message meant... https://github.com/mungewell/zoom-zt2/blob/master/zoomzt2.py#L483
...This is what I thought the '0x44' message meant.
There's more detail in the output. It may deal with how to format the patch number. You may see that Guitar Lab shows patch numbers differently for these models, esp. for the G1 FOUR.
Can you also dump the 0x48
command output for the G5n and G3n? It also queries some model details, apparently something like max number of patch slots.
Can you also dump the
0x48
command
Added above.
Thanks for the quick response! As we're at it now, could you dump the same 0x48
for G3Xn (the one with the pedal) and B3n, not sure if the GCE-3 supports these? Looks like there's some model id or the like in the byte[10].
model | SysEx:0x48=>0x47, byte[10] | 1<<n |
---|---|---|
G5n | 0x01 | 0 |
G3n | 0x02 | 1 |
G3Xn | 0x04 | 2 |
B3n | 0x08 | 3 |
G1 FOUR | 0x10 | 4 |
It appears to be the same values as in the PTCF patch files at the byte[16]. It is a kind of model id but specific to the patch context.
GCE3-as-G3XN
$ amidi -l
Dir Device Name
IO hw:2,0,0 ZOOM GCE-3
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 55 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
96 bytes read
00000000 f0 52 00 6e 54 01 00 00 00 00 01 00 00 00 00 00 |.R.nT...........|
00000010 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 f7 |................|
00000060
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 44 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
30 bytes read
00000000 f0 52 00 6e 43 16 01 78 05 16 01 03 00 02 00 00 |.R.nC..x........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 |..............|
0000001e
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 0a 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
19 bytes read
00000000 f0 52 00 6e 64 09 75 00 01 00 05 00 00 01 00 32 |.R.nd.u........2|
00000010 06 00 f7 |...|
00000013
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 48 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
22 bytes read
00000000 f0 52 00 6e 47 01 00 00 00 00 04 00 00 00 00 00 |.R.nG...........|
00000010 00 00 00 00 07 f7 |......|
00000016
GCE3-as-B3N
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 55 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
96 bytes read
00000000 f0 52 00 6e 54 01 00 00 00 00 00 00 00 00 10 00 |.R.nT...........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 f7 |................|
00000060
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 44 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
30 bytes read
00000000 f0 52 00 6e 43 16 01 78 05 16 01 03 00 02 00 00 |.R.nC..x........|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 f7 |..............|
0000001e
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 0a 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
19 bytes read
00000000 f0 52 00 6e 64 09 75 00 01 00 05 00 00 01 00 32 |.R.nd.u........2|
00000010 06 00 f7 |...|
00000013
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 48 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
22 bytes read
00000000 f0 52 00 6e 47 01 00 00 00 00 08 00 00 00 00 00 |.R.nG...........|
00000010 00 00 00 00 07 f7 |......|
00000016
Thanks for the dumps.
On the 'target' ID byte in the patch/ZPTC files. I pulled a patch from each of the emulation modes of my GCE-3 to give a more complete list.
To me this does not look like a ENUM, but more like a Bitfield. Can a patch be made with 2 (or more) bits set to support multiple pedals?
==> A1FOUR_AG D-28 -1704382678561.zptc.dump <==
target = 256
==> A1XFOUR_AG D-28 -1704382711460.zptc.dump <==
target = 512
==> B1FOUR_Sans Clean-1704382620829.zptc.dump <==
target = 64
==> B1XFOUR_Sans Clean-1704382647768.zptc.dump <==
target = 128
==> B3N_Comp&Drv -1704382514749.zptc.dump <==
target = 8
==> G1FOUR_MS HiGain -1704382549329.zptc.dump <==
target = 16
==> G1XFOUR_MS HiGain -1704382588972.zptc.dump <==
target = 32
==> G3_Phazed -1704382438466.zptc.dump <==
target = 2
==> G3XN_Phazed -1704382471003.zptc.dump <==
target = 4
==> G5N_Phazed -1704382399211.zptc.dump <==
target = 1
...This is what I thought the '0x44' message meant.
There's more detail in the output. It may deal with how to format the patch number. You may see that Guitar Lab shows patch numbers differently for these models, esp. for the G1 FOUR.
Soz for delay. Some external issues to deal with. In my code I use the 0x44 as follows (see python zoomzt2_shooking.py)
# how big is patch etc
data = [0x52, 0x00, 0x6e, 0x44]
msg = sniffMidiOut("sysex", data)
self.outport.send(msg); sleep(0); msg = sniffMidiIn(self)
d = msg.data
self.numPatches = d[5] * 128 + d[4]
self.bankSize = d[11] * 128 + d[10]
self.ptcSize = d[7] * 128 + d[6]
# write out pedal state
out1 = open("model.dat", "w")
if not out1:
sys.exit("Unable to open FILE for writing")
tD = {
"model": self.model,
"numPatches": self.numPatches,
"bankSize": self.bankSize,
"ptcSize": self.ptcSize,
"version": self.version,
"gce3version": self.gce3version,
"maxFX": self.maxFX
}
Confirmed, this is a bit-field. But the check is done at the Guitar Lab, as I can actually upload any patch with my code.
Guitar Lab 'greys out' patches for the 'patch bank' list if they do not match the current pedal. But now we can set a patch with multiple of these bits set, and it will show available for any of those pedals...
"targets" / Peek(BitsSwapped(Bitwise(Struct( # Informational, does not rebuild
"g5n" / BitsInteger(1), # 0x01
"g3n" / BitsInteger(1), # 0x02
"g3xn" / BitsInteger(1), # 0x04
"b3n" / BitsInteger(1), # 0x08
"g1four" / BitsInteger(1), # 0x10
"g1xfour" / BitsInteger(1), # 0x20
"b1four" / BitsInteger(1), # 0x40
"b1xfour" / BitsInteger(1), # 0x80
"a1four" / BitsInteger(1), # 0x100
"a1xfour" / BitsInteger(1), # 0x200
Padding(6),
"b2four" / BitsInteger(1), # 0x10000
Padding(15),
)))),
"target" / Int32ul, # pedal that patch is for
"data" / Bytes(6),
I changed the '-t' flag to accept hex, to make it easier to combine values.
Interesting. Though this is potentially applicable only to compatible models. For example, G1 FOUR uses 1U and 3S effects, unlike G5n/G3n. G1 FOUR obviously lacks the expression pedal like G1X FOUR etc.
@mungewell : Can you also dump the SysEx:[0x60 0x11
] and SysEx:[0x60 0x02
] for G5n, G3n, G3Xn, and B3n? These seem to return details about the flash filesystem.
GCE3-as-G5N
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 60 11 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
29 bytes read
00000000 f0 52 00 6e 60 04 11 00 00 08 00 04 00 00 74 03 |.R.n`.........t.|
00000010 00 35 1c 00 00 02 00 00 00 00 00 00 f7 |.5...........|
0000001d
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 60 02 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
66 bytes read
00000000 f0 52 00 6e 60 04 02 01 00 31 00 00 00 00 00 00 |.R.n`....1......|
00000010 04 00 00 00 00 04 00 00 00 01 00 00 00 00 00 7f |................|
00000020 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 f7 |..|
00000042
GCE3-as-G3N
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 60 11 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
29 bytes read
00000000 f0 52 00 6e 60 04 11 00 00 08 00 04 00 00 74 03 |.R.n`.........t.|
00000010 00 35 1c 00 00 02 00 00 00 00 00 00 f7 |.5...........|
0000001d
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 60 02 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
66 bytes read
00000000 f0 52 00 6e 60 04 02 01 00 31 00 00 00 00 00 00 |.R.n`....1......|
00000010 04 00 00 00 00 04 00 00 00 01 00 00 00 00 00 7f |................|
00000020 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 f7 |..|
00000042
These appear to be the same as the GCE3-as-G5n, I think that the 'drive' contents does not change significantly as the operational mode is switch between units.
Thanks! Real G1 FOUR shows this somewhat differently:
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 60 11 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
29 bytes read
00000000 f0 52 00 6e 60 04 11 00 00 08 00 04 00 00 7f 01 ðR.n`...........
00000010 00 7e 05 00 00 02 00 00 00 00 00 00 f7 .~..........÷
0000001d
[0x7e 0x05
] is 766=0x02fe
, which seems to be number of 4KB blocks in the internal flash filesystem. From your GCE3-based output this would yield 3637
-- that would be too high of an actual G5n storage. So maybe it's a different value altogether.
SysEx:[0x60 0x02
] result is the same.
This is my G1Four, with everything possible removed....
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 60 11 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
29 bytes read
00000000 f0 52 00 6e 60 04 11 02 00 08 00 04 00 00 7f 01 |.R.n`...........|
00000010 00 7e 05 00 00 02 00 00 00 00 00 00 f7 |.~...........|
0000001d
And then, after pushing the default ZT2 and letting Guitar-Lab upload the ZD2's... usage is shown as 96%.
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 60 11 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
29 bytes read
00000000 f0 52 00 6e 60 04 11 00 00 08 00 04 00 00 7f 01 |.R.n`...........|
00000010 00 7e 05 00 00 02 00 00 00 00 00 00 f7 |.~...........|
0000001d
I installed the same ZT2 on the GCE3-as-G1Four, but Guitar-Lab didn't auto fill.... so I had to manually upload
$ cut -d ' ' -f 7 rebuild.sh | xargs python3 zoomzt2.py -I
And then the usage reports as 29%, so the GCE3 really does have that much more memory!
Wow! Thanks for the experiment.
To summarize the findings:
0x60 0x11
] does return the total number of 4KB blocks on the internal flash, bytes:[17:19];
Wondering if it is this sysex?
SEND: f052006e48f7 RECV: f052006e4701000000000100000000000000000009f7
G5n returns 9 as above (last int) G3n returns 7 B1XFour returns 7 - my guess is 5 plus rhythm + looper = 7?
Any thoughts appreciated.