mungewell / zoom-zt2

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

What about Zoom G2-Four pedals and their effects? #64

Open maximka1812 opened 1 year ago

maximka1812 commented 1 year ago

Are they also ZD2? They have some new multi layered IR cabinets and stuff.

nomadbyte commented 11 months ago

You mean the G2 FOUR, not the older G2. Do you have one and willing to explore?

mungewell commented 11 months ago

Assume that OP means the G2-Four, so updated the title.

As I understand Zoom has only released app for iPhone/Android, and does not support these pedals via PC. I saw note that iPhone needs a special cable. I can't image that that Zoom would use older format with the fact that these pedals implement IR modeling.

Personally I considered getting one (B2-Four though), but haven't found the right excuse to spend the $250... anyone want to sponsor? LOL

maximka1812 commented 11 months ago

I have B1 Four only.

My understanding is that G1 Four acoustic modelling is using some short IRs already. At least this is that Zooms tells.

Can be cool to find arrays containing IR data and write simple utility to replace them with user IRs, it don't require any code changes.

mungewell commented 11 months ago

@maximka1812 The decode_bdl.py script I pushed at the weekend can also be (ab)used to replace any symbol in the ZD2/BDL code segment.... so if you wanted to (say) replace an IR, in theory that would be possible. Although I recommend it's used with care....

At present it is set up to decode/encode TBLs as float32, but trivial to change to some other format.

The '--list' option will dump a list of all the symbols that exist, if one is called 'COOL_IR_TBL' that would be a suspicious target :-)

$ python3 decode_bdl.py --help
usage: decode_bdl [-h] [-o OUTPUT] [-l] FILE

positional arguments:
  FILE                  File to process

options:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        output adjusted BDL to FILE
  -l, --list            list available symbols
Licarde commented 11 months ago

I have B2 four.

I'm interested in this project because I only have Android smartphones that doesn't support zoom pedals except G1/G1X.

nomadbyte commented 11 months ago

@Licarde: Do you have a PC (preferably with Linux on it) or such to try out MIDI connectivity? At least to see if the pedal presents itself as a MIDI port.

mungewell commented 11 months ago

@Licarde Hi, I don't know how familiar you are with Midi so please excuse if I'm too simple...

Basically the Pedals are controlled via midi packets, normally a PC would send a series of SysEx packets to query/control the device settings. Midi is normally 7-bit data, SysEx is one of the exceptions where the packets starts with 0xF0 and ends 0xF7. The first 3 bytes of the packet are an 'address', the reset are vendor specific. We see that the 4th byte seems to be a 'command' with following bytes being data

We have figured out that all the pedals (we've tested so far) respond on the same 'address' and thus can be queried/controlled.

For example @nomadbyte had me run the following commands on my GCE-3, whilst it was pretended to be a number of pedals.... https://github.com/shooking/ZoomPedalFun/issues/7#issuecomment-1853222327

ie. 'cmd_44'

$ 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

I don't know off the top of my head how to send SysEx midi from an Android phone, but it must be possible.... I guess the first thing is to work that out, and then have you try the same on your B2-Four pedal to see if it responds the same.

Licarde commented 11 months ago

I'm a very beginner at both MIDI and Python. Please excuse.

I have Windows only. But if I'm in college, I can use Ubuntu in my lab.

Licarde commented 11 months ago
$ amidi -l
Dir Device    Name
IO  hw:2,0,0  ZOOM B2 FOUR MIDI 1

$ 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 20 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 02 f7  |................|
00000060
nomadbyte commented 11 months ago

Cool!

Can you dump these too? All these are info commands, no changes.

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

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

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

amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 11 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 18 00 00 64 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin
Licarde commented 11 months ago

Here you are.

$ 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 2c 02 40  06 2c 02 0a 00 02 00 00  |.R.nC,.@.,......|
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 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 02 00 00  00 00 00 00 04 00 00 00  |.R.nG...........|
00000010  00 00 00 00 06 f7

$ 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

62 bytes read
00000000  f0 52 00 6e 64 09 30 01  01 00 0a 00 00 01 01 32  |.R.nd.0........2|
00000010  0f 00 07 00 00 00 00 00  01 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 32 32 32 3c  01 00 00 00 00 00 00 00  |....222<........|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 01 f7        |..............|
0000003e

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 11 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

12 bytes read
00000000  f0 52 00 6e 64 10 0e 02  04 01 01 f7              |.R.nd.......|
0000000c

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 18 00 00 64 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

313 bytes read
00000000  f0 52 00 6e 64 19 01 00  00 1d 00 0a 00 00 00 00  |.R.nd...........|
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 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 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  f7                       |.........|
00000139
nomadbyte commented 11 months ago

Thanks, lots of new details.

Here's a bash script to list the files on the pedal's internal flash:

#!/bin/bash

sig_int() {
  exit 2
}

port=hw:2,0,0  # your B2 FOUR port 

sysex_find_first="f0 52 00 6e 60 25 00 00 2a 2e 2a 00 f7"  # *.*
sysex_find_next="f0 52 00 6e 60 26 00 00 2a 2e 2a 00 f7"
sysex_find_end="f0 52 00 6e 60 27 f7"

sysex=$sysex_find_first

while
  amidi -p $port -S "$sysex" -t 1 -r temp.bin > /dev/null || exit 1
  trap sig_int INT TERM EXIT

  [ -s temp.bin ] && ( tail -c +16 temp.bin | head -c 12 | cut -d '' -f1 > temp1.bin )
  [ -s temp1.bin ] && cat temp1.bin
  sysex=$sysex_find_next

  [ -s temp1.bin ]
do true ; done

amidi -p $port -S "$sysex_find_end" -t 1 -r temp.bin > /dev/null

Copy the script's text into a file, then make it executable chmod +x thefile, then run ./thefile

It lists the file names, one per line.

Licarde commented 11 months ago
$ ./b2four_list 
DUMMY.WAV
INFBKUP.BIN
IR000.ZIR
IR001.ZIR
IR_INFO.BIN
B_OUT_EQ.BDL
LP-MONO.ZIC
LP-ST.ZIC
OUT_VP.ZIC
RHYTHM.ZIC
SOLID1.BDL
MINIMARK.ZD2
SOLID2.BDL
MNTONEAU.ZD2
SOLID3.BDL
SOLID1.ZIC
TUBE1.BDL
SOLID2.ZIC
TUBE2.BDL
SOLID3.ZIC
TUBE3.BDL
TUBE1.ZIC
Clap.raw
ClapAmb.raw
Click.raw
HHC.raw
HHCAmb.raw
HHF.raw
HHO.raw
HHOAmb.raw
Kik1.raw
Kik2.raw
KikAmb.raw
Ride.raw
Rim.raw
RimAmb.raw
Snr1.raw
Snr2.raw
Snr3.raw
Snr4.raw
SnrAmb.raw
Tamb.raw
TomF.raw
TomFAmb.raw
TomH.raw
TomL.raw
160_COMP.ZD2
160_COMP.ZIC
AC370_1U.ZD2
AC370_1U.ZIC
AC370_1U.ZIR
AG750_1U.ZD2
AG750_1U.ZIC
AG750_1U.ZIR
AIR5G.ZD2
AIR5G.ZIC
ANDLY_M.ZD2
ANDLY_M.ZIC
A_FILTER.ZD2
A_FILTER.ZIC
B15N_1U.ZD2
B15N_1U.ZIC
B15N_1U.ZIR
BASSWAH.ZD2
BASSWAH.ZIC
BASS_BB.ZD2
BASS_BB.ZIC
BASS_PHA.ZD2
BASS_PHA.ZIC
BA_CRY.ZD2
BA_CRY.ZIC
BA_DRV1U.ZD2
BA_DRV1U.ZIC
BA_FZSML.ZD2
BA_FZSML.ZIC
BA_GEQ1U.ZD2
BA_GEQ1U.ZIC
BA_METAL.ZD2
BA_METAL.ZIC
BA_OCTFZ.ZD2
BA_OCTFZ.ZIC
BA_PEQ.ZD2
BA_PEQ.ZIC
BA_PRE.ZD2
BA_PRE.ZIC
BA_TSDRV.ZD2
BA_TSDRV.ZIC
BBB_OD.ZD2
BBB_OD.ZIC
BLACKOPT.ZD2
BLACKOPT.ZIC
BMN1001U.ZD2
BMN1001U.ZIC
BMN1001U.ZIR
BOMBER.ZD2
BOMBER.ZIC
BPLSHFT.ZD2
BPLSHFT.ZIC
BRGTHALL.ZD2
BRGTHALL.ZIC
BRGTROOM.ZD2
BRGTROOM.ZIC
BSTDSYN.ZD2
BSTDSYN.ZIC
BSYNTLK.ZD2
BSYNTLK.ZIC
B_ATWAH.ZD2
B_ATWAH.ZIC
B_DETUNE.ZD2
B_DETUNE.ZIC
B_MOCT.ZD2
B_MOCT.ZIC
B_OCTAVE.ZD2
B_OCTAVE.ZIC
B_OD.ZD2
B_OD.ZIC
B_PDLMNP.ZD2
B_PDLMNP.ZIC
B_PDLPIT.ZD2
B_PDLPIT.ZIC
B_PITCH.ZD2
B_PITCH.ZIC
B_ST_CHO.ZD2
B_ST_CHO.ZIC
B_VFLNG.ZD2
B_VFLNG.ZIC
CLONECHO.ZD2
CLONECHO.ZIC
CRNTRI5G.ZD2
CRNTRI5G.ZIC
DARK_OD.ZD2
DARK_OD.ZIC
DCOMP.ZD2
DCOMP.ZIC
DEFRET.ZD2
DEFRET.ZIC
DELAY_M.ZD2
DELAY_M.ZIC
DI5.ZD2
DI5.ZIC
DIPLUS1U.ZD2
DIPLUS1U.ZIC
DI_OFF.ZIC
DJNTPR.ZIC
DRKPRE1U.ZD2
DRKPRE1U.ZIC
DUADLY_M.ZD2
DUADLY_M.ZIC
DUAL_CMP.ZD2
DUAL_CMP.ZIC
DJNTPR.ZD2
EBH3601U.ZIC
EBH3601U.ZIR
EGFLTR1U.ZD2
EGFLTR1U.ZIC
ENV_FLTR.ZD2
ENV_FLTR.ZIC
EPSTMP5G.ZD2
EPSTMP5G.ZIC
EXCITER.ZD2
EXCITER.ZIC
GLAMCOMP.ZD2
GLAMCOMP.ZIC
HALL5G.ZD2
HALL5G.ZIC
HDHALL5G.ZD2
HDHALL5G.ZIC
HIGH_EQ.ZD2
HIGH_EQ.ZIC
HLDDLY1U.ZD2
HLDDLY1U.ZIC
HLDDLY88.ZIC
EBH3601U.ZD2
HPS.ZIC
KKFLNG1U.ZD2
KKFLNG1U.ZIC
LINPRE.ZD2
LINPRE.ZIC
LMT1176.ZD2
LMT1176.ZIC
LOOPROLL.ZD2
LOOPROLL.ZIC
LOW_EQ.ZD2
LOW_EQ.ZIC
MB_COMP.ZD2
MB_COMP.ZIC
TUBE2.ZIC
MINIMARK.ZIC
MINIMARK.ZIR
TUBE3.ZIC
MNTONEAU.ZIC
MNTONEAU.ZIR
MODDLY_M.ZD2
MODDLY_M.ZIC
NYC_MUFF.ZD2
NYC_MUFF.ZIC
OPTCOMP.ZD2
OPTCOMP.ZIC
PDLVOL5G.ZD2
PDLVOL5G.ZIC
PDL_RESO.ZD2
PDL_RESO.ZIC
PHASER.ZD2
PHASER.ZIC
PH_DIST.ZD2
PH_DIST.ZIC
PITCHSHF.ZD2
PITCHSHF.ZIC
PLTREV5G.ZD2
PLTREV5G.ZIC
PRE73.ZD2
PRE73.ZIC
RCBST5G.ZD2
RCBST5G.ZIC
ROOM5G.ZD2
ROOM5G.ZIC
RVRSDL_M.ZD2
RVRSDL_M.ZIC
SEQFLTR.ZD2
SEQFLTR.ZIC
SLWATK.ZD2
SLWATK.ZIC
HPS.ZD2
SOLPRE.ZIC
SPLITTER.ZD2
SPLITTER.ZIC
SPLOPR.ZD2
SPLOPR.ZIC
SPRING5G.ZD2
SPRING5G.ZIC
SQUEAK5G.ZD2
SQUEAK5G.ZIC
STBGEQ1U.ZD2
STBGEQ1U.ZIC
SUNN_AU.ZD2
SUNN_AU.ZIC
SUNN_AU.ZIR
SUPERCHO.ZD2
SUPERCHO.ZIC
SVT_1U.ZD2
SVT_1U.ZIC
SVT_1U.ZIR
SWR4001U.ZD2
SWR4001U.ZIC
SWR4001U.ZIR
TAPECH_M.ZD2
TAPECH_M.ZIC
TE400_1U.ZD2
TE400_1U.ZIC
TE400_1U.ZIR
THEVIBE.ZD2
THEVIBE.ZIC
TREMOLO.ZD2
TREMOLO.ZIC
TS_BST1U.ZD2
TS_BST1U.ZIC
VOODOO_B.ZD2
VOODOO_B.ZIC
ZNR.ZD2
ZNR.ZIC
Z_SYN_1U.ZD2
Z_SYN_1U.ZIC
Z_TRON.ZD2
Z_TRON.ZIC
FLST_SEQ.ZT2
SOLPRE.ZD2
nomadbyte commented 11 months ago

Wow! Thanks for the list, at least we now know what's in the box, so to speak.

extension description
.ZIC effect icon (Zoom ICon format)
.BDL built-in effect module
.ZD2 effect module
.ZT2 effect module sequence list (FLST_SEQ.ZT2)
.raw rhythm drum-kit sample (raw format)
.ZIR IR data (Zoom format)
.WAV IR sample (??? DUMMY.WAV)
.BIN some binary data (??? maybe the IR db and its backup)

Some notes:

nomadbyte commented 11 months ago

B2 FOUR has 300 user patches, 10 patches per bank (30 banks).

Here's how to dump a selected patch and the current edit buffer. For the test, you need to select some of preset patch, say, "001: DamnTime2022" and then dump the data, so we could compare the patch/buffer size.

## Enable Editor Mode
amidi -p hw:2,0,0 -S 'F0 52 00 6e 50 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

## Show current Bank and Program (Bank-MSB, Bank-LSB, Prog)
amidi -p hw:2,0,0 -S 'F0 52 00 6e 33 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

## Dump current edit buffer
amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 13 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

## Dump selected patch (Bank-MSB:[00 00], Bank-LSB:[00 00], Prog:[00 00])
amidi -p hw:2,0,0 -S 'F0 52 00 6e 46 00 00 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

## Disable Editor Mode
amidi -p hw:2,0,0 -S 'F0 52 00 6e 51 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

If you want to select a patch directly, just pass it's Bank (MSB, LSB) and Prog MIDI codes. It's just common MIDI (not SysEx), so should work even without Editor Mode, well, it used to.

## Select the third patch in the second bank (2*10 + 3 = 23, "023"); indexes are 0-based

amidi -p hw:2,0,0 -S 'B0 00 00 00 B0 20 01 00 C0 02' -r temp.bin -t 2; hexdump -C -v temp.bin
mungewell commented 11 months ago

WOW! Here I am on MST, and when I wake up it's like Santa's Elves have been super busy :-)

@Licarde Thank you so much for this testing and the information you have provided is super helpful.

It would seem that the B2-Four pedal is a very close relative of the B1-Four, and the fact that it is responding to these commands suggests that it would work OK with the Python scripts as they are. The scripts also run with Python on Windows, I used the py2exe method to include a 'pre-built' binary in the zip under the Releases sections

https://github.com/mungewell/zoom-zt2/releases

The scripts need the Construct module, and use WX-Windows for their GUI display. You mention that your college's lab run Ubuntu, do you have scope for installing additional Python modules?

BTW what are your interests/hopes with/for this project? Are you studying programming??

mungewell commented 11 months ago
  • ZD2 files for B2 FOUR are likely different from what was made for older models

Although we can't (for copyright reasons) share these files, I did upload a 'master list' of all the effects that are referenced in Guitar-Lab and this includes the MD5 sums of the ZD2 file.

https://github.com/mungewell/zoom-zt2/blob/master/zoom_fx_AllZDL7/master.txt

The GUI script contains has a 'download' button on the 'files' tab, if one or two ZD2 could be manually downloaded and checksum'ed that would answer that question.

nomadbyte commented 11 months ago

... it is responding to these commands suggests that it would work OK with the Python scripts as they are.

Well, it's still a new device. So, it'd be more prudent to keep the initial analysis in read-only mode until we figure out what's the same, what's different.

