Long Way to Tipperary...
https://www.mobilefish.com/tutorials/midi/midi_quickguide_specification.html#figure_1
B4X:
private Sub midiDeltaFromLong (ticks As Long) As Byte()
Dim int1, int2, int3,int4 As Int
Dim bitstr As String = Bit.ToBinaryString(ticks) ' works with long as well...
Dim bitbyte() As Byte = bitstr.GetBytes("utf8") ' BitStr nach bytes ("1","0" = 49,48)
Dim bitbyte2(bitbyte.Length) As Byte ' reihenfolge umkehren turn around
For i = 0 To bitbyte.Length - 1
bitbyte2(i) = bitbyte(bitbyte.Length - i - 1)
Next
Log("-------------------------------------")
Log("Ticks:" & ticks)
If ticks < 128 Then
' 1 byte
For i = 0 To bitbyte.Length - 1
If bitbyte2(i)= 49 Then
int1 = int1 + Power( 2,i)
End If
Next
Dim b(1) As Byte
b(0) = int1
Return b
else If ticks < 16384 Then
' 2 byte
For i = 0 To 6
If bitbyte2(i)= 49 Then
int1 = int1 + Power( 2,i)
End If
Next
For i = 7 To bitbyte.Length - 1
If bitbyte2(i)= 49 Then
int2 = int2 + Power( 2,(i-7))
End If
Next
int2 = int2 + 0x80
Dim b(2) As Byte
b(0) = int2
b(1) = int1
Return b
Else If ticks < 2097152 Then
' 3 byte
For i = 0 To 6
If bitbyte2(i)= 49 Then
int1 = int1 + Power( 2,i)
End If
Next
For i = 7 To 13
If bitbyte2(i)= 49 Then
int2 = int2 + Power( 2,(i-7))
End If
Next
int2 = int2 + 0x80
For i = 14 To bitbyte.Length - 1
If bitbyte2(i)= 49 Then
int3 =int3+ Power( 2,(i-14))
End If
Next
int3 = int3 + 0x80
Dim b(3) As Byte
b(0) = int3
b(1) = int2
b(2)= int1
Return b
Else If ticks < 268435456 Then
' 4 byte
For i = 0 To 6
If bitbyte2(i)= 49 Then
int1 = int1 + Power( 2,i)
End If
Next
For i = 7 To 13
If bitbyte2(i)= 49 Then
int2 = int2 + Power( 2,(i-7))
End If
Next
int2 = int2 + 0x80
For i = 14 To 20
If bitbyte2(i)= 49 Then
int3 =int3 + Power( 2,(i-14))
End If
Next
int3 = int3 + 0x80
For i = 21 To bitbyte.Length - 1
If bitbyte2(i)= 49 Then
int4 = int4 + Power( 2,(i-21))
End If
Next
int4 = int4 + 0x80
Dim b(4) As Byte
b(0) = int4
b(1) = int3
b(2)= int2
b(3)= int1
Return b
Else
Dim b() As Byte
b = bc.StringToBytes( "hex:" & Bit.ToHexString(int4) & " " & Bit.ToHexString(int3) & " " & Bit.ToHexString(int2) & " " & Bit.ToHexString(int1),"utf8")
Return b
End If
End Sub
https://www.mobilefish.com/tutorials/midi/midi_quickguide_specification.html#figure_1
Last edited: