mungewell / zoom-zt2

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

MS-plus hidden drum machine? #85

Open mungewell opened 2 months ago

mungewell commented 2 months ago

Glancing at hexdump of the unzipped FW, and it looks like both the MS-60B+ and the MS-200D+ have the table/patterns similar to the G1Four format

000c1bb0  07 1f 7c c0 80 80 00 00  00 00 00 00 00 00 00 00  |..|.............|
000c1bc0  00 00 00 00 00 80 80 c0  7c 1f 07 c0 f8 7f 7f 7f  |........|.......|
000c1bd0  7e 7c 79 73 63 66 64 4c  4c 1c 18 18 18 18 18 1c  |~|yscfdLL.......|
000c1be0  4c 4c 44 66 63 73 79 7c  7e 7f 7f 7f 31 32 2f 38  |LLDfcsy|~...12/8|
000c1bf0  20 47 72 76 00 4b 69 6b  31 2e 72 61 77 00 00 00  | Grv.Kik1.raw...|
000c1c00  00 53 6e 72 41 6d 62 2e  72 61 77 00 00 53 6e 72  |.SnrAmb.raw..Snr|
000c1c10  31 2e 72 61 77 00 00 00  00 00 00 00 00 00 00 00  |1.raw...........|
000c1c20  00 00 00 00 00 48 48 43  2e 72 61 77 00 00 00 00  |.....HHC.raw....|
000c1c30  00 00 00 00 00 00 00 00  00 00 00 00 00 48 48 43  |.............HHC|
000c1c40  41 6d 62 2e 72 61 77 00  00 4b 69 6b 41 6d 62 2e  |Amb.raw..KikAmb.|
000c1c50  72 61 77 00 00 43 6c 69  63 6b 2e 72 61 77 00 00  |raw..Click.raw..|
000c1c60  00 0c 08 02 88 56 2b c0  31 36 42 65 61 74 73 31  |.....V+.16Beats1|
000c1c70  00 4b 69 6b 31 2e 72 61  77 00 00 00 00 53 6e 72  |.Kik1.raw....Snr|
000c1c80  41 6d 62 2e 72 61 77 00  00 53 6e 72 31 2e 72 61  |Amb.raw..Snr1.ra|
000c1c90  77 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |w...............|
000c1ca0  00 48 48 43 2e 72 61 77  00 00 00 00 00 00 00 00  |.HHC.raw........|
000c1cb0  00 00 00 00 00 00 00 00  00 48 48 43 41 6d 62 2e  |.........HHCAmb.|

Although a drum machine feature is NOT mentioned in the menu. IIRC The G5n has a effect which can be placed in a slot in order to control it's drum machine.

mungewell commented 2 months ago

We already have a script to decode the patterns....

ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/SearchBin-github/searchbin.py -t "12/8" 144 
Match at offset:         793580        C1BEC in  144
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/SearchBin-github/searchbin.py -p "00 00 00 1d 00 5d 00 8c 00 7c"  144
Match at offset:         782702        BF16E in  144

ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/zoom-zt2-sdw-github/decode_patterns.py -P -T 793580 -D 782702 144
NewWave    0x000BF16E 
R&B1       0x000BF2F6 
PopRock    0x000BF466 
Samba2     0x000BF51E 
Disco      0x000BF686 
MtlCore    0x000BF736 
16Beats3   0x000BFBD6 
Pop        0x000BFC7E 
Samba1     0x000BFD26 
Funk1      0x000BFDCE 
Funk2      0x000BFE76 
Shuffle2   0x000BFF1E 
Country    0x000BFFC6 
16Beats2   0x000C006E 
16Beats1   0x000C024E 
12/8 Grv   0x000C05E6 
FunkRock   0x000C067E 
FastPunk   0x000C0716 
70s Soul   0x000C07AE 
HipHop     0x000C08D6 
JazzFunk   0x000C0966 
Motown     0x000C0BA6 
Blues2     0x000C0F76 
Fusion     0x000C165E 
TomTomBt   0x000C16E6 
R&B2       0x000C3CDE 
2nd Line   0x000C3D5E 
90s Soul   0x000C3DDE 
Breaks2    0x000C3ED6 
HeavyMtl   0x000C40B6 
IndiePop   0x000C412E 
Rock3      0x000C41A6 
R'n'R      0x000C421E 
8Beats3    0x000C44C6 
HardRock   0x000C4536 
Rock2      0x000C45A6 
8Beats2    0x000C47CE 
8Beats1    0x000C483E 
Breaks1    0x000C48AE 
Rock1      0x000C491E 
Steppers   0x000C4B36 
Breaks3    0x000C4D3E 
Shuffle1   0x000C4DA6 
Bossa1     0x000C53B6 
Bossa2     0x000C5416 
Swing2     0x000C5536 
Emo        0x000C5646 
Punk       0x000C569E 
EuroPop    0x000C57FE 
Rockers    0x000C5856 
Ska        0x000C58AE 
Swing1     0x000C5906 
5/4 Grv    0x000C59FE 
Blues1     0x000C5D06 
OneDrop    0x000C5D4E 
ROCKABLY   0x000C5EAE 
Jazz2      0x000C6506 
JzWaltz2   0x000C653E 
Waltz      0x000C6576 
CtWaltz2   0x000C686E 
CtWaltz1   0x000C6D96 
Jazz1      0x000C6F4E 
JzWaltz1   0x000C73BE 
GUIDE      0x000C7766 
Metro5     0x000C777E 
Metro4     0x000C7956 
Metro3     0x000C7C8E 
Metro      0x000C7FBE
ZoomFW/MS-200D Plus_v1.20_Win_E/unzipped/.rsrc/1041/BIN$ python3 ~/zoom-zt2-sdw-github/decode_patterns.py -p 1 -T 793580 -D 782702 144
Pattern 1 : 12/8 Grv (0x000C05E6)
Bars 2 (12/8)
---
Kik1.raw     :#                             X     #                                   #                             X     #           $                 X     :
SnrAmb.raw   :                  x                                   x                                   x                                   x                 :
Snr1.raw     :                  #                                   #                                   #                                   #                 :
             :                                                                                                                                                :
HHC.raw      :$     X     X     $     X     X     $     X     X     $     X     X     $     X     X     $     X     X     $     X     X     $     X     X     :
             :                                                                                                                                                :
HHCAmb.raw   :o     ,     ,     o     ,     ,     o     ,     ,     o     ,     ,     o     ,     ,     o     ,     ,     o     ,     ,     o     ,     ,     :
KikAmb.raw   :x                             ,     x                                   x                             ,     x           o                 ,     :
Click.raw    :                                                                                                                                                :
mungewell commented 2 months ago

My memory was slightly wrong, it was an effect for the GCE-3.

$ python3 decode_effect.py -m -s ./zoom_fx_AllZDL6/GCE-3/GL/RHYTHM_100.zd2
0x1e000010 : RHYTHM_100.zd2, Rhythm (v0.01 8.37%), 29a4e140f56c287320a9a1ab0f37d273

I guess (hope) this might work on MS-plus, but I'm a little too scared to upload to my new/expensive pedal.

mungewell commented 2 months ago

Not sure that the ZD2 actually does anything... it's code segment is pretty sparse.

GCE-ZD2$ python3 ../decode_bdl.py -l RHYTHM_100.zd2

.audio
.text
.stack
.args
.neardata
.rodata
.bss
.text
.cinit
.cio
.const
.data
.switch
.sysmem
.far
.fardata
.ppinfo
.ppdata
.plt
0362810
.text
__TI_pprof_out_hndl
__TI_prof_data_start
__TI_prof_data_size
__TI_STATIC_BASE
Dll_Dummy
mungewell commented 2 months ago

Trying to figure out remote control on the GCE-3, which has the '' effect.

Installing

$ python3 ../zoomzt2.py -I RHYTHM.zd2
Installing effect: RHYTHM.zd2

$ python3 ../zoomzt2.py -s -R FLST_SEQ.ZT2 | tail
0x09000040 : HD_HALL.ZD2, (v1.50 1)
0x09000050 : SPRING.ZD2, (v1.50 1)
0x09000060 : FDSPRING.ZD2, (v1.40 1)
0x09000070 : PLATEREV.ZD2, (v1.50 1)
0x09000080 : EARLYREF.ZD2, (v1.40 1)
0x090000a0 : CHURCH.ZD2, (v1.40 1)
0x090000d0 : CHAMBER.ZD2, (v1.40 1)
0x090000e0 : GATE_REV.ZD2, (v1.40 1)
Group 30 : RHYTHM
0x1e000010 : RHYTHM.zd2, (v0.01 1)

$ python3 ../decode_effect.py -7 -s RHYTHM.zd2 
0x1e000010 : RHYTHM.zd2, Rhythm (v0.01 8.37%)
10 00 00 70 01 
$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 03 00 00 01 10 00 00 70 01 f7'

$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 02 00 05 00 F7' -r temp.bin -t 2

1015 bytes read
$ python3 ../decode_screens.py temp.bin
---
Effect:  (Off)
PATTERN : GUIDE
BPM : 0
VOL : 0
---
Effect: Bypass (Off)
 : 
 : 
 : 
 : 
---

Turn it 'on', but no sound...

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 03 00 00 00 01 00 00 00 00 f7'
$ amidi -p hw:2,0,0 -S 'F0 52 00 6e 64 02 00 05 00 F7' -r temp.bin -t 2

1015 bytes read
$ python3 ../decode_screens.py temp.bin
---
Effect:  (On)
PATTERN : GUIDE
BPM : 0
VOL : 0
---
Effect: Bypass (Off)

Can't seem to set BPM or Vol. Going to jump to Windows/GuitarLab to see what happens there.

mungewell commented 2 months ago

It looks like my GCE3 (as G1XFour) had unknown effect in the patch and it was NOT offering to install 'Rhythm'.

Switched to GCE3 (as G3n) and could install 'Rhythm', but it is NOT listed in ZT2 and in fact it is using the longer/clipped file name "RHYTHM_100.z"

This is seen as my gui code scans for files...

00000000: 52 00 6E 60 04 25 00 00  17 00 00 00 00 00 52 48  R.n`.%........RH
00000010: 59 54 48 4D 5F 31 30 30  2E 7A 00 00 00 22 1B 00  YTHM_100.z..."..
00000020: 00 00 00 00 00 00 00                              .......
None
00000000: 52 00 6E 60 04 25 00 00  17 00 00 00 00 00 47 55  R.n`.%........GU
00000010: 41 52 44 5A 44 4C 2E 5A  54 32 00 00 00 10 08 00  ARDZDL.ZT2......
00000020: 00 00 00 00 00 00 00                              .......
None
00000000: 52 00 6E 60 03 7A 7F 7F  7F 0F                    R.n`.z....
None

I can install this effect into a patch (via midi commands), but not control it. GuitarLab would start/stop the effect as was enabled/disabled.

mungewell commented 2 months ago

I managed to grab and decode what GuitarLab does, it's 4x SysEx - looks like it's pressing then releasing the button.

$ hexdump -C rhythm_on_off_slot0.syx 
00000000  f0 52 00 6e 64 03 00 0a  01 00 00 00 00 00 f7 f0  |.R.nd...........|
00000010  52 00 6e 64 03 00 0a 03  01 00 00 00 00 f7 f0 52  |R.nd...........R|
00000020  00 6e 64 03 00 0a 01 00  00 00 00 00 f7 f0 52 00  |.nd...........R.|
00000030  6e 64 03 00 0a 03 00 00  00 00 00 f7              |nd..........|
0000003c

$ hexdump -C rhythm_on_off_slot2.syx 
00000000  f0 52 00 6e 64 03 00 0a  01 00 00 00 00 00 f7 f0  |.R.nd...........|
00000010  52 00 6e 64 03 00 0a 05  01 00 00 00 00 f7 f0 52  |R.nd...........R|
                               ^^ changes according to slot
00000020  00 6e 64 03 00 0a 01 00  00 00 00 00 f7 f0 52 00  |.nd...........R.|
00000030  6e 64 03 00 0a 05 00 00  00 00 00 f7              |nd..........|
0000003c

It seems that you need to press the correct 'slot' (where the RHYTHM effect it) for it to actually register.

NOTE: it seems that the pedal is very sensitive to locking up here and not really working correctly afterwards. Going into GuitarLab and removing the patch seems to be the cure.

mungewell commented 2 months ago

Grrr.... took me a while to figure out preset selection via midi on the G3n

Preset 150:

$ amidi -p hw:2,0,0 -S 'b0 20 31 c0 02';python3 ../zoomzt2.py -c temp.zptc;python3 ../decode_preset.py -s temp.zptc  | head
Name: Rhythm    
Patch Volume: 100
Effect 1: 0x1E000010
   Enabled: True
   Param 1: 0
   Param 2: 0
   Param 3: 0
   Param 4: 80
   Param 5: 0
   Param 6: 0

And then I can start the rhythm with

$ amidi -p hw:2,0,0 -s rhythm_on_off_slot0.syx
mungewell commented 2 months ago

So here's a thing.....

$ python3 ../decode_effect.py --force-target 0xA0 -o MS_RHYTHM.ZD2 RHYTHM_100.zd2
Checksum Recalculated: 0x5b9adbab

$ cp MS_RHYTHM.ZD2 RHYTHM.ZD2 

$ python3 ../zoomzt2.py --include-zic -I RHYTHM.ZD2
Installing effect: RHYTHM.ZD2
uploading...
Uploading icon: RHYTHM.ZIC

Gives us a selectable effect, which has dial/parameters that can be changed. The tempo follows the Tempo effect value... I just don't have a way to start the drums actually playing. :-(

shooking commented 2 months ago

hi @mungewell So I published a video on this a while back here

I seems you are rediscovering independently what I did - and that led me to revisit. Here's my current understanding.

  1. load Rhythm 1 slot FX somewhere in a preset.
  2. Use windowing function to get it in view (this was what I called RhythmPrime)
  3. Toggle the FX on based on "windowed" slot position.

Example

I have put a rhythm as physical slot 8. 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp

[[just to allow me to anchor slots]]

I dont seem to be able to say "toggle FS8". The best I can do is "prime" the window to include the Rhythm in an FS1 - 4.

WINDOW1 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR ------ Rhythm not selectable 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp

... WINDOW5 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR ------ Rhythm selectable as FS4 5 = MuteSW 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp

... WINDOW6 1 = Rack Comp 2 = Comp 3 = SlowATTCK 4 = ZNR 5 = MuteSW ------ Rhythm selectable as FS3 6 = OptComp 7 = NoiseGate 8 = Rhythm 9 = Comp

Demo next post

shooking commented 1 month ago

So with WindowsStart.sh 5 Rhythm is at 4

shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./WindowStart.sh 5
F0 52 00 6E 64 03 00 0a 01 04 00 00 00 00 F7
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 4
f0 52 00 6e 64 03 00 0a 06 01 00 00 00 00 f7

15 bytes read
00000000  f0 52 00 6e 64 03 01 07  00 01 00 00 00 00 f7     |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 4
f0 52 00 6e 64 03 00 0a 06 01 00 00 00 00 f7

15 bytes read
00000000  f0 52 00 6e 64 03 01 07  00 01 00 00 00 00 f7     |.R.nd..........|
0000000f

Now we move alone one.

hooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ../B1XFour/GetMoreData.sh 

0 bytes read
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./WindowStart.sh 6
F0 52 00 6E 64 03 00 0a 01 05 00 00 00 00 F7
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 3
f0 52 00 6e 64 03 00 0a 05 01 00 00 00 00 f7

15 bytes read
00000000  f0 52 00 6e 64 03 01 07  00 01 00 00 00 00 f7     |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ ./RhythmStartStopWindow.sh 3
f0 52 00 6e 64 03 00 0a 05 01 00 00 00 00 f7

15 bytes read
00000000  f0 52 00 6e 64 03 01 07  00 01 00 00 00 00 f7     |.R.nd..........|
0000000f
shooking@ZoomPedalFun:~/Software/ZoomPedalFun/G5n $ 

So I knew I needed to "prime" the rhythm (and looper!). What I didnt fully appreciate is why - it is so that FS1 - 4 selected the right FX slot in the patch. Windowing is the key. Gonna be a swine to code - keeping track of relative slot based on preceding FX widths.

shooking commented 1 month ago

also - with the loop the subsequent control depends on holding a FS down for a set period - I was thinking some logic in the kit - but I am guessing it must be emulated in the Zoom Guitar Lab somehow

shooking commented 1 month ago

The LP-MONO and LP-STEREO dont play nicely like rhythm or LP-MN2 and LP-ST2.

For the latter - the stop buttons are the SECOND FX - kinky!

mungewell commented 1 month ago

rhythm_1 rhythm_2

I spent way too long last night trying to find a 'prime' and 'toggle' SysEx to actually start the Rhythm playing.... no success. I guess that it's either a completely different message, or that the pedal doesn't actually have a Rhythm thread/process running to receive the message.

On the (real) G5n/G3n does the known message actually press the footswitch on other ZDLs, so that one would see another indication of it working. Or is it specific to the Rhythm/Looper?

A good example would be 'Bomber' where the Foot-Switch triggers the noise....

shooking commented 1 month ago

I'll try to upload a video to YT later today with sysex and PIP video of the G5n. Then I will see if I can get it working on a GCE-3 emulator.

shooking commented 1 month ago

https://youtu.be/CMEuxgvYT9k?si=CXCInKx4COLNI3N_

I should rename my command to simply FS.sh [1-4] [01]

And, depending on model, render FS and move them according to windowing.

mungewell commented 1 month ago

@shooking Thanks for the confirmation, and video. I don't think the 'Window' applies too much to the MS-plus as they only display one effect at a time.

Thomas' page confirms that the 'move/display to XX' is slightly changed, and does work https://github.com/thammer/zoom-explorer?tab=readme-ov-file#commands--message-types

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 64 01 00 00 00 00 00 f7'

In theory the trigger would be similarly changed (with '03' indicating slot 0, of a 1 effect 'window').

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 64 03 01 00 00 00 00 f7'

Triggering the foot-switch was not working on 'Rhythm' late monday. I am trying again today, but with 'Bomber' effect, seeing if I can trigger the sound via SysEx..... still doesn't work for me :-(

I tried changing the data value, but without luck.

Neither command returns a SysEx 'ack'.

mungewell commented 1 month ago

So looking at @shooking script for the G5n, it's directly accessing the 'Effect On/Off' control - not 'pressing a fake' footswitch. https://github.com/shooking/ZoomPedalFun/blob/main/G5n/FS.sh

If I do the equvialant on MS-60B+ it CAN trigger the Bomber effect when in 'Trigger' mode.

simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 01 00 00 00 00 f7'
simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'

I do have to do the 2nd one to turn off the LED and allow another sound to be triggered later. When using the real foot-switch the LED turns off automatically.

It does NOT work with the 'Rhythm' effect. Manually pressing the button toggle's LED (but does NOT grey out effect), via SysEx doesn't affect the LED at all (even if already on).

A short SysEx should respond with a read of a value.... it appears I can set it (on/off value) low, but then it's automatically set high; previous 2 responses buffered, 3rd response is the 'read'.

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'

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

45 bytes read
00000000  f0 52 00 6e 64 20 01 00  00 00 00 00 00 00 f7 f0  |.R.nd ..........|
00000010  52 00 6e 64 20 01 00 00  01 00 00 00 00 f7 f0 52  |R.nd ..........R|
00000020  00 6e 64 20 01 00 00 01  00 00 00 00 f7           |.nd .........|
0000002d

If fact 'Rhythm' always reads a '01', regardless of what it shown by the LED.

mungewell commented 1 month ago

Perhaps (as I mentioned before) the task which generates the Rhythm sounds it not actually running on the MS-60B+.

There are strings in the FW image which seem to relate to tasks, but that's not actually guarantee that it's started.

TaskSupport
g_SemId_1msTask
g_Task_MainApp
g_Task_SendUSB_MIDI
g_Task_UpdateUI
g_Task_QFuncService
g_Task_1msTask
g_Task_TunerService
g_Task_SwitchNrmlSpdRead
g_Task_RepeatEventHandler
g_Task_PopUpTimeCounter
g_Task_RhythmService
g_Task_LooperUI
g_Task_AD
g_Task_PreLoad
g_Task_DataStore
g_Task_LooperAudioEv
g_Task_AudioProcess

It could be that the frame work is in place from the G2Four, and just not enabled on the MS-plus pedals. Maybe there's a configuration block, or bitfield determining this.... does the pedal have I2C/SPI memory for the serial number?

Interestingly the only MS-plus to support USB Audio is the MS-80IR (so it means that the hardware is capable). https://zoomcorp.com/en/jp/multi-effects/multistomp-pedals/ms-80ir/

2-IN / 2-OUT Audio Interface function (via built-in USB-C port)
shooking commented 1 month ago

So looking at @shooking script for the G5n, it's directly accessing the 'Effect On/Off' control - not 'pressing a fake' footswitch. https://github.com/shooking/ZoomPedalFun/blob/main/G5n/FS.sh

If I do the equvialant on MS-60B+ it CAN trigger the Bomber effect when in 'Trigger' mode.

simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 01 00 00 00 00 f7'
simon@the-void:~/zoom-zt2-sdw-github/GCE-ZD2$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'

I do have to do the 2nd one to turn off the LED and allow another sound to be triggered later. When using the real foot-switch the LED turns off automatically.

It does NOT work with the 'Rhythm' effect. Manually pressing the button toggle's LED (but does NOT grey out effect), via SysEx doesn't affect the LED at all (even if already on).

A short SysEx should respond with a read of a value.... it appears I can set it (on/off value) low, but then it's automatically set high; previous 2 responses buffered, 3rd response is the 'read'.

$ amidi -p hw:2,0,0 -S 'f0 52 00 6e 64 20 00 00 00 00 00 00 00 00 f7'

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

45 bytes read
00000000  f0 52 00 6e 64 20 01 00  00 00 00 00 00 00 f7 f0  |.R.nd ..........|
00000010  52 00 6e 64 20 01 00 00  01 00 00 00 00 f7 f0 52  |R.nd ..........R|
00000020  00 6e 64 20 01 00 00 01  00 00 00 00 f7           |.nd .........|
0000002d

If fact 'Rhythm' always reads a '01', regardless of what it shown by the LED.

No sorry it isnt. FS.sh

hexSlot == physical slot - 1
probeStringOnOff="F0 52 00 6E 64 03 00 ${hexSlot} 00 ${onOff} 00 00 00 00 F7"

whereas RhythmStartStopWindow.sh

logicalFS=windowSlot + 2
probeString="f0 52 00 6e 64 03 00 0a ${FSSlot} 01 00 00 00 00 f7"

So let's say I am at FX slot 9, windows slot 4 9 - 1 = 8 cf 4 + 2 == 6 Notice also the 0x0a in RhythmStartStopWindow where the hexSlot is for FS.

F0 52 00 6E 64 03 00 08 00 01 00 00 00 00 F7 for FS 8 1
F0 52 00 6E 64 03 00 0a 06 01 00 00 00 00 f7 for FS4
mungewell commented 1 month ago

Ah, OK.... Must be getting old, one late night and my brain goes to mush. ;-)

I had previous tried with the '0x0A' command, didn't work neither did any adaption of it. I think this ticket will be on hold for a bit.