Zoom Patch File

From evolulution-plugins
Jump to navigation Jump to search

Zoom Patch (ZPTC) file is the patch file used in Zoom Guitar Pedals. It is used mainly in N series like g5N, G3N, B3N.

It can hold maximum 9 effects, including double sized effects (amplifiers or combo effect units like reverb and delay).

It varies in size according to comments len and number of parameters but typically it's 736 bytes long.

ZPTC header
Offset Size
(bytes)
Field Purpose
0x00 4 id "PTCF" (50, 54, 43, 46) in ASCII; these four bytes constitute the magic number.
0x04 4 patchDataSize contains the size of the patch data in bytes (rest of the patch file is 0 padded)
0x08 4 gen possible zptc header file version (at this time it's 1)
0x0c 4 efSize contains the current number of available (and usable) effects boxes (see effectIdX fields below) in current patch. this number can be increased by adding or removing new effects (up to 9 maximum effects), this number is not affected if setting the effect box to unused (or empty) on the zoom unit.
0x10 8 supportRegion for now value it's 1 - possibly something related to Zoom internals
0x18 2 reserved reserved for future use
0x1a 10 patchName contains the patch name (maximum 10 chars)
0x24 4 effectId0 contains numeric id of effect 0

Some examples are:

80 00 00 04 which maps to id 0x04000080 (ORG_120) from zoom effects store

Note: 0x4000080 is a double case spaced effect so it will consume 2 effectsId spaces.

The second effectId value will be 01 00 00 00.

40 00 00 01 which maps to id 0x1000040 (ZNR) from zoom effects store

Unfortunately ZOOM managed to screw up completely this mapping so right now there isn't a clear picture

of how mapping is done some effects are bound to 0x0number while others to 0xnumber, others have hex parts (A,B,C,D) in upper case (eg. 0x080000A0) some in lowercase (0x400001a)

In order to lookup zoom effect store id probably best course is to test all possibilities and rely on local FS existence test.

0x28 4 effectId1 contains numeric id of effect 1
0x2c 4 effectId2 contains numeric id of effect 2
... ... ... ...
[0x44] [4] [effectId8] [contains numeric id of effect 8]
Patch comments (Japanese)
Offset Size
(bytes)
Field Purpose
0x00 4 sectionId "TXJ1" ( 54, 58, 4A, 31) in ASCII; these four bytes constitute the section magic number
0x04 4 commentSize size of comment string
0x08 commentSize comment comment text in Japanese
Patch comments (English)
Offset Size
(bytes)
Field Purpose
0x00 4 sectionId "TXE1" ( 54, 58, 45, 31) in ASCII; these four bytes constitute the section magic number
0x04 4 commentSize size of comment string
0x08 commentSize comment comment text in English
Effects Database (EDTB) header
Offset Size Field Purpose
0x00 4 sectionId "EDTB" ( 45, 44 , 54, 42) in ASCII
0x04 4 dbSize size of the database
0x08 4 effectId effect Id (packed)
0x0c 4 field1 field 1 (packed)

EID = effect ID *2

p1 = effect parameter 1

p2 = effect parameter 2

p3 = effect parameter 3

p4 = effect parameter 4

0 1 2 3
EID byte 0 + enable parameter EID byte 1 EID byte 2 EID byte 3 +p1 byte 0
0x010 4 field2 field 2 (packed)
4 5 6 7
p1 byte 1 p2 byte 0 p2 byte 1 + p3 byte 0 p3 byte 1
0x014 4 field3 field 3 (packed)
8 9 10 11
p3 + p4 p4 00 00
... ... ... ...

Note: It's rather un clear at this time how parameters are indexed.

Some effects have some parameters 0-indexed others start from 1.

Also there are 'option' parameters which are actually an enum of options

(eg. on/off, slow/fast, stack/combo, gtrin/efxin)

Patch parameters
Offset Size Field Purpose
0x00 4 sectionId "PPRM" (50, 50, 52, 4D) in ASCII
0x04 4 sectionSize size of the section
0x08 7 unknown unknown data (zeroes)
0x10 2 patchVolume ranging from 0 to 120. volume level formula is: (second byte &

0x3f) * 2 + first byte >> 6

eg: 80 79 decodes to level: 115

0x12 2 unknown unknown data