Differenze tra le versioni di "Calcolare il bitrate di un file MP3"
Da Gambas-it.org - Wikipedia.
(3 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