-
Notifications
You must be signed in to change notification settings - Fork 3
De re B1XFour
These are the gratuitous "does useful stuff" strings others and I have found (either found via R&D but all tested on my B1XFour).
Majority work on B1X - you just cannot use the Pedal parameters. Similarly for the G1XFour and the G1X - the Device ID is the major difference.
NOTE: The FX on these pedals is in ZD2 format. Similar to the G3 etc. They are NOT compatible with the ZDL format FX (as on the B1On, MS50 etc).
As ever, proceed with caution - you are doing this to your pedal. I have checked the B1XFour / G1XFour but I cannot know how you apply these. I take no responsibility - as per the Creative Commons licence.
Function | Sysex String | Returns | Comments |
---|---|---|---|
Identify | f0 7e 00 06 01 f7 | f0 7e 00 06 02 52 6e 00 00 00 32 2e 30 30 f7 | ****Universal String responds with model ID and firmware version |
NumPatches/size | f0 52 00 6E 07 f7 | f0 52 00 6e 06 32 00 78 05 f7 | 0x32 = 50 patches, 0x7805 =0x578 = patch size |
EditorOn | f0 52 00 6E 50 f7 | Turn Editor mode on so Zoom pedal spits out some content | |
EditorOff | f0 52 00 6E 51 f7 | Turn Editor mode off | |
PCModeOn | f0 52 00 6E 52 f7 | Turn PC mode on - allows USB file transfer etc | |
PCModeOff | f0 52 00 6E 53 f7 | Turn PC mode off | |
BypassModeOn | f0 52 00 6e 64 0b f7 B0 62 0C B0 63 00 | In effect you are pressing pedals. Doesnt seem to need additional EditorOn.sh like B1On | |
BypassModeOff | f0 52 00 6e 64 0c f7 | ||
TunerModeToggle | f0 52 00 6e 64 0b f7 | Hit it again and again for on / off. | |
SetTempo | f0 52 00 6e 64 03 00 0a 02 $hexTempoLow $hexTempoHigh 00 00 00 f7 | Sets tempo 40 - 240. | |
SetVolume | f0 52 00 6e 64 03 00 0a 00 $hexVol 00 00 00 00 f7 | Current patch volume 0 - 120 | |
SetPatchChar | f0 52 00 6e 64 03 00 09 $hexCharPos $hexCharVal 00 00 00 00 f7 | Example ./SetPatchChar.sh 1 65 set name's first parameter to A (ASCII 65) | |
GetMoreData | f0 52 00 6e 60 05 00 f7 | whats in buffer | seems to flush the current buffer. Useful for getting clean data |
CurrentBankNumber | f0 52 00 6e 33 f7 | i.e. b0 00 00 b0 20 00 c0 00 | Midi CC of the current patch |
patch 10 | b0 00 00 b0 20 00 c0 00 | load patch 10 | |
patch 11 | b0 00 00 b0 20 00 c0 01 | load patch 11 | |
patch 21 | b0 00 00 b0 20 01 c0 01 | load patch 21 etc | |
LoadPatch | B0 00 00 B0 20 ${hexHigh} 00 C0 ${hexLow} | i.e. B0 00 00 B0 20 ${hexHigh} 00 C0 ${hexLow} | hexLow is low byte of Patch - 10. hexHigh is (Patch - 10)/10. Patches on B1XFour are 10 .. 59 on display |
GetCurrentPatch | F0 52 00 6e 29 F7 | F0 52 00 6e 28 ... data ... F7 | Returns current patch in raw format. More on this later. NOTE: You need to have EditorModeOn to see the data! |
GetPatch | F0 52 00 6E 46 00 00 00 00 ${hexPatch} 00 F7 | f0 52 00 6e 45 ... | Returns given patch (value -1 as hex) in raw format |
GetPatchBankPgm | F0 52 00 6E 09 00 00 00 00 ${hexPatch} 00 f7 | f0 52 00 6e 08 ... | Will revisit the difference between the current, 09 and 46 formats. |
FXM_OnOff | F0 52 00 6E 64 03 00 ${hexFX} 00 ${OnOff} 00 00 00 00 F7 | 7th byte is FX slot 1 - 5 => 0 - 4, 9th byte is 0 for off, 1 for on. | |
FXM_PN | F0 52 00 6E 64 03 00 ${hexFX} ${hexParam} ${hexValueLow} ${hexValueHigh} 00 00 00 F7 | 8th byte is FX slot 1 - 5 => 0 - 4, 9th byte is parameter + 1, bytes 10 & 11 are low and high bytes of Parameter values. NOTE the parameter value is biased by 1. If you notice above parameter 00 controls the FX on/off state. | |
FX_M1_M2_Values | F0 52 00 6E 64 02 ${hexFXStart} ${hexFXEnd} 00 F7 | Returns an ASCII representation of FX params from Start to End. Best to call GetMoreData before hand to flush buffer. | |
PatchVol | f0 52 00 6e 64 03 00 0a 00 vv 00 00 00 00 f7 | vv is volume in hex | |
FXM_Delete | F0 52 00 6E 64 03 00 ${hexFX} 01 00 00 00 00 00 F7 | Deletes FX at slot. | |
FXM_ID | F0 52 00 6E 64 03 00 ${hexSlot} ${OnOff} ${hexFXValueLow} ${hexFXValueHigh} 00 ${hexGroupValLow} ${hexGroupValHigh} F7 | Example (current) ./FXM_ID.sh 3 64 384 sets FX3 to Dual Comp. NOTE I am likely to change the definitions here. Look at the code for more details. | |
GetAllFX | See Below | Raw dump of FX's and their parameters on pedal. | |
CaptureFXCycle.sh | See Below | Iterates around the FX params. Quite neat. | |
Initiate | F0 52 00 6E 64 04 F7 | Initiate - must be in PC mode | |
GetNext | F0 52 00 6E 64 05 F7 | Get next FX, keep going | |
End | F0 52 00 6E 64 07 F7 | note keep calling GetNext until you RECEIVE End | End iteration |
GetScaleFactor | F0 52 00 6E 64 11 F7 | f0 52 00 6e 64 10 +7a +01 04 04 00 f7 | Return DSP Scale factor in bytes 7 and 8. b8*128 + b7 |
Get_Current_PTCF | F0 52 00 6E 64 13 F7 | Return current patch in PTCF format | |
FXM_DelAndShiftLeft | F0 52 00 6E 64 03 00 0A 08 nn 00 00 00 00 F7 | deletes FX in SLOT nn and left shifts remaining FX | |
FX Display Window | F0 52 00 6E 64 03 00 0A 01 PP 00 00 00 00 F7 | Move FX windows to PP + 1 |
see LIST OF FX
Here I used a command to probe if I get a response from the B1XFour for a given pattern.
Now this is my approach for probing for single PCMode command Sysex strings from the pedal. I have subsequently learnt that often the Zoom doesnt respond BUT you are changing the patch. More on that as I write it up - only just found how to detect this myself.
more probeSysexCmd.sh
#!/bin/bash -x
export MIDI_DEV=`amidi -l | grep ZOOM | awk '{print $2}'`
./EditorOn.sh
./PCModeOn.sh
for i in {0..127}
do
fs=`printf "%03d" $i`
hexSlot=`printf "%02x" $i`
probeString="F0 52 00 6e ${hexSlot} F7"
theFile=p_${hexSlot}_${fs}.bin
amidi -p ${MIDI_DEV} -S ${probeString} -r ${theFile} -t 1
let x=`ls -l ${theFile} | grep -c " 0 "`
if [ $x -eq 1 ]
then
echo $x
rm ${theFile}
fi
./EditorOn.sh
done
./PCModeOff.sh
The above writes out files of the form p_dec_hex.bin. Here's the listing from a B1XFour.
pi@raspberrypi:~/Software/ZoomPedal $ ls -1 p_*
p_01_001.bin
p_04_004.bin
p_05_005.bin
p_07_007.bin
p_0e_014.bin
p_29_041.bin
p_33_051.bin
p_44_068.bin
p_48_072.bin
p_50_080.bin
p_51_081.bin
p_52_082.bin
p_53_083.bin
p_55_085.bin
p_56_086.bin
p_57_087.bin
p_60_096.bin
You could trial, at your own risk, on your Zoom pedal. Change the Device ID. I have done this on my Zoom B1XFour and G1XFour. Clearly Zoom is adding more commands with the new pedals. This is positive - better functionality BUT since they do not open it up it is also a little frustrating.
./GetCurrentPatch.sh
F0 52 00 6E 29 F7
876 bytes read NOTE some 00 skipped
00000000 00 f0 52 00 6e **28** 04 50 54 43 46 24 01 00 00 00 |.ðR.n(.PTCF$....|
00000010 01 00 00 00 05 00 10 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 45 6d 00 70 74 79 20 20 20 20 00 20 |....Em.pty . |
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 54 58 4a 31 00 00 00 02 00 |.......TXJ1.....|
00000050 54 58 45 31 48 00 00 00 00 00 00 00 00 00 00 00 |TXE1H...........|
00000060 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 00 00 00 00 00 45 00 44 |.............E.D|
00000140 54 42 78 00 00 00 00 01 00 00 00 00 00 00 00 00 |TBx.............|
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000160 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 |................|
00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000190 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 |................|
000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001b0 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001d0 50 50 52 4d 0c 00 00 00 00 00 00 00 00 00 04 00 |PPRM............|
000001e0 00 00 32 04 0c 00 00 00 00 00 00 00 00 00 00 00 |..2.............|
000001f0 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 f7 |...........÷|
0000036c
pi@raspberrypi:~/Software/ZoomPedal $ probeString="F0 52 00 6E 09 00 00 00 00 10 00 f7"
pi@raspberrypi:~/Software/ZoomPedal $ !ami
amidi -p ${MIDI_DEV} -S ${probeString} -r pp.bin -t 1; hexdump -C pp.bin
885 bytes read
00000000 f0 52 00 6e 08 00 00 00 78 05 00 50 54 43 46 38 |ðR.n....x..PTCF8|
00000010 01 00 00 00 01 00 00 00 05 00 10 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 53 61 00 6e 73 20 43 6c |........Sa.ns Cl|
00000030 65 61 08 6e 10 00 00 01 70 00 44 00 02 11 00 00 |ea.n....p.D.....|
00000040 03 10 00 00 00 0b 00 00 00 00 00 54 58 4a 31 28 |...........TXJ1(|
00000050 00 00 00 00 42 61 73 73 20 44 1d 52 56 02 70 0e |....Bass D.RV.p.|
00000060 67 17 3f 70 02 35 02 3d 11 3e 77 02 22 03 4e 03 |g.?p.5.=.>w.".N.|
00000070 0a 01 3a 5b 03 13 03 54 03 45 74 03 13 03 68 01 |..:[...T.Et...h.|
00000080 42 54 00 58 45 31 34 00 00 00 00 54 68 69 73 20 |BT.XE14....This |
00000090 69 73 00 20 61 20 66 61 74 20 00 62 75 74 20 63 |is. a fat .but c|
000000a0 6c 65 00 61 6e 20 73 6f 75 6e 00 64 20 74 68 61 |le.an soun.d tha|
000000b0 74 20 00 75 73 65 73 20 42 61 00 73 73 20 44 52 |t .uses Ba.ss DR|
000000c0 56 2e 00 00 00 00 45 44 54 42 00 78 00 00 00 21 |V.....EDTB.x...!|
000000d0 00 00 58 03 0c 48 00 0c 30 01 00 00 00 00 00 00 |..X..H..0.......|
000000e0 00 00 00 00 00 00 00 00 00 00 40 61 00 00 05 02 |..........@a....|
000000f0 14 00 00 0a 40 01 00 00 00 00 00 00 00 00 00 00 |....@...........|
00000100 00 00 00 00 00 00 23 00 00 07 04 0a 78 00 0a 48 |......#.....x..H|
00000110 00 0f 10 10 05 48 00 00 00 00 00 00 00 00 00 00 |.....H..........|
00000120 00 21 00 00 00 16 19 00 00 19 00 00 00 00 00 00 |.!..............|
00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 |................|
00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000150 00 00 00 00 00 00 00 00 50 50 00 52 4d 0c 00 00 |........PP.RM...|
00000160 00 00 01 00 00 40 00 00 00 00 00 67 00 00 00 00 |[email protected]....|
00000170 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 7e |...............~|
00000370 00 5f 06 04 f7 |._..÷|
00000375
This is the one I have been mostly decoding until now.
./GetPatch.sh 1
I have not decoded these yet BUT if you look at Mungewell's Python code he has.
#!/bin/bash
./PCModeOff.sh
for i in {10..60}
do
./EditorOff.sh
# change to current patch
./LoadPatch.sh ${i}
# get FX
./EditorOn.sh
./GetCurrentFX.sh ${i}
done
#!/bin/bash
theFileBase=CycledFXData
./PCModeOn.sh
./EditorOn.sh
./InitiateFXCycle.sh
todo=0
counter=0
while [ ${todo} -ne 1 ] ; do
tcString=`printf "%03d" ${counter}`
export theFile=${theFileBase}_${tcString}.bin
./FXCycle.sh
todo=`hexdump -C ${theFile} | grep -ic "52 00 6E 64 07"`
counter=$(($counter+1))
done
./PCModeOff.sh
./EditorOff.sh