Differenze tra le versioni di "Calcolare il bitrate di un file MP3"
Da Gambas-it.org - Wikipedia.
(Creata pagina con "Esiste una agevole formula per calcolare (seppure in modo un pochino approssimativo) il birate di un file mp3. Tale formula richiede, però, la conoscenza della durata del fil...") |
|||
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | + | Per conoscere il ''Bitrate'' di un file MP3, è possibile adottare alcune modalità. <SUP>[[[#Note|nota 1]]]</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 | ||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [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]] | ||
+ | |||
+ | |||
+ | |||
+ | =Riferimenti= | ||
+ | * https://wiki.videolan.org/Bit_rate/ | ||
+ | * https://en.wikipedia.org/wiki/MP3#Bit_rate | ||
+ | * https://en.wikipedia.org/wiki/MP3#File_structure |
Versione attuale delle 16:54, 16 feb 2024
Per conoscere il Bitrate di un file MP3, è possibile adottare alcune modalità. [nota 1]
Indice
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:
- 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