It's tempting to use the zoom-zt2 tool, yet maybe it would be better to use the amidi to dump out data, then safely figure out the differences and chart the next stage.

Licarde commented 11 months ago

@mungewell Thanks to you too!! I'm in guitar band club and my motivation is to use the B2 four for both guitar and bass.

@nomadbyte I agree that we should be careful. If the dumped data is completely different from other models, I should not use the tool.

nomadbyte commented 11 months ago

@Licarde: So far B2 FOUR protocol appears very much similar to that of G1/B1 FOUR model family, but we still need to figure out some details, such as:

  1. patch size and format, including the size and format of the edit buffer (dump the data mentioned in the comment above)

  2. size and contents of the effect sequence file: FLST_SEQ.ZT2:

    • for the size, dump the data:

      $ amidi -p hw:2,0,0 -S 'f0 52 00 6e 60 25 00 00 46 4c 53 54 5f 53 45 51 2e 5a 54 32 00 f7' -r temp.bin -t 2; hexdump -C -v temp.bin
    • for the contents, we'll script the dumps also using amidi
  3. internal flash size, dump the data:

      $ amidi -p hw:2,0,0 -S 'f0 52 00 6e 60 29 f7' -r temp.bin -t 2; hexdump -C -v temp.bin
  4. patch edit commands;

  5. details on the effect files; we have some head start on that already, but some questions remain.

Eventually, we may gather enough details to come up with some alternative editor for this model.

Licarde commented 11 months ago

"DamnTime2022"

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 50 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

7 bytes read
00000000  f0 52 00 6e 00 00 f7                              |.R.n...|
00000007

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 33 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

8 bytes read
00000000  b0 00 00 b0 20 00 c0 00                           |.... ...|
00000008

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 13 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

966 bytes read
00000000  f0 52 00 6e 64 12 01 40  06 04 50 54 43 46 3c 01  |.R.nd..@..PTCF<.|
00000010  00 00 00 02 00 00 00 06  00 00 00 00 00 00 01 00  |................|
00000020  00 00 00 00 00 00 00 44  61 00 6d 6e 54 69 6d 65  |.......Da.mnTime|
00000030  32 20 30 00 00 00 02 60  00 00 00 04 20 00 00 05  |2 0....`.... ...|
00000040  00 00 00 00 00 00 00 00  00 00 10 00 00 1c 54 58  |..............TX|
00000050  4a 00 31 54 00 00 00 32  30 5f 14 4e 11 63 0f 09  |J.1T...20_.N.c..|
00000060  0a 6e 7a 03 5f 03 13 03  58 57 01 45 03 7e 03 05  |.nz._...XW.E.~..|
00000070  01 2a 5b 03 57 03 62 03  4e 75 02 4c 03 74 03 42  |.*[.W.b.Nu.L.t.B|
00000080  03 6a 13 03 4b 01 5b 03  73 57 03 62 03 4c 03 13  |.j..K.[.sW.b.L..|
00000090  03 3b 4f 02 49 13 4b 02  35 77 02 3d 03 4e 03 0a  |.;O.I.K.5w.=.N..|
000000a0  01 3a 5b 03 13 03 54 03  45 77 03 13 03 68 02 45  |.:[...T.Ew...h.E|
000000b0  02 60 37 01 42 00 00 54  58 00 45 31 44 00 00 00  |.`7.B..TX.E1D...|
000000c0  43 00 6c 65 61 6e 20 73  6f 00 75 6e 64 20 73 75  |C.lean so.und su|
000000d0  69 00 74 61 62 6c 65 20  66 00 6f 72 20 66 69 6e  |i.table f.or fin|
000000e0  67 00 65 72 70 69 63 6b  69 00 6e 67 20 69 6e 20  |g.erpicki.ng in |
000000f0  65 00 61 72 6c 79 20 32  30 00 27 73 20 64 61 6e  |e.arly 20.'s dan|
00000100  63 00 65 20 6d 75 73 69  63 00 2e 00 00 00 45 44  |c.e music.....ED|
00000110  54 20 42 10 00 00 00 01  01 20 00 04 04 60 00 06  |T B...... ...`..|
00000120  60 00 00 06 60 60 40 01  00 00 00 00 00 00 00 00  |`...``@.........|
00000130  00 25 00 41 00 00 48 08  48 00 00 00 64 40 10 50  |.%.A..H.H...d@.P|
00000140  04 00 5d 01 00 00 00 00  00 00 00 00 00 00 41 00  |..]...........A.|
00000150  00 03 0a 09 4c 00 0c 70  00 08 07 08 50 10 09 00  |....L..p....P...|
00000160  00 00 00 00 00 00 00 00  00 00 01 00 00 00 00 00  |................|
00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000180  00 00 00 00 00 01 00 00  00 00 00 00 00 00 00 00  |................|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001a0  21 00 00 00 38 00 00 00  00 00 00 00 00 00 00 00  |!...8...........|
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 50 52 4d 32  |............PRM2|
000001c0  20 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00  | ...............|
000001d0  0c 20 42 06 00 00 00 00  00 00 00 00 08 00 02 00  |. B.............|
000001e0  00 02 00 00 00 00 00 50  06 00 4e 41 4d 45 10 00  |.......P..NAME..|
000001f0  00 00 00 44 61 6d 6e 54  69 00 6d 65 32 30 32 32  |...DamnTi.me2022|
00000200  20 00 20 00 00 00 00 00  00 00 00 00 00 00 00 00  | . .............|
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000270  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000280  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000300  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000310  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000320  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000330  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000340  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000350  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000360  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000370  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000380  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000390  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003c0  69 42 14 7c 05 f7                                 |iB.|..|
000003c6

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 46 00 00 00 00 00 00 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

970 bytes read
00000000  f0 52 00 6e 45 00 00 00  00 00 00 40 06 04 50 54  |.R.nE......@..PT|
00000010  43 46 3c 01 00 00 00 02  00 00 00 06 00 00 00 00  |CF<.............|
00000020  00 00 01 00 00 00 00 00  00 00 00 44 61 00 6d 6e  |...........Da.mn|
00000030  54 69 6d 65 32 20 30 00  00 00 02 60 00 00 00 04  |Time2 0....`....|
00000040  20 00 00 05 00 00 00 00  00 00 00 00 00 00 10 00  | ...............|
00000050  00 1c 54 58 4a 00 31 54  00 00 00 32 30 5f 14 4e  |..TXJ.1T...20_.N|
00000060  11 63 0f 09 0a 6e 7a 03  5f 03 13 03 58 57 01 45  |.c...nz._...XW.E|
00000070  03 7e 03 05 01 2a 5b 03  57 03 62 03 4e 75 02 4c  |.~...*[.W.b.Nu.L|
00000080  03 74 03 42 03 6a 13 03  4b 01 5b 03 73 57 03 62  |.t.B.j..K.[.sW.b|
00000090  03 4c 03 13 03 3b 4f 02  49 13 4b 02 35 77 02 3d  |.L...;O.I.K.5w.=|
000000a0  03 4e 03 0a 01 3a 5b 03  13 03 54 03 45 77 03 13  |.N...:[...T.Ew..|
000000b0  03 68 02 45 02 60 37 01  42 00 00 54 58 00 45 31  |.h.E.`7.B..TX.E1|
000000c0  44 00 00 00 43 00 6c 65  61 6e 20 73 6f 00 75 6e  |D...C.lean so.un|
000000d0  64 20 73 75 69 00 74 61  62 6c 65 20 66 00 6f 72  |d sui.table f.or|
000000e0  20 66 69 6e 67 00 65 72  70 69 63 6b 69 00 6e 67  | fing.erpicki.ng|
000000f0  20 69 6e 20 65 00 61 72  6c 79 20 32 30 00 27 73  | in e.arly 20.'s|
00000100  20 64 61 6e 63 00 65 20  6d 75 73 69 63 00 2e 00  | danc.e music...|
00000110  00 00 45 44 54 20 42 10  00 00 00 01 01 20 00 04  |..EDT B...... ..|
00000120  04 60 00 06 60 00 00 06  60 60 40 01 00 00 00 00  |.`..`...``@.....|
00000130  00 00 00 00 00 25 00 41  00 00 48 08 48 00 00 00  |.....%.A..H.H...|
00000140  64 40 10 50 04 00 5d 01  00 00 00 00 00 00 00 00  |d@.P..].........|
00000150  00 00 41 00 00 03 0a 09  4c 00 0c 70 00 08 07 08  |..A.....L..p....|
00000160  50 10 09 00 00 00 00 00  00 00 00 00 00 00 01 00  |P...............|
00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000180  00 00 00 00 00 00 00 00  00 01 00 00 00 00 00 00  |................|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001a0  00 00 00 00 21 00 00 00  38 00 00 00 00 00 00 00  |....!...8.......|
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001c0  50 52 4d 32 20 00 00 00  00 00 00 00 00 02 00 00  |PRM2 ...........|
000001d0  00 00 00 00 0c 20 42 06  00 00 00 00 00 00 00 00  |..... B.........|
000001e0  08 00 02 00 00 02 00 00  00 00 00 50 06 00 4e 41  |...........P..NA|
000001f0  4d 45 10 00 00 00 00 44  61 6d 6e 54 69 00 6d 65  |ME.....DamnTi.me|
00000200  32 30 32 32 20 00 20 00  00 00 00 00 00 00 00 00  |2022 . .........|
00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000270  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000280  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000002f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000300  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000310  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000320  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000330  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000340  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000350  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000360  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000370  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000380  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000390  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000003c0  00 00 00 00 69 42 14 7c  05 f7                    |....iB.|..|
000003ca

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 51 F7' -r temp.bin -t 2; hexdump -C -v temp.bin

7 bytes read
00000000  f0 52 00 6e 00 00 f7                              |.R.n...|
00000007
nomadbyte commented 11 months ago

Here it is, more differences:

Again, looks like similar PTCF format to one used with G1/B1 FOUR (G5n platform), yet different.

Ok, done with the patch info for now. Thanks to @Licarde we're learning bit-by-bit about the multi-effect platform evolution!

Once you've the access to amidi, let's continue to the FLST_SEQ.ZT2 info and the internal flash size.

mungewell commented 11 months ago

@Licarde Again, many thanks for helping us out.

Don't forget that the midi data is 7bit, and needs to be converted to 8bit to interpret.

[edit] Moved the discussion about decoding B2-Four preset to #67

mungewell commented 11 months ago

@nomadbyte I started adding ability to automatically de-pack from SysEx dumps, and noticed that my code uses different 'cmds' to read patch data.

Should these be updated??

[edit] Yes... see #68

nomadbyte commented 10 months ago

Happy New Year! Hope it started well for all of you here.

@Licarde: Any progress with continuing the B2 FOUR exploration dumps?

Licarde commented 10 months ago

@nomadbyte Happy New Year!

I am very busy this month. So I'm not able to contribute to the project. Sorry.

nomadbyte commented 10 months ago

@Licarde : Understood, no problem. Life priorities require attention. Join back in, when you'll have a chance!

nomadbyte commented 8 months ago

I'm currently trying to get B2 FOUR output from the following SysEx commands. All deal with patch details.

Say, select the first preset '001 - DamnTime2022' and then do:

amidi -p hw:2,0,0 -S "f0 52 00 6e 64 02 00 07 00 f7" -r temp.bin -t 2; hexdump -C -v temp.bin

amidi -p hw:2,0,0 -S "f0 52 00 6e 64 47 f7" -r temp.bin -t 2; hexdump -C -v temp.bin

amidi -p hw:2,0,0 -S "f0 52 00 6e 64 42 f7" -r temp.bin -t 2; hexdump -C -v temp.bin

@Licarde Any chance you could try this out?

Licarde commented 4 months ago

Recently, I am able to help with this project again. But I am unable to run the code because I do not have a ubuntu machine at the moment. Sorry.

Other, I tried thammer's 'sym.bios.is' and was able to save and load the patch!

mungewell commented 4 months ago

@Licarde If you are on windows you can run the scripts there too.... need to install a few modules (construct, python-midi, etc). GUI also runs with WxPython. Should also work on Mac, but don't have confirmation on that...

If you want to try sending SysEx data you can use MidiOx on Windows.

I think that we are getting close to pushing a new release, as we've got confirmation that we can work with the MS+ pedals.

Licarde commented 4 months ago

OK. I tried to sent the data via MidiOx.

Send
f0 52 00 6e 64 02 00 07 00 f7

Recieve
F0 52 00 6E 64 01 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 01 00 4F 6E 4F 66 66 00 00 00 00 00 00 01 00 00 42 6C 61 6E 6B 00 00 00 00 00 00 01 01 00 42 6C 61 6E 6B 00 00 00 00 00 01 00 00 00 30 00 00 00 00 00 00 00 00 00 01 00 01 00 4F 6E 4F 66 66 00 00 00 00 00 01 01 00 00 42 6C 61 6E 6B 00 00 00 00 00 01 01 01 00 42 6C 61 6E 6B 00 00 00 00 00 02 00 00 00 30 00 00 00 00 00 00 00 00 00 02 00 01 00 4F 6E 4F 66 66 00 00 00 00 00 02 01 00 00 42 6C 61 6E 6B 00 00 00 00 00 02 01 01 00 42 6C 61 6E 6B 00 00 00 00 00 03 00 00 00 30 00 00 00 00 00 00 00 00 00 03 00 01 00 4F 6E 4F 66 66 00 00 00 00 00 03 01 00 00 42 6C 61 6E 6B 00 00 00 00 00 03 01 01 00 42 6C 61 6E 6B 00 00 00 00 00 04 00 00 00 30 00 00 00 00 00 00 00 00 00 04 00 01 00 4F 6E 4F 66 66 00 00 00 00 00 04 01 00 00 42 6C 61 6E 6B 00 00 00 00 00 04 01 01 00 42 6C 61 6E 6B 00 00 00 00 00 F7

Send
f0 52 00 6e 64 47 f7

Recieve

*New patch was created.

Send
f0 52 00 6e 64 42 f7

Recieve
F0 52 00 6E 64 43 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F7
nomadbyte commented 4 months ago

@Licarde thanks for getting back and joining another piece in this puzzle.

For the most part it's clear that B2 FOUR is also using the ZD2 format and somewhat modified yet similar PTCF format for the patches. Same likely goes for the SysEx File IO, so it should be possible to adapt @mungewell tool to download files off the pedal. However I would not rush with installing/removing effect files yet, until we can figure out the contents of the FLST_SEQ.ZT2. Also, the details of the IR management are mostly unknown, so I would not try to disturb AMP effects for now.

Here's another SysEx to dump to figure out the internal flash size:

f0 52 00 6e 60 29 f7
Licarde commented 4 months ago
Send
f0 52 00 6e 60 29 f7

Recieve
F0 52 00 6E 60 04 29 02 00 08 00 54 7B 6B 02 00 34 2F 58 00 00 00 00 00 00 00 F7 
nomadbyte commented 4 months ago

SysEx:<60 29> ==> F0 52 00 6E 60 04 29 02 00 08 00 54 7B 6B 02 00 34 2F 58 00 00 00 00 00 00 00 F7

DiskSize:[54 7B 6B 02 00]:5963220 bytes
DiskFree:[34 2F 58 00 00]:1447860 bytes
DiskUsage:(5963220-1447860)/5963220. *100% = 75.7%

B2 FOUR internal flash capacity: 5.7MB