-
Notifications
You must be signed in to change notification settings - Fork 3
De re B1On
These are the gratuitous "does useful stuff" strings I have found (either found via R&D but all tested on my B1On). They might work on other pedals BUT you would need to swap the model ID (see Universal String below) to stand a chance. As ever, proceed with caution - you are doing this to your pedal. I have checked the B1On 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 65 00 00 00 31 2e 32 31 f7 | ****Universal String responds with model ID and firmware version |
EditorOn | f0 52 00 65 50 f7 | Turn Editor mode on so Zoom pedal spits out some content | |
EditorOff | f0 52 00 65 51 f7 | Turn Editor mode off | |
PCModeOn | f0 52 00 65 52 f7 | Turn PC mode on - allows USB file transfer etc | |
PCModeOff | f0 52 00 65 53 f7 | Turn PC mode off | |
TunerModeOn | B0 4A 40 && EditorModeOn | seem to need to send both for command to reliably work | |
TunerModeOff | B0 4A 00 && EditorModeOn | seem to need to send both for command to reliably work | |
GetMoreData | F0 52 00 65 60 05 00 F7 | whats in buffer | seems to flush the current buffer. Useful for getting clean data |
CurrentBankNumber | f0 52 00 65 33 f7 | i.e. b0 00 00 b0 20 00 c0 00 | Midi CC of the current patch |
LoadPatch | C0 ${hexLow} | i.e. C0 15 | hexLow is one less than the physical patch. Patch one is hex 0. Patch 33 is hex 0x20 |
GetCurrentPatch | F0 52 00 65 29 F7 | F0 52 00 65 28 ... data ... F7 | Returns current patch in raw format. More on this later |
GetPatch | F0 52 00 65 09 00 00 ${hexPatch} F7 | f0 52 00 65 08 ... | Returns given patch (value -1 as hex) in raw format |
RemoveFX | F0 52 00 65 41 F7 | Cleans out FX from patch but preserves patch name. NEEDS EditorOn.sh mode. | |
FXM_OnOff | F0 52 00 65 31 (M-1) 00 (00 or 01) 00 F7 | 6th byte is FX slot 1 - 5 => 0 - 4, 8th byte is 0 for off, 1 for on. | |
FXM_ID | F0 52 00 65 31 (M-1) 01 xx xx F7 | 6th byte is FX slot 1 - 5 => 0 - 4, 8th byte means FX, If we set next two to 00 we set bypass. BUT you have to move off/on to preset to see it. Not sure of other FXIDs yet. | |
FXM_PN | F0 52 00 65 31 ${hexFX} ${hexParam} ${hexValueLow} ${hexValueHigh} F7 | 6th byte is FX slot 1 - 5 => 0 - 4, 7th byte is parameter + 1, bytes 8 & 9 are low and high bytes of Parameter values | |
PatchVol | f0 52 00 65 31 06 00 vv 00 f7 | FXM_PN 7 -1 vv | vv is volume in hex |
Here I used a command to probe if I get a response from the B1On 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.
pi@raspberrypi:~/Software/ZoomPedalB1ON $ 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 65 ${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 B1On.
pi@raspberrypi:~/Software/ZoomPedalB1ON $ ls -1 p_*
p_01_001.bin
p_04_004.bin
p_05_005.bin
p_07_007.bin
p_0e_014.bin
p_16_022.bin
p_29_041.bin
p_2b_043.bin
p_33_051.bin
p_41_065.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.
pi@raspberrypi:~/Software/ZoomPedalB1ON $ ./GetCurrentPatch.sh
F0 52 00 65 29 F7
134 bytes read
00000000 f0 52 00 65 28 00 01 00 00 00 00 00 00 00 00 00 |ðR.e(...........|
00000010 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 20 00 32 04 |............ .2.|
00000070 00 00 00 20 03 00 00 00 00 55 4b 20 47 00 72 6f |... .....UK G.ro|
00000080 6f 76 65 20 00 f7 |ove .÷|
00000086
This is the one I have been mostly decoding until now.
0
00
144 bytes read
00000000 f0 52 00 65 08 00 00 00 70 00 00 01 00 00 00 00 |ðR.e....p.......|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
00000040 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 |................|
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000070 00 20 00 32 04 00 00 00 20 03 00 00 00 00 55 4b |. .2.... .....UK|
00000080 20 47 00 72 6f 6f 76 65 20 00 44 79 6f 03 0e f7 | G.roove .Dyo..÷|
00000090
What we notice is getting Patch is 10 bytes longer than get Current patch. The header is different (0x08 v 0x28) and that is one way, other than size, to tell them apart. There are a 5 bytes different at beginning of the file. Then maybe a 5 byte checksum at the end.