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

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
Per conoscere il ''Bitrate'' di un file MP3, è possibile adottare alcune modalità. <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>
  
  
Riga 11: Riga 11:
  
 
==Ottenere il Bitrate Costante di un file MP3==
 
==Ottenere il Bitrate Costante di un file MP3==
Se il file mp3 posside un ''Bitrate "costante", per ottenerlo è possibile utilizzare il seguente codice:
+
Se il file mp3 posside un ''Bitrate'' "costante", per ottenerlo è possibile utilizzare il seguente codice:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim fileMP3, dati As String
 
   Dim fileMP3, dati As String
Riga 23: Riga 23:
 
   Print "Bitrate Costante: \e[1m"; BitrateCostante(dati); "\e[0m Kbps"
 
   Print "Bitrate Costante: \e[1m"; BitrateCostante(dati); "\e[0m Kbps"
 
   
 
   
  '''End'''
+
  End
 +
 +
 +
Private Function BitrateCostante(s As String) As Short
 
   
 
   
'''Private''' Function BitrateCostante(s As String) As Short
 
 
 
 
   Dim ver_mp3, layer As String
 
   Dim ver_mp3, layer As String
 
   Dim j As Integer
 
   Dim j As Integer
Riga 76: Riga 77:
 
   Return bitrate
 
   Return bitrate
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Private''' Function EstraeBitRate(Vmpeg As String, layB As String, bitB As Byte) As Short
+
  Private Function EstraeBitRate(Vmpeg As String, layB As String, bitB As Byte) As Short
 
    
 
    
 
   Dim velCamp As Short
 
   Dim velCamp As Short
 
+
 
   If Vmpeg = "1" Then  <FONT Color=gray>' ''Nel caso di Mpeg vers. 1''</font>
 
   If Vmpeg = "1" Then  <FONT Color=gray>' ''Nel caso di Mpeg vers. 1''</font>
 
     Select Case layB    <FONT Color=gray>' ''Verifica il Layer''</font>
 
     Select Case layB    <FONT Color=gray>' ''Verifica il Layer''</font>
Riga 250: Riga 252:
 
   Return velCamp
 
   Return velCamp
 
    
 
    
  '''End'''
+
  End
  
  

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