zurück
Autor: Bernhard Elbl
Erstellt am: 01 Mär 2002 16:30

File Functions Teil 1 - MP3´s und Bitmap´s

Mit VB6 lassen sich binäre Dateien sehr leicht Auslesen. Also können Sie z.B. die Breite und Höhe eines Bildes, oder Titel, Album, Künstler eines MP3-Files auslesen. All diese Info´s sind in jedem MP3 oder Bild immer gleich und bilden eine Struktur. Diese muss man natürlich kennen. Binäre Dateien in VB6 auslesen ist viel einfacher, schneller und besser als mit ASP. Ja sie haben richtig gehört auch mit puren ASP können Sie die oben genannten Informationen wie z.B. Kompression und Grösse eines Bildes auslesen und mehr oder weniger auch schreiben.

Welche Struktur hat die MP3 Info?
Jeder MP3-Player zeigt Ihnen an, wie ein Song heisst und vieles mehr. Das MP3Info befindet sich zum Schluss eines MP3-Files und hat die exacte Länge von 128 Bytes. Zu mindest bei der ID3v1. Inzwischen gibt es allerdings die ID3v2. Bei dieser befindet sich das Info und hat KEINE 128 Byte-Struktur!
TAG 3 Bytes
Titel 30 Bytes
Künstler 30 Bytes
Album 30 Bytes
Jahr 4 Bytes
Kommentar 30 Bytes
Genre 1 Byte

Das "TAG"-Element definiert den Anfang dieser Info und enthält immer den Wert "TAG". Der Rest spricht wohl für sich. mehr Infos...
http://www.pcwelt.de/tipps/software/allgemein/17399/

Für VB6 ergibt sich daraus folgende Struktur-Definition.

Private Type MP3Info
    TAG As String * 3
    Titel As String * 30
    Kuenstler As String * 30
    Album As String * 30
    Jahr As String * 4
    Kommentar As String * 30
    Genre As Byte
End Type

Mit String * 30 wird ein String mit der Länge 30 definiert usw. Und am Schluss haben wir dann unsere 128 Byte-Struktur.

Diese Struktur baue ich jetzt in das Klassen-Modul "CMP3Info" ein und schreibe die Methode SetMP3File, welche die Struktur füllt.
CMP3Info.cls

Private Type MP3Info
    TAG As Str....

Private m_MP3Info As MP3Info

Private m_sFileName As String

Public Sub SetMP3File(ByVal sFileName As String)
    Dim iFile As Integer
    Dim lInfoBegin As Long
   
    iFile = FreeFile
    ' Datei mit Binär-Mode öffnen
    Open sFileName For Binary Access Read As #iFile
    lInfoBegin = LOF(iFile) - 127
    ' MP3Info Struktur füllen
    Get #iFile, lInfoBegin, m_MP3Info

    Close #iFile
    m_sFileName = sFileName
End Sub

' Properties einbauen umd die Information zu veräussern
Public Property Get Titel() As String
    Titel = m_MP3Info.Titel
End Property
Public Property Get Kuenstler() As String
    Kuenstler = m_MP3Info.Kuenstler
End Property
Public Prop........usw.........


Was jetzt noch fehlt ist die Struktur zu verändern um selber Titel usw zu definieren und ins MP3-File zu schreiben.
' MP3-Struktur verändern mit Property Lets
Public Property Let Titel(ByVal par As String)
    m_MP3Info.Titel = par
End Property
Public Property Let Kuenstler(ByVal par As String)
    m_MP3Info.Kuenstler = par
End Property

' MP3Info mit aktueller überschreiben.
Public Sub WriteMP3Info()
    Dim iFile As Integer
    Dim lInfoBegin As Long
   
    iFile = FreeFile
    Open m_sFileName For Binary Access Write As #iFile
    lInfoBegin = LOF(iFile) - 127
   
    Put #iFile, lInfoBegin, m_MP3Info

    Close #iFile
End Sub


Jetzt kann man die Klasse benutzen. 1 Form, 1 Command-Button und dann umrühren...
Private Sub cmdMP3Info_Click()
    Dim sFileName As String
    Dim vBin As Variant
    sFileName = "C:myMP3File.mp3"
   
    If Not sFileName = "" Then
        Dim oMP3Info As New CMP3Info
        With oMP3Info
            .SetMP3File sFileName
            Text1.Text = .Titel
            Text2.Text = .Kuenstler
            Text3.Text = .Album
            Text4.Text = .Jahr
            Text5.Text = .Kommentar
        End With
        Set oMP3Info = Nothing
    End If
   
End Sub


Was ist mit BitMap´s auslesen?
Das geht ganz genauso. Nur das wir zwei Strukturen brauchen, die bereits vordefiniert über den API-Viewer zu erreichen sind. Die BitMap-Informationen stehen nicht bei den MP3´s am Schluss des Files, sondern gleich ganz am Anfang.
Type BITMAPFILEHEADER
Type BITMAPINFOHEADER

Wichtig ist die Reihenfolge zu beachten!!

Und so werden die Strukuren für BitMaps gefüllt!

    iFile = FreeFile
    Open sFileName For Binary Access Read As #iFile
    Get #iFile, , m_BitMapHeader
    Get #iFile, , m_BitMapInfo

    Close #iFile



Alle Sources gibts unten zum runterladen.

 


© Copyright 2008 ppedv AG