This repo contains a Python script and associated files for uploading effects to the ZOOM G Series pedals (G1Four and possibly others).
Inspired by another project, which allows for the re-packing of effects into the ZOOM F/W Installer binary. Unfortunately that technique proved unsuccessful on the G1Four. https://github.com/Barsik-Barbosik/Zoom-Firmware-Editor
The script has been tested with G1Four, it is expected/hoped that it will also work on the G1XFour, B1Four, B1XFour, G3n, G3Xn, B3n and G5n.
This project is not supported/authorized by ZOOM, use at your own risk.
The 'zoomzt2-gui.py' script uses MIDI SysEx to control the pedal, and functions on Linux and Windows. A pre-built Windows binary is provided in releases for convience for those who down have/want Python install.
In order to install a new effect, the binary for the effect must first be located - which can be extracted from the F/W Installer binary via 'Zoom-Firmware-Editor'.
Once the script is started it will attempt to connect with the pedal, if not found check the connection and press 'Connect'. Click 'Select Effect' and navigate to where you have stored the binary for the desired effect.
The 'Info' window will show some basic parameters for the effect. Click 'Install' and the effect will be uploaded to the pedal. The 'Effects' and 'Files' tabs allow you to see what is already present on the pedal.
The 'zoomzt2.py' script can alternatively be used from the command line to modify a 'FLST_SEQ.ZT2' file and/or to install/remove effects from a pedal.
The effects used by the G1Four are '.ZD2' format, these are also used on the G3n and G5n pedals. They are not compatible with the '.ZDL' effects used on the 'MultiStomp' pedals.
Mostly effect binaries are common between the G1Four and the G3n/G5n, although it would appear that some effects are imcompatible due to hardware differences - these appear to be denoted with '1U' (only one screen on G1Four) and '3S' suffixes on the filenames.
Regarding the nomenclature {effect-name-tag}{suffix}.ZD2
:
suffix | meaning | details |
---|---|---|
1U | single unit (screen) | on one-screen units the wide-effects, which have 8 parameters (controlled by 4 knobs), need to be paged over 3pages: (3params + Dummy), (3params+Dummy), (2params + Dummy); the Dummy parameters are used for paging. |
3S | 3000ms (delay) | the big-boy units in G Series are able to process 4000ms delays/reverb effects but the G1/B1/A1 FOUR units are able to handle only up to 3000ms (3sec). This is likely due to memory or processing power limits. Asking these units to produce over 3sec delay results in kinda noisy whoosh. |
For these reasons, Zoom engineers created the respective 1U, 3S versions of most but not all corresponding modules and put the respective names of the "unrestricted" modules into GUARDZDL.ZT2
to avoid possible problems if anyone tried to load such modules on the restricted hardware.
The AC-2 and AC-3 use a similar '.ZD2' effects, but they do not have a LCD display and all effects are in a special 'group 29'.
The 'zoomzt2.py' script is controlled via command line options. Primarily it used for editing the contents of '.zt2' files, but it also allows for upload/download to the pedal.
$ python3 zoomzt2.py -h
Usage: zoomzt2.py [options] FILENAME
Options:
-h, --help show this help message and exit
-d, --dump dump configuration to text
-s, --summary summarized configuration in human readable form
-b BUILD, --build=BUILD
output commands required to build this FLTS_SEQ
-A ADD, --add=ADD add effect to FLST_SEQ
-v VER, --ver=VER effect version (use with --add)
-i ID, --id=ID effect id (use with --add)
-D DELETE, --delete=DELETE
delete effect from FLST_SEQ
-t TOGGLE, --toggle=TOGGLE
toggle install/uninstall state of effect NAME in
FLST_SEQ
-w, --write write config back to same file
-R, --receive Receive FLST_SEQ from attached device
-S, --send Send FLST_SEQ to attached device
-I INSTALL, --install=INSTALL
Install effect binary to attached device
-U UNINSTALL, --uninstall=UNINSTALL
Remove effect binary from attached device
-p PATCH, --patch=PATCH
download specific patch (10..59)
-P UPLOAD, --upload=UPLOAD
upload specific patch (10..59)
The two scripts (above) use MIDI to communicate with the pedal(s), the following is my attempt to document those packets - more for interest than any real purpose.
Unless you are trying to do something funky, or are just nerdy, you don't need to know this....
Most actions are triggered by SysEx packets, and the G1Four responds on
'Address' 52 00 6e
. This may be different for other pedals in the family.
One exception is 'Select Bank/Program', which used PC/CC messages
$ amidi -p hw:1,0,0 -S 'b0 20 00 c0 03'
^ ^
| +--- Program (0..9)
+--------- Bank (0..4)
Request bank/program ID, response is in 'normal' MIDI CC/PC messages.
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 33 f7'
control_change channel=0 control=0 value=0 time=0
control_change channel=0 control=32 value=4 time=0
program_change channel=0 program=4 time=0
Configure Tempo, for drum machine/looper
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 0a 02 75 00 00 00 00 f7'
^^ ^^
++-++---- Tempo lo/hi (ie. set to 117 BPM)
Turn tuner on/off
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 0b F7'
or
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 64 0c F7'
When in 'Editor mode' the pedal will continuously send note information
3427328 + 0: 0xf052006e640bf7
3427328 + 0: 0xb0620c <- note A=1, A#=2, .. G#=b, no_note/"_"=c
3427328 + 0: 0xb06300 <- degree 1=flat, 8=perfect, f=sharp
And tuning information (440Hz = 0x05)
52855808 + 0: 0xf052006e6403000a0c0600000000f7
52886528 + 0: 0xf052006e6403000a0c0700000000f7
52913152 + 0: 0xf052006e6403000a0c0800000000f7
^^ Tuning
Some actions can only be performed when the pedal is switch to a particular mode.
Editor Mode - sends CC's/SysEx on configuration change
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 50 F7'
Exit Editor Mode
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 51 F7'
Enter PC mode
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 52 F7'
Exit PC Mode
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 53 F7'
Note: in PC mode the only function on pedal is to change Lo/Mid/Hi tone, and Volume.
Configure Current Patch Effect(s)
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 01 02 3d 17 00 00 00 f7'
^^ ^^ value lo/hi
^^ param
^^ config effect in slot (0..8)
param 0: effect on/off (0,1)
param 1: effect type
param 2: dial 1 (left most)
param 3: dial 2
param 4: dial 3
param 5: dial 4 (right most)
param 6: dial 5 (pg 2, if applicable)
param 7: dial 6
param 8: dial 7
param 9: dial 8
The 'display slot' is nominally 0 through 4. However if the patch includes 'large effects' (with more that 4 active parameters) they will consume 2 slots each, meaning that the next effect will skip a slot (be higher by 1).
For G1Four if slot is larger than allowable (ie more than 5 effects in use, but upto 8), the first slot will be affected. I assume this is to allow more effects on the G5n and G11.
Note: G1Four/similar pages the dials (on screen) in groups of 3 if more than 4 dials are active, the right most dial is used to change which are displayed.
Change Current Patch Name (character by character)
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 09 02 3d 00 00 00 00 f7'
^^ ASCII character
^^ n-th position (0..9)
09 = Patch ASCII name
Change Current Patch Volume Level (seen under 'Settings'/'Patch')
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 0a 00 3d 00 00 00 00 f7'
^^ Value
00 = Patch volume level
0a = System setting
Change Tempo (for Rythm/Looper)
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 0a 02 3d 00 00 00 00 f7'
^^ ^^ Value
02 = Tempo
0a = System setting
Change Autosave
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 64 03 00 0a 0f 01 00 00 00 00 f7'
^^ Off/On (0..1)
0f = Autosave
0a = System setting
Request Current Patch Info (need to be in 'Editor Mode')
$ amidi -p hw:1,0,0 -S 'f0 52 00 6e 29 f7'
Request Specific Patch Info (note: slightly longer reply).
$ amidi -p hw:1,0,0 -S 'F0 52 00 6e 09 00 04 09 F7'
^ ^
| +-- Program (0..9)
+----- Bank (0..4)
Read display information of current patch, which is mostly text based. (can be saved to a file and processed with 'decode_screens.py')
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 02 00 00 00 F7'
^ ^
| +-- End Screen
+----- Start Screen