Android Code Snippet midiDeltaFromLong (delay midicode from time)

Long Way to Tipperary...

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:
Top