MP3 mit variabler Bitrate

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame


Excel-Version: XP
nach unten

Betrifft: MP3 mit variabler Bitrate
von: Rob
Geschrieben am: 29.04.2002 - 23:27:34

Hi,

ich habe ein Makro, welches mir Informationen über eine MP3 liefert, jedoch habe ich ein kleines Problem mit dem auslesen der Bitrate. Wenn die MP3 eine variable Bitrate hat, wird irgendeine Zahl ausgegeben, es soll dies jedoch folgendermaßen ausgegeben werden: "variabel (max. Wert)".

Kann mir jemand sagen, wie ich das Problem lösen kann?

Danke

nach oben   nach unten

Re: MP3 mit variabler Bitrate
von: Martin Beck
Geschrieben am: 30.04.2002 - 15:45:59

Hallo Rob,

könntest Du das Makro mal posten?

Gruß
Martin Beck


nach oben   nach unten

Re: MP3 mit variabler Bitrate
von: Rob
Geschrieben am: 01.05.2002 - 14:52:09

Private Type MP3Information
ID As String 'ID
Layer As String 'Layer
Bitrate As Long 'Bitrate
SampleRate As Long 'Hz
Frames As Long 'Frame-Anzahl
Duration As Long 'Länge (in Sekunden)
End Type

Private Function GetMP3Information(ByVal MP3File As String) As MP3Information
Dim dIN As String
Dim bitrate_lookup(7, 15) As Integer
Dim bitrate_data As String
Dim actual_bitrate As Long
Dim X As Integer, Y As Integer
Dim mp3_id As Double, mp3_layer As Double, mp3_prot As Double
Dim mp3_bitrate As Double, mp3_freq As Double, mp3_pad As Double
Dim framesize As Double, total_frames As Double, track_length As Double

'Bitraten-Informationen
bitrate_data = bitrate_data & "032,032,032,032,008,008,"
bitrate_data = bitrate_data & "064,048,040,048,016,016,"
bitrate_data = bitrate_data & "096,056,048,056,024,024,"
bitrate_data = bitrate_data & "128,064,056,064,032,032,"
bitrate_data = bitrate_data & "160,080,064,080,040,040,"
bitrate_data = bitrate_data & "192,096,080,096,048,048,"
bitrate_data = bitrate_data & "224,112,096,112,056,056,"
bitrate_data = bitrate_data & "256,128,112,128,064,064,"
bitrate_data = bitrate_data & "288,160,128,144,080,080,"
bitrate_data = bitrate_data & "320,192,160,160,096,096,"
bitrate_data = bitrate_data & "352,224,192,176,112,112,"
bitrate_data = bitrate_data & "384,256,224,192,128,128,"
bitrate_data = bitrate_data & "416,320,256,224,144,144,"
bitrate_data = bitrate_data & "448,384,320,256,160,160,"

For Y = 1 To 14
For X = 7 To 5 Step -1
bitrate_lookup(X, Y) = Left(bitrate_data, 3)
bitrate_data = Right(bitrate_data, Len(bitrate_data) - 4)
Next
For X = 3 To 1 Step -1
bitrate_lookup(X, Y) = Left(bitrate_data, 3)
bitrate_data = Right(bitrate_data, Len(bitrate_data) - 4)
Next
Next

Open MP3File For Binary As #1
'4k der Datei einlesen, um einen Frameheader zu finden
dIN = Input(4096, #1)
filesize = LOF(1) 'Wird benötigt um die Tracklänge zu berechnen
Close #1

'Frame-Header beginnt mit 12 Bitsätzen
Do Until i = 4095
i = i + 1
d1 = Asc(Mid(dIN, i, 1))
d2 = Asc(Mid(dIN, i + 1, 1))

If d1 = &HFF And (d2 And &HF0) = &HF0 Then
'20 Header-Bits einlesen
temp_string = Mid(dIN, i + 1, 3)
mp3bits_string = ShiftBits(Mid(dIN, i + 1, 3))
Exit Do
End If

dSHIFT = ShiftBits(Mid(dIN, i, 3))
dd1 = Asc(Left(dSHIFT, 1))
dd2 = Asc(Right(dSHIFT, 1))

If dd1 = &HFF And (dd2 And &HF0) = &HF0 Then
'20 Header-Bits einlesen
mp3bits_string = Mid(dIN, i + 2, 3)
Exit Do
End If
Loop

'Die ersten 20 Bits sind Header-Infos für diesen Frame
'Das 1. Bit ist die ID; 0 = MPG-2, 1 = MPG-1
mp3_id = (&H80 And Asc(Left(mp3bits_string, 1))) / 128
'Die nächsten 2 Bits sind Layer
mp3_layer = (&H60 And Asc(Left(mp3bits_string, 1))) / 32
'Das nächste Bit ist Schutz
mp3_prot = &H10 And Asc(Left(mp3bits_string, 1))
'Die nächsten 4 Bits beschreiben die Bitrate
mp3_bitrate = &HF And Asc(Left(mp3bits_string, 1))
'Die nächsten 2 Bits legen die Frequenz fest
mp3_freq = &HC0 And Asc(Mid(mp3bits_string, 2, 1))
'Das nächste Bit ist Padding
mp3_pad = (&H20 And Asc(Mid(mp3bits_string, 2, 1))) / 2
actual_bitrate = 1000 * CLng((bitrate_lookup((mp3_id * 4) Or mp3_layer, mp3_bitrate)))

If mp3_id = 0 Then
GetMP3Information.ID = "MPEG-2"
Else
GetMP3Information.ID = "MPEG-1"
End If

Select Case mp3_layer
Case 1
GetMP3Information.Layer = "Layer III"
Case 2
GetMP3Information.Layer = "Layer II"
Case 3
GetMP3Information.Layer = "Layer I"
End Select
GetMP3Information.Bitrate = actual_bitrate

Select Case (mp3_id * 4) Or mp3_freq
Case 0
sample_rate = 22050
Case 1
sample_rate = 24000
Case 2
sample_rate = 16000
Case 4
sample_rate = 44100
Case 5
sample_rate = 48000
Case 6
sample_rate = 32000
End Select
GetMP3Information.SampleRate = sample_rate

'Trackdauer berechnen
framesize = ((144 * actual_bitrate) / sample_rate) + mp3_pad
total_frames = filesize / framesize
track_length = total_frames / 38.5 '38.5 Frames pro Sekunde

GetMP3Information.Frames = Int(total_frames)
GetMP3Information.Duration = Int(track_length)
End Function

Private Function ShiftBits(dIN As String) As String
Dim sd1 As Integer, sd2 As Integer, sd3 As Integer
Dim do1 As Integer, do2 As Integer

sd1 = Asc(Left(dIN, 1))
sd2 = Asc(Mid(dIN, 2, 1))
sd3 = Asc(Right(dIN, 1))

do1 = ((sd1 And &HF) * 16) Or ((sd2 And &HF0) / 16)
do2 = ((sd2 And &HF) * 16) Or ((sd3 And &HF0) / 16)

ShiftBits = Chr(do1) + Chr(do2)
End Function


nach oben   nach unten

Re: MP3 mit variabler Bitrate
von: Martin Beck
Geschrieben am: 03.05.2002 - 09:33:35

Hallo Rob,

ich stehe etwas auf dem Schlauch. Wie rufe ich denn die Function GetMP3Information auf?

Gruß
Martin Beck


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "doppelte Tabelle vereinen"