Skip to content

De re B1On

shooking edited this page Sep 18, 2021 · 8 revisions

B1On Sysex Strings

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

B1On Probe Sysex Strings

Here I used a command to probe if I get a response from the B1On for a given pattern.

probeSysex.cmd

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.

Two ways to get patch data

GetCurrentPatch

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.

GetPatch value

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.