Conoscere la frequenza di campionamento dei dati audio di un file MP3

Da Gambas-it.org - Wikipedia.

Per conoscere la frequenza di campionamento dei dati audio di un file MP3 mediante le sole risorse di Gambas, è possibile usare il seguente codice:

Public Sub Main()

 Dim mp3, dati As String

 mp3 = "/percorso/del/file.mp3"
 Print "File audio mp3: "; Quote(File.Name(mp3))
 dati = File.Load(mp3)
 Print "\nDimensione:     "; Len(dati); " byte"

' Invoca la funzione per ottenere la frequenza di campionamento dei dati audio del file MP3:
 Print "Frequenza:      \e[31m"; VersioneMP3(dati); " hertz"

End

Private Function VersioneMP3(s As String) As Integer

 Dim ver_mp3 As String
 Dim j As Integer
 Dim vB, frB As Byte
 
 For j = 1 To Len(s) - 1
   If (Asc(s, j) = 255) And (Asc(s, j + 1) > 241) And (Asc(s, j + 2) > 15) Then
     
' Individua 2° byte dell'header per estrarre la versione MPEG del file mp3.
' I primi 3 bit più significativi (tutti posti a 1) appartengono con quelli del 1° byte all'identificazione dell'header.
' Viene individuata la versione del file mp3:
     vB = Asc(s, j + 1) And 24
     Select Case vB
       Case 0
         ver_mp3 = "2.5"
       Case 16
         ver_mp3 = "2"
       Case 24
         ver_mp3 = "1"
     End Select
     
     frB = Asc(s, j + 2) And 12
     Return EstraeFrequenza(ver_mp3, frB)
     Exit
     
   Endif
 Next

End

Private Function EstraeFrequenza(Vmpeg As String, fre As Byte) As Integer

Dim frq As Integer

 Select Case Vmpeg
   Case "1"          ' Nel caso di Mpeg vers. 1
    Select Case fre
      Case 0
        frq = 44100
      Case 4
        frq = 48000
      Case 8
        frq = 32000
    End Select
  Case "2"           ' Nel caso di Mpeg vers. 2
    Select Case fre
      Case 0
        frq = 22050
      Case 4
        frq = 24000
      Case 8
        frq = 16000
    End Select
  Case "2.5"         ' Nel caso di Mpeg vers. 2.5
    Select Case fre
      Case 0
        frq = 11025
      Case 4
        frq = 12000
      Case 8
        frq = 8000
    End Select
End Select
 
Return frq
 
End