Zoom Patch File
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.
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] |
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 |
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 |
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
| ||||||||
0x010 | 4 | field2 | field 2 (packed)
| ||||||||
0x014 | 4 | field3 | field 3 (packed)
| ||||||||
... | ... | ... | ... |
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)
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 |