mungewell / zoom-zt2

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

MS-plus ZIR format #83

Open mungewell opened 2 months ago

mungewell commented 2 months ago

figure out what we can about the 'ZIR' files

mungewell commented 2 months ago

Well, these ones are completely empty....

$ hexdump -C IR000.ZIR | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002000

$ hexdump -C IR001.ZIR | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002000

The others don't appear to show any specific structure, ie.

$ hexdump -C AC370_1U.ZIR | head
00000000  3b 6c 94 3c 6e 38 9d 3c  9b 09 a0 3c 24 04 9d 3c  |;l.<n8.<...<$..<|
00000010  c6 3e 92 3c 5e 84 80 3c  5e ad 51 3c f3 e4 1c 3c  |.>.<^..<^.Q<...<|
00000020  4a ad d2 3b 80 dc 7a 3b  b6 35 16 3b 73 d4 28 3b  |J..;..z;.5.;s.(;|
00000030  06 cf 8d 3b 89 72 f4 3b  8e ab 3e 3c 66 98 7b 3c  |...;.r.;..><f.{<|
00000040  06 6b 96 3c 29 dd a7 3c  89 e3 b1 3c 99 bd b8 3c  |.k.<)..<...<...<|
00000050  92 76 b7 3c 90 0b b6 3c  28 74 b0 3c c3 ba a6 3c  |.v.<...<(t.<...<|
00000060  a4 2d a0 3c ff d1 9a 3c  26 a7 9b 3c 86 db a0 3c  |.-.<...<&..<...<|
00000070  12 bc a4 3c a7 f1 a9 3c  6d 52 af 3c af de b1 3c  |...<...<mR.<...<|
00000080  b2 3b b2 3c 75 11 b2 3c  4b e6 ad 3c 84 60 a1 3c  |.;.<u..<K..<.`.<|
00000090  6f 0c 8e 3c f9 ef 69 3c  8a 10 37 3c ba 72 0c 3c  |o..<..i<..7<.r.<|
mungewell commented 2 months ago

https://zoomcorp.com/en/ca/news/what-is-zooms-multi-layer-ir-technology/

mungewell commented 2 months ago

So abusing Sox/Audacity, it looks like the ZIR is just a bunch of float values

$ sox -r 48k -e float -b 32 -c 1 --endian little temp.raw temp.wav

ZIR_as_WAV

Looks like freq plot repeated 3 times. 1536 samples = 512 samples each....

mungewell commented 2 months ago

quick way to generate with Construct

$ python3
Python 3.11.4 (main, Dec  7 2023, 15:43:41) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from construct import *
>>> ZIR = Array(1536, Float32l)
>>> data = ZIR.build([0.0] * 1536)
>>> outfile = open("FLAT.ZIR", "wb")
>>> outfile.write(data)
6144
>>> outfile.close()
>>> quit()

$ ls -la FLAT.ZIR 
-rw-rw-r-- 1 simon simon 6144 Sep 22 12:02 FLAT.ZIR

If you actually wanted a 'real' ZIR, I guess you'd need to read in a '.WAV' (or three), perform an 512-point FFT and write out the individual gains.