まず、ビット演算について調べてみてください。wikipediaにも結構詳しく載っています。
ビット演算(wikipedia)
HIBYTEやLOBYTEというのは、16bitを上位,下位の8bitに分断するものです。しかし、MIDIで使われている可変長数値は、HIBYTEなどよりも、もっと細かいビット操作を必要としています。
例えば、上のコードのIsTopStanding()ですが、これは、先頭のbitが1かどうかを返す関数です。先頭の1bitの状態を取得するには、HIBYTEなどでは8bit単位なので無理なのは分かるでしょう。そこで、ビット演算をうまくつかいます。
コード: 全て選択
Function IsTopStanding(b As Byte) As BOOL
If b And &H80 Then
Return TRUE
Else
Return FALSE
End If
End Function
その前に補足です。条件式ですが、ActiveBasicの場合、条件式の結果が0以外だったら、真と判定されます。
条件式のb And &H80が真だったら、先頭のbitは1になっているというわけですが、具体的には、次のようなビット演算になっています。
コード: 全て選択
b = 10110101(2進数)だった場合
&H80は2進数で10000000です。
10110101
and)10000000
-----------------
10000000
and演算をやっていれば分かりますが、and演算の性質は、どちらかの値が0だったら計算結果が0になります。そして、どちらも1だった場合、1になります。andする値が0の場合、その計算結果は必ず0になります。
コード: 全て選択
0 and 0 = 0
1 and 0 = 0
この性質を利用して、計算します。まず、先頭のビットにand 1することによって、bの値が1だった場合1、0だった場合0となります。1つでもビットが1であれば条件式は真になりますので、他の不要な7bitは、and 0して、全て0にしてしまいます。
こうすることにより、先頭のbitがどうなっているかを、条件式で判断することができます。
こんな感じで、他にも、Orやシフト演算をうまく使い、計算していきます。
最初から複雑な演算は難しいと思いますので、まずは、ビット演算に慣れてみてください。
今日は時間がないので、少し雑な説明になってしまいました。