Differenze tra le versioni di "Calcolare il bitrate di un file MP3"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Esiste una agevole formula per calcolare (seppure in modo un pochino approssimativo) il ''bitrate'' di un file mp3. Tale formula richiede, però, la conoscenza della durata del file audio mp3 in esame. <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
Per conoscere il ''Bitrate'' di un file MP3, è possibile adottare alcune modalità. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 +
 
 +
 
 +
==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
 
  ((dimensione * 8) / durata) / 1000 = bitrate in Kbps
 
Laddove:
 
Laddove:
* "''dimensione''" è la dimensione in byte del file mp3;
+
* "''dimensione'' " è la dimensione in byte del file mp3;
* "''durata''" è la durata del file mp3 espressa in secondi.
+
* "''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 = "<FONT color=gray>''/percorso/del/file.mp3''</font>"
 +
  Print "File audio mp3:  "; Quote(File.Name(fileMP3))
 +
  dati = File.Load(fileMP3)
 +
 +
<FONT Color=gray>' ''Invoca la funzione per ottenere il bitrate costante del file audio MP3:''</font>
 +
  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
 +
<FONT Color=gray>' ''Individua il 1° byte dell'header del frame audio MPEG del file mp3 caricato:''</font>
 +
    If (Asc(s, j) == &FF) And (Asc(s, j + 1) > &F1) And (Asc(s, j + 2) > &0F) Then
 +
   
 +
<FONT Color=gray>' ''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.''</font>
 +
 
 +
<FONT Color=gray>' ''Viene individuata la versione del file mp3:''</font>
 +
      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
 +
     
 +
<FONT Color=gray>' ''Viene individuato il "Layer" del file mp3:''</font>
 +
      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
 +
     
 +
<FONT Color=gray>' ''Si analizza, quindi, il terzo byte per estrarre il "bitrate" del file mp3. Questa informazione è condizionata dalla versione e dal layer del file MPEG.''</font>
 +
      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  <FONT Color=gray>' ''Nel caso di Mpeg vers. 1''</font>
 +
    Select Case layB    <FONT Color=gray>' ''Verifica il Layer''</font>
 +
      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    <FONT Color=gray>' ''Verifica il Layer''</font>
 +
      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
  
  
  
=Nota=
+
=Note=
[1] Vedere anche questa pagina della wiki: [[Calcolare_la_durata_di_un_file_MP3|Calcolare la durata di un file MP3]]
+
[1] Vedere anche le seguenti pagine:
 +
* [[La struttura di un file MPEG]]
 +
* [[Estrarre informazioni da un file MP3 con le funzioni esterne del API di libmpg123]]
 +
* [[Ottenere il bitrate di un file mp3 con le funzioni esterne del API di VLC]]
  
  

Versione attuale delle 16:54, 16 feb 2024

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