Tempo changes

Is there a way to change tempo from one part of a song into another? Like a chorus with faster tempo and such. I only see where the tempo controlls the whole song

At the moment, I don’t believe this is possible. Possibly in a future version!

If you use the 1.79 and up beta firmware and control the song part selection via midi then you can change the tempo on the fly with midi commands, don’t even have to to change song part, just send the commands to tell the bb to change to a new tempo. I do that with my rig, works fine.

Fairly new to midi. I have a Korg Krome that I would like to use with my BB. Can you explain what the process is that you are using to control your keyboard with the BB?
Thanks!

I was talking about setting the tempo in the BB from an external device so BB is slave, not master.
I am using my own custom electronics/software to send the appropriate midi commands to the BB to set the tempo but the same principle would apply if using a keyboard as the master, you need it to send certain midi commands out Tempos are 40-300 bpm so take more than a single byte to send so the sequence is CC-106 followed by the most significant byte of the tempo followed by CC-107 then the least significant byte of the tempo.
How you would do that from your Korg I cannot say though.

so when you say most significant byte is that the same as MSB Bank ? I’m trying to set the tempo from Setlist maker and some of this is still confusing me. I’m reading the Midi control PDF now but some is still unclear to me

MSB is like the tens column in numbers. LSB is like the units column. Think of the decimal number 13 for example, that really means 1 times 10 plus 3 times 1. The 1 is the MSB and the 3 is the LSB. Computers in general use a 256 base number system (instead of base 10 like decimal) although much of MIDI limits itself to only 7 bits, so 0-127. The units column (actually an 8 bit byte) still counts in ones but goes from zero to 127 (we only use 7 bits, not all 8, hence the 127 limit). The next column to the left (what would be the ‘tens’ column in decimal now counts in multiples of 128. So basically every time the units column (LSB) reaches 127, the next increment recycles it to zero and you add 1 to the next column to the left (same as the decimal system except the decimal system cycles after the number 9).

Some examples

[FONT=Courier New]MSB LSB Decimal equivalent

0 0 0
0 1 1
0 125 125
0 127 127
1 0 128 Unit (LSB) column cycled round so add 1 to the next column to the left (MSB)
1 1 129 1 times 128 plus 1
1 2 130 1 times 128 plus 2
2 44 300 2 times 128 plus 44 (max tempo bb can handle)[/FONT]

Sorry, I cannot get the above list to format the way I want! Hopefully it makes sense.

So to set a tempo of say 120 bpm, 120 in the above scheme would be MSB 0, LSB=120 so you would send (in decimal notation):
106,0
107,120

When the BB receives the LSB CC message (the 107 message) it will set the tempo to 120 bpm. The CC’s have to be sent in the order MSB, LSB because the BB responds to the LSB CC message to change the tempo.

If you wanted to change the tempo to 140 bpm say, then MSB would be 1 and LSB would be 12 (1 times 128 plus 12 = 140). So you would send (in decimal notation):

106,1
107,12

Basically, if the tempo you want is less than 128 (0 to 127) then MSB is 0 and LSB is the tempo. If the tempo you want is 128-255 then MSB is 1 and LSB is the tempo - 128. If the tempo you want is 256 or greater then MSB is 2 and LSB is tempo-256.

By the way the minimum tempo the BB can handle is 40 bpm, if you send anything less than that it will default to 40. Similarly, the max tempo is 300 so if you send anything more than that it will default to 300 bpm.

Hope that helps.
Edited to correct all the errors!!

o man this is great. thank you for taking the time to explain this. The last part when you said that BB dos not go less then 40 made it clear to me why I was not understanding the examples in the BB midi control PDF but after hearing you say that trigger my brain and the light bulb came on. Much appreciated. Now I have to figure out an excuse to get out of work early and set this all up.LOL

Could someone elaborate on above statement “So to set a tempo of say 120 bpm, 120 in the above scheme would be MSB 0, LSB=120 so you would send (in decimal notation):
106,0
107,120”

So what would the above commands look like ‘in decimal notation’?. I am unable to send tempo change from ‘forScore’ notation program to MBB. Thanks

A midi Control Change (CC) message contains three bytes of data and has the form (in decimal) of 176+channel_number controller_number value.
The first byte of the command contains the command itself (176 in decimal) plus the channel number the command applies too. Channel numbers go from 0 to 15 internally which really means 1-16 externally. So if are transmitting on channel 5 say, internally it is sending the number 4. It’s one of those computer things. Computers generally start counting at 0 so zero through 15 gives you 16 numbers (1-15 and zero).
Still with me? Hang in there, it gets worse LOL!

If you are listening (in the BB) on onmi (omni means ALL channels) then it’s easiest to set the channel you transmit on to zero (which is really channel one in the human world). So the first byte is 176+0 or simple just 176.

The next byte is controller number. Controllers have a range of 0 to 127. While there are some standard ones a lot will be instrument specific. For the Beat Buddy Controller 106 is the Most Significant Byte (MSB) of the tempo and 107 is the Least Significant byte (LSB) of the tempo. This just tells the received what the next byte (the value) actually applies to.

The third bytes is the actual value for the controller. Again, values go from 0 to 127.

So to set the tempo of the beat buddy to 120 say, you would send the following messages (in decimal):

176,106,0
176,107,120

The means:

Control Change 106 (MSB), value zero.
Control Change 107 (LSB), value 120

When it receives the last byte (the value) of the 107 CC (LSB) it will change the BB tempo to (in this case) 120.

To a degree this gets easier to explain if you switch to hexadecimal, also known as hex or base 16 notation instead of decimal, at least for 1st byte.

Hex counts in blocks of 16 and used the letters A through F to represent the number 1`1,12,13,14 and 15. So the ‘numbers’ in a single column in hex are 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.

In decimal, as you move the left, each column is 10 times bigger then the previous column (to the right) so the number 23 mean 2 times 10 plus 3. In hex, as you move to the left, each column is SIXTEEN times bigger than the column to the right. So the number 23 (in HEX) means 2 times SIXTEEN plus 3 which means 35 in decimal.

Why do you care about this?
Because it make reading computer data easier (really, it does! trust me on this! I do this for a living).
A byte is typically 8 bits long and with 8 bits you can represent 265 combinations (0-255) so hex is a way to represent a number in the range 0-255 with only two characters. This makes reading raw computer data (which is what midi data really is) a LOT easier.

Remember the CC command above. The first byte was 176 plus the channel number. 176 (decimal) is B0 in hex. It’s actually just the ‘B’ part of that number. Remember B in hex means 11 in decimal so the C in the left most column of a two column number means (in decimal) 11 times 16 or 176.
In midi there are 16 channels (1-16) but because we are taking computers, those numbers are represented internally in decimal as 0-15 or 0-9,A-F in hex.
So lets look at the CC command byte again. Lets represent is as Bn. The ‘B’ part is fixed and means 176 in decimal or a CC command. The ‘n’ part represents the channel. If you transmit it on channel 1 then you would code zero (remember, the internal number is 1 less than how you think of it externally) so you would code B0. If you wanted to transmit on channel 12 say, you would code BB in hex (B = 11 which is one less than the way you think of the channel number).

What I am trying to say is that for the CC command byte itself, representing it in hex allows you to see the two parts of it quite easily since the left hand side (the B) represents the CC command and the left hand side is the channel number.
If you displayed CC on channel 12 (11 internally) in decimal, what you would see would be a single number 187 (176+11) so then you’ve got to start doing math in your head to figure out what that is. Displaying it as hex BB allows you to easily see the two parts.

Typically most software allows you to simply say something like send CC nn on channel n with value v and it would put it all together for you without you having to worry about how the bits all fit together

1 Like

Very informative. Thank you so much for taking the time to provide such a detailed response to someone that is lost in the hexidecimal midi world. So some follow-up questions:

Not sure I understand how we get “35” in the comment “each column is SIXTEEN times bigger than the column to the right. So the number 23 (in HEX) means 2 times SIXTEEN plus 2 which means 35 in decimal”. If the first digit, “2”, is multiplied by ‘16’ the result is ‘32’. How do we then get “plus 2 which means 35 in decimal”. Based on your narrative it seems the hex entry “3” really means “2” in decimal; if my foregoing narrative is correct I’m not sure how 32+2=35.
Next question deals with how you would actually write a hex command. Are there spaces between entries? Commas? Hard return? The software program I’m using (forScore) has the following midi command options: Program Change [has 4 boxes with the following in each box: box 1=“Ch.” (possible entries are 1-16); box 2=“MSB” (possible entries are 0-127); box 3=“LSB” (possible entries are 0-127); and, box 4=“0-127” (possible entries are 0-127)], Hex Codes [free form entry], and Song Select [one box with entry option “0-127”]. I can get the “Program Change” option to select the right bank and song, but can’t get it to change tempo. So I thought perhaps I should use the “Hex Codes” option, but don’t know how to actually enter the hex commands.

I set BB to MIDI-IN channel 10, and can select a BB pattern/song via the “Program Change” option (i.e., by entering “10” in 1st box; “0” in second box ; “4” in 3rd box, which selects BB ‘folder’ 5; and, “7” in the last box, which selects BB beat 8). So, how do I set the tempo to, for example, 143?

If I use the Hex Codes option:
Do I still need to enter the midi channel (in my case I presume it would be ‘CA’ (in hex, to communicate the decimal equivalent of ‘192’ and midi channel ‘10’)?
Am I correct in converting the tempo of 143 to the hex equivalent of ‘2B’?
Am I correct in converting MSB value of 106 to the hex equivalent of ‘6A’
Am I correct in converting LSB value of 107 to the hex equivalent of ‘6B’?
Do I enter MSB on one line, and LSB on a different line?
Do all the entries run together (no spaces/commas)?
Do I leave a space between the midi channel command and the MSB/LSB command?
Do I enter a comma between the midi channel command and the MSB/LSB command?
E.g., If I must enter the midi channel, and want the tempo of 143, what would I enter:
CA6A06B2B; or
CA6A0
CA6B2B; or
CA 6A0 6B2B; or
CA, 6A0, 6B2B.
And I’m sure I could go on and on…
Thanks for your help!!!

Looking at this further it looks like to get a tempo of 143 the MSB value must be ‘1’ and the LSB value must be ‘15’. Hmmm, more confusion, how is the LSB value of 15 written in Hex? “F”? So might I write:
CA 6A1 6BF???

Re “So the number 23 (in HEX) means 2 times SIXTEEN plus 2 which means 35 in decimal”

Typo 1
Should be

So the number 23 (in HEX) means 2 times SIXTEEN plus 3 which means 35 in decimal.
Corrected it in my original post

15 decimal is F in hex, typically you’d write it as 0F if you wanted everything to be 2 chars long but F is acceptable.
Hex is just an easy way to visualize large decimal numbers. In the case of the MIDI CC command, the command byte (the first one) is split into two parts. the first digit is always B for a CC message and the second part is the channel number the message is for. It’s easier to visualize this part of the message as hex because a CC message for channel 5 say would be B4 (remember, the number used for the channel internally is 1 less than how you think of it). for the rest of the message, that is the controller number and the value for the control, it’s often easier to write them in decimal.

So for example B4,106,0 means a CC message 106 on channel 5 with a value of zero (technically you’d write is as something like this 0xBC4,106,0 so that you can tell the first part is hex and the rest by default is decimal).
Don’t get too hooked on the hex stuff, use whatever works for you. I just mentioned it to help describe what you might see in a midi data printout or in a midi monitor.

Program change is not Control Change. You cannot use a program change command to change the tempo.

Quoted from above with replies
Do I still need to enter the midi channel (in my case I presume it would be ‘CA’ (in hex, to communicate the decimal equivalent of ‘192’ and midi channel ‘10’)?, <=== C9, not CA. remember the internal channel number as used by midi is ONE LESS than how you think of it. So channel 10 (to you) is represented by number 9 internally!
Am I correct in converting the tempo of 143 to the hex equivalent of ‘2B’? <== 143 is 8F (8 times 16 + 15 so 128 + 15=143)
Am I correct in converting MSB value of 106 to the hex equivalent of ‘6A’ <== you would not have an msb of 106. MSB’s are 0,1 or 2. You might have a TEMPO of 106 but that converts to an MSB of 0 with an LSB of 106 (6A hex)
Am I correct in converting LSB value of 107 to the hex equivalent of ‘6B’? <== see above
Do I enter MSB on one line, and LSB on a different line? <== not sure I understand al the following, must be specific to the software. I am afraid I dont’t have/use onsong.
Do all the entries run together (no spaces/commas)?
Do I leave a space between the midi channel command and the MSB/LSB command?
Do I enter a comma between the midi channel command and the MSB/LSB command?
E.g., If I must enter the midi channel, and want the tempo of 143, what would I enter:
CA6A06B2B; or
CA6A0
CA6B2B; or
CA 6A0 6B2B; or
CA, 6A0, 6B2B.
And I’m sure I could go on and on…
Thanks for your help!!!

From my earlier post:

Basically, if the tempo you want is less than 128 (0 to 127) then MSB is 0 and LSB is the tempo. If the tempo you want is 128-255 then MSB is 1 and LSB is the tempo - 128. If the tempo you want is 256 or greater then MSB is 2 and LSB is tempo-256.

Don’t get too hung up on the hex stuff unless you need to understand it. If you are looking at raw midi data in a monitor (like Midi-OX) then it is often displayed as hex and sometimes, the raw format of midi data is displayed as hex (or even worse, binary) in documentation but I suspect you really don’t need to get that far into it. Hex is just an alternative way of displaying and entering decimal data, it really means the same thing in the end to the computer, it’s just easier to visualize sometime in hex but like I say, use whatever is easiest for you to understand and use with whatever software you are using.

Thanks once again. To try to cut to the chase on this: BB is set to midi-in channel 10; what is the hex code I would write, to send to BB, to change the tempo to 143.

In hex

B9,6A,1
Followed by
B9,6B,F

B9,6A,1 means Channel 10, CC 106 (MSB) , value 1 (1 times 128 = 128)
B9,6B,F means Channel 10, CC 107 (LSB), value 15 (plus 15 = 143)

Thanks all, this very help me. :slight_smile: