Calcolare il bitrate di un file MP3

Da Gambas-it.org - Wikipedia.

Per conoscere il Bitrate di un file MP3, è possibile adottare alcune modalità. [nota 1]


Calcolare il Bitrate conoscendo la durata del file MP3

Conoscendo la durata di un file mp3, è possibile ottenere (seppur talvolta in modo un po' approssimativo) il Bitrate di quel file audio.

((dimensione * 8) / durata) / 1000 = bitrate in Kbps

Laddove:

  • "dimensione " è la dimensione in byte del file mp3;
  • "durata " è la durata del file mp3 espressa in secondi.


Ottenere il Bitrate Costante di un file MP3

Se il file mp3 posside un Bitrate "costante", per ottenerlo è possibile utilizzare il seguente codice:

Public Sub Main()
 
 Dim fileMP3, dati As String
   
 fileMP3 = "/percorso/del/file.mp3"
 Print "File audio mp3:   "; Quote(File.Name(fileMP3))
 dati = File.Load(fileMP3)

' Invoca la funzione per ottenere il bitrate costante del file audio MP3:
 Print "Bitrate Costante: \e[1m"; BitrateCostante(dati); "\e[0m Kbps"

End


Private Function BitrateCostante(s As String) As Short

 Dim ver_mp3, layer As String
 Dim j As Integer
 Dim vB, lB, brB As Byte
 Dim  bitrate As Short

 For j = 1 To Len(s) - 1
' Individua il 1° byte dell'header del frame audio MPEG del file mp3 caricato:
   If (Asc(s, j) == &FF) And (Asc(s, j + 1) > &F1) And (Asc(s, j + 2) > &0F) Then
    
' Individua il 2° byte dell'header per estrarre le seguenti informazioni generali sul file mp3:
' - vesione MPEG;
' - layer.
' 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
     
' Viene individuato il "Layer" del file mp3:
     lB = Asc(s, j + 1) And 6
     Select Case lB
       Case 2
         layer = "III"
       Case 4
         layer = "II"
       Case 6
         layer = "I"
     End Select
     
     Print "Versione MPEG = "; ver_mp3, "Layer = "; layer
      
' Si analizza, quindi, il terzo byte per estrarre il "bitrate" del file mp3. Questa informazione è condizionata dalla versione e dal layer del file MPEG.
     brB = Asc(s, j + 2) And 240
     bitrate = EstraeBitRate(ver_mp3, layer, brB)
  
     Break
      
   Endif
 Next

 Return bitrate

End


Private Function EstraeBitRate(Vmpeg As String, layB As String, bitB As Byte) As Short
 
 Dim velCamp As Short

 If Vmpeg = "1" Then   ' Nel caso di Mpeg vers. 1
   Select Case layB    ' Verifica il Layer
     Case "I"
       Select Case bitB
         Case 16
           velCamp = 32
         Case 32
           velCamp = 64
         Case 48
           velCamp = 96
         Case 64
           velCamp = 128
         Case 80
           velCamp = 160
         Case 96
           velCamp = 192
         Case 112
           velCamp = 224
         Case 128
           velCamp = 256
         Case 144
           velCamp = 288
         Case 160
           velCamp = 320
         Case 176
           velCamp = 352
         Case 192
           velCamp = 384
         Case 208
           velCamp = 416
         Case 224
           velCamp = 448
       End Select
     Case "II"
       Select Case bitB
         Case 16
           velCamp = 32
         Case 32
           velCamp = 48
         Case 48
           velCamp = 56
         Case 64
           velCamp = 64
         Case 80
           velCamp = 80
         Case 96
           velCamp = 96
         Case 112
           velCamp = 112
         Case 128
           velCamp = 128
         Case 144
           velCamp = 160
         Case 160
           velCamp = 192
         Case 176
           velCamp = 224
         Case 192
           velCamp = 256
         Case 208
           velCamp = 320
         Case 224
           velCamp = 384
       End Select
     Case "III"
       Select Case bitB
         Case 16
           velCamp = 32
         Case 32
           velCamp = 40
         Case 48
           velCamp = 48
         Case 64
           velCamp = 56
         Case 80
           velCamp = 64
         Case 96
           velCamp = 80
         Case 112
           velCamp = 96
         Case 128
           velCamp = 112
         Case 144
           velCamp = 128
         Case 160
           velCamp = 160
         Case 176
           velCamp = 192
         Case 192
           velCamp = 224
         Case 208
           velCamp = 256
         Case 224
           velCamp = 320
       End Select
   End Select
   
  Else
    
   Select Case layB     ' Verifica il Layer
     Case "I"
       Select Case bitB
         Case 16
           velCamp = 32
         Case 32
           velCamp = 48
         Case 48
           velCamp = 56
         Case 64
           velCamp = 64
         Case 80
           velCamp = 80
         Case 96
           velCamp = 96
         Case 112
           velCamp = 112
         Case 128
           velCamp = 128
         Case 144
           velCamp = 144
         Case 160
           velCamp = 160
         Case 176
           velCamp = 176
         Case 192
           velCamp = 192
         Case 208
           velCamp = 224
         Case 224
           velCamp = 256
       End Select
     Case "II" To "III"
        Select Case bitB
         Case 16
           velCamp = 8
         Case 32
           velCamp = 16
         Case 48
           velCamp = 24
         Case 64
           velCamp = 32
         Case 80
           velCamp = 40
         Case 96
           velCamp = 48
         Case 112
           velCamp = 56
         Case 128
           velCamp = 64
         Case 144
           velCamp = 80
         Case 160
           velCamp = 96
         Case 176
           velCamp = 112
         Case 192
           velCamp = 128
         Case 208
           velCamp = 144
         Case 224
           velCamp = 320
       End Select
   End Select
   
 Endif
 
 Return velCamp
  
End


Note

[1] Vedere anche le seguenti pagine:


Riferimenti