Can undefined CC 106 and 107 access 14-Bit option in order to implement BeatBuddy Tempo?

0 votes
asked Mar 26, 2023 in Advanced by robertjbegingmail-com (170 points)
edited Mar 26, 2023 by robertjbegingmail-com

1 Answer

+1 vote
The MIDI spec defines two types of 14 bit Ccs
- 32 14 bit Ccs pairs, separated by 32 (20H), from 00/32 (20h), bank select MSB / LSB 32 , up through 1F / 3F (Undefined MSB / LSB)
- 2 14 bit Cc pairs, RPN and NRPN, separated by one number, with LSB lower (98 / 99 = NRPN LSB / MSB, 100 / 101 = RPN LSB / MSB)

MIDI Designer
- allows the 20h 14 bit pairing through the entire range, allowing selection of 14bit Ccs up through the 5F/7F pair
- implements NRPN (but not RPN)

Despite not having native implementation of this Beat Buddy implementation, MIDI Designer gives you ability to implement this with two Cc controls and one supercontrol.

I am presuming the 14 bit MIDI value goes from 40 - 300, directly encoding the tempo value.

For MSB, make a knob, Cc 106, 261 ticks, use named ticks - see below.  Repeat for LSB with Cc 107.

Make a third knob to be the supercontrol, choose 14 bit Cc (specific Cc doesn't matter since it is a supercontrol), 261 ticks, Display Min 40, Max 300, make a supercontrol of MSB and LSB knobs (ensure MSB is listed first)

Best to build the named ticks in a spreadsheet

Value  MSB  LSB
040      0       40
041      0       41
...
127      0      127
128      1       0
...
299      2       43
300      2       44

Paste the MSB column in named ticks field for MSB, similar for LSB.
answered Mar 27, 2023 by jkhiser (19,810 points)
Just researching a bit. Issue is gonna be that BB (like many devices) doesn't report its tempo to MIDI out. It just sends a newly timed MIDI clock. But, SB code can determine that new tempo by counting the clock, eg:
https://audeonic.boards.net/thread/504/tempo-number-mf-dynamic-clock

I guess this could periodically update the supercontrol to detected values (without sending back to BB)?

Complicated, but could be worth the effort?
I'm sending the increment/decrement CC to BB already, but, doesn't update the temp slider. Either could update the tempo slider... or have it bi-directional as you (@robertjbegingmail-com) suggested??
I tested this code (https://audeonic.boards.net/thread/504/tempo-number-mf-dynamic-clock) with StreamByter and Midimittr :

IF LOAD
  ASS L0 = 0 # tick counter
END
IF M0 == F8 # got tick
  MAT L1 = L0 % 18 # if on 24 tick boundary
  IF L1 == 0
    MAT L2 = EA60 / T0 # calculate+show bpm
    SET LB0 L2 +D
    # convert bpm in L2 to DC sysex
    MAT I0 = L2 / 64 # get hundreds
    MAT I1 = L2 % 64 # strip hundreds
    MAT I1 = I1 / A  # get tens
    MAT I1 = I1 * 10 # shift left
    MAT I2 = L2 % A  # get units
    MAT I1 = I1 + I2 # add units to tens
    SND F0 5A I0 I1 00 F7 #will need to adjust frequency of this midi send message with mod function.
  END
  MAT L0 = L0 + 1 # increment tick counter
END

...

Bottom line is that this method is unreliable probably due to Bluetooth latency. The reported BPM fluctuates by +/- 1

In my opinion, Singular Sound should send tempo as a regular SYSEX message much like they do with the time signature. That would be the simplest solution.
I've asked Brennan at Singular sound where to report bugs (I've found some) and would also be good to put this as a feature request... but I don't know where on their forums... do you?
I commented here:

https://forum.singularsound.com/t/bb-midi-out-tempo/26845

But I’m not holding my breath.
...