VB-Code in C(++) konvertieren, kann einer beide Sprachen ?



  • Ersmal, jutten Tag an alle 🙂

    Hab hier einen kleinen VisualBasic-Code der die Informationen einer MP3-Datei ausließt (Bitrate, Länge, Frequenz, ...).

    Allerdings hab ich schon versucht den Code nach C(++) zu übersetzen und ich bin kläglich gescheitert 🤡 😕 ...wär echt super genial wenn einer von euch (der VisualBasic kann) mir den Code übersetzen könnte. Hoffe mal, dass das jez nit unverschämt klingt.... 🙄

    PS: Ich weiß das es viele andere Bibiotheken gibt die noch viel mehr können als diese im Vergleich lächerliche Funktion, wollte mir aber selber ne Klasse schreiben
    die das kapselt!

    ALSO hier der (VB)-Code:

    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
    

    Hier noch ein Beispielaufruf:

    Dim MP3Info As MP3Information
    
    MP3Info = GetMP3Information("C:\Datei.mp3")
    

    UND: VIELEN VIELEN DANK im voraus, wär echt cool wenn
    sich das mal einer angucken könnte 👍



  • ➡ projekte forum



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Servus,

    wenns nicht unbedingt der obere Code sein muss dann benutz doch den:

    http://www.codeproject.com/audio/cmp3info.asp

    Den Code dort Oben umsetzen, kostet Geld *g*

    mfg
    Hellsgore


Log in to reply