UltraID3Lib Metadaten auslesen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    UltraID3Lib Metadaten auslesen

    Hey guten Abend,

    hier im Forum gibts ja schon allerhand Themas über die UltraID3Lib.dll.. Nur nix passendes bzw. aktuelles. Ich hab einen Code gefunden und mal in mein Projekt eingefügt nur kommen da zig Fehlermeldungen. Der Code scheint für eine frühere Version der DLL geschrieben zu sein. Hat mir jemand vielleicht eine Dokumentation der aktuellen DLL so dass ich mir selber was zusammenschustern kann oder aber eine fertige Lösung parat, die mir Interpret, Album, Titel, Coverbild und evtl. noch die Spieldauer zur Verfügung stellt?

    Wäre echt gut
    @kafffee Poste mal den Code, der die Meldungen bringt und eine Beschreibung, was er tun soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Imports HundredMilesSoftware.UltraID3LibUltraID3Lib 'DLL importieren
    2. Module Module2
    3. Private m_UltraID3 As New HundredMilesSoftware.UltraID3Lib.UltraID3 'Variablen deklarieren
    4. Private m_CurrentPictureFrame As ID3v23PictureFrame 'hier meckert er, ich nehme an, dass ID3v23PictureFrame umbenannt wurde
    5. Private m_PictureTypes As ArrayList
    6. Private m_FileName As String
    7. Private m_PictureFrames As ID3FrameCollection 'und hier meckert er, ich nehme an, dass ID3FRameCollection umbenannt wurde
    8. Private m_PictureIndex As Integer
    9. Private Sub Cover() 'Frameinformationen laden?
    10. m_UltraID3.Read(PlayList1.FocusedItem.Tag.ToString)
    11. m_PictureFrames = m_UltraID3.ID3v2Tag.Frames.GetFrames(MultipleInstanceID3v2FrameTypes.ID3v23Picture) 'hier schlägt er mir u.a. vor, ID3v2Tag in ID3v1Tag und ID3v2Tag in ID3v23Tag zu ändern, daher denke ich dasss die Version vielleicht veraltet ist, ich weiss nicht woher der Debugger diese Info nimmt...
    12. m_PictureIndex = -1
    13. If m_PictureFrames.Count > 0 Then
    14. m_PictureIndex = 0
    15. End If
    16. cover3()
    17. End Sub
    18. Private Sub cover3() 'Cover in PictureBox laden?
    19. Dim PictureFrameCount As Integer = m_PictureFrames.Count
    20. If PictureFrameCount > 0 Then
    21. m_CurrentPictureFrame = CType(m_PictureFrames.Item(m_PictureIndex), ID3v23PictureFrame)
    22. With m_CurrentPictureFrame
    23. If m_CurrentPictureFrame.Picture IsNot Nothing Then
    24. picturebox1.BackgroundImage = m_CurrentPictureFrame.Picture
    25. Else
    26. 'Ansonsten...
    27. End If
    28. End With
    29. End If
    30. End Sub
    31. End Module

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()

    @kafffee OK, Deine Informationen sind völlin unzureichend, sorry.
    ich nehme an
    ist kontraproduktiv, weil Du da die Intention der Dir helfen wollenden und helfen wollendinnen ggf. auf eine falsche Spur lenkst.
    Was soll der Code tun :?:
    ====
    Was ist das für eine / mehrere DLLs?
    Kannst Du sagen, wo man die her bekommt oder kannst Du sie (gezippt) anhängen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry das wollte ich nicht.

    Die DLL ist eine DLL zum Auslesen und verändern von MP3 Metadaten (ID3s). In diesem Code soll nun das Coverbild eines ID3v2 Tags ausgelesen werden und in eine PictureBox geladen werden.

    Die DLL hab ich dir angehängt.

    Bin jetzt mal auf die Idee gekommen und hab ne andere Suchmaschine befragt :rolleyes: und hab ne kleine Dokumentation gefunden und mir folgenden Code geschrieben. Da war leider nichts drin, wie man das Coverbild extrahiert. Vielleicht hilft es dir trotzdem weiter. Der Code funktioniert:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim FileMp3WithPath = "test.mp3"
    3. Dim objID3 As New HundredMilesSoftware.UltraID3Lib.UltraID3
    4. objID3.Read(FileMp3WithPath)
    5. Dim Artist As String = objID3.Artist
    6. Dim Album As String = objID3.Album
    7. Dim Title As String = objID3.Title
    8. Dim TrackNr As String = objID3.TrackNum
    9. Dim Year As String = objID3.Year
    10. Dim Genre As String = objID3.Genre
    11. Dim Comment As String = objID3.Comments
    12. Dim Duration = objID3.Duration
    13. 'objID3.Close
    14. 'ObjectClose(objID3)
    15. TextBox1.Text = Artist & Environment.NewLine & Album & Environment.NewLine & Title & Environment.NewLine & TrackNr & Environment.NewLine & Year & Environment.NewLine & Genre & Environment.NewLine & Comment
    16. End Sub
    Dateien
    • UltraID3Lib.zip

      (62,41 kB, 67 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()

    @kafffee Fang an mit Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    Richte Dein Studio so ein, dass ein neues Projekt automatisch Option Strict On hat :!:
    Gibt es zu dieser DLL eine UltraID3Lib.XML?
    Wenn ja, häng die bitte mal an.
    ===============
    Ich nehme mal an, Du hast den Code von hier:
    Mit der UltraID3Lib AlbumCover auslesen
    dann gib beim nächsten Mal die Quelle gleich mit an.
    Möglicherweise hat der aine andere UltraID3Lib.dll als Du, Typen, die dort drinne sind, sind in Deiner DLL nicht drin.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    kafffee schrieb:

    VB.NET-Quellcode

    1. 'hier schlägt er mir u.a. vor, ID3v2Tag in ID3v1Tag und ID3v2Tag in ID3v23Tag zu ändern, daher denke ich dasss die Version vielleicht veraltet ist, ich weiss nicht woher der Debugger diese Info nimmt...
    Jo - mach doch einfach mal, wasser sagt.
    Und was RFG auch.



    Der Debugger kann solche Informationen aus... nee - hat so nicht so viel Zweck.
    Gewöhn dir an, Meldungen des Computers im Wortlaut wiederzugeben, nicht in freier Rede, was du davon verstanden hast.
    @kafffee Probier mal das hier:
    Form mit Button, MultiLine-TextBox, PictureBox und dem Verweis auf diese DLL:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports HundredMilesSoftware.UltraID3Lib
    3. Public Class Form1
    4. Private m_UltraID3 As New UltraID3
    5. Private m_CurrentPictureFrame As ID3PictureFrame
    6. Private m_PictureTypes As ArrayList
    7. Private m_FileName As String
    8. Private m_PictureFrames As ID3FrameCollection
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Dim FileMp3WithPath = "C:\Temp\Test.MP3"
    11. m_UltraID3 = New UltraID3
    12. m_UltraID3.Read(FileMp3WithPath)
    13. Dim sb = New StringBuilder()
    14. sb.AppendLine(m_UltraID3.Artist)
    15. sb.AppendLine(m_UltraID3.Album)
    16. sb.AppendLine(m_UltraID3.Title)
    17. sb.AppendLine(m_UltraID3.TrackNum.ToString)
    18. sb.AppendLine(m_UltraID3.Year.ToString)
    19. sb.AppendLine(m_UltraID3.Genre)
    20. sb.AppendLine(m_UltraID3.Comments)
    21. sb.AppendLine(m_UltraID3.Duration.ToString)
    22. TextBox1.Text = sb.ToString()
    23. Cover()
    24. End Sub
    25. Private Sub Cover() 'Frameinformationen laden?
    26. m_PictureFrames = m_UltraID3.ID3v23Tag.Frames.GetFrames(MultipleInstanceFrameTypes.Picture)
    27. If m_PictureFrames.Count = 0 Then
    28. Return
    29. End If
    30. cover3(0)
    31. End Sub
    32. Private Sub cover3(Index As Integer) 'Cover in PictureBox laden?
    33. Dim PictureFrameCount As Integer = m_PictureFrames.Count
    34. If PictureFrameCount > 0 Then
    35. m_CurrentPictureFrame = CType(m_PictureFrames.Item(Index), ID3PictureFrame)
    36. With m_CurrentPictureFrame
    37. If m_CurrentPictureFrame.Picture IsNot Nothing Then
    38. PictureBox1.Image = m_CurrentPictureFrame.Picture
    39. Else
    40. 'Ansonsten...
    41. End If
    42. End With
    43. End If
    44. End Sub
    45. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    kafffee schrieb:

    Und der Code ist verständlich
    Fein - dann kannste ihn ja auch vereinfachen.
    Die Sub cover() kann man nämlich mit paar Klicks und Tastendrücken überflüssig machen und entfernen.

    Insges. ist das ja nur Ausprobier-Code, und du solltest nun erforschen, was davon Initialisierung ist, und was auf jede Datei neu anzuwenden ist.
    Initialisierung sollte (in diesem Falle) im Form_Shown abgehandelt werden, damit nur einmal initialisiert wird.
    Auch zu erforschen ist, welche Objekte IDisposable sind, und daher entsorgt werden müssen, wenn nicht mehr gebraucht.

    Nochmal die wichtigsten Werkzeuge für solche Recherchen: VisualStudio richtig nutzen (Google ist nicht deine Mami)

    Guck, ich hab Haltepunkt auf zeile#17 von RFGs Code gemacht, und kann da im ÜberwachungsFenster mal gleich reingugge, und bin eiglich im Bilde wie die Lib tickt:

    Ich sehe, die eingelesene Datei hat 20 "Frames" - so nennen die Ultra-Leute das.
    Die Frames haben verschiedene Typen, etwa Frame(0) hat FrameTypes.Title - wie du siehst (schau hin!).
    Was auch zu sehen ist: Das m_UltraID3 beinhaltet den FileName.
    Also pro File son Ding instanzieren - da ist wirklcih alles drin, was man braucht - nichtmal den Dateinamen muss man sich extern noch merken.

    RFGs Code weiter oben sucht speziell nach MultipleInstanceFrameTypes.Picture - und geht damit um,ob was gefunden wird oder nicht. Gleich mal Cursor drauf und seine Methode im OB angeguckt (zu Definition gehen):

    Auffallen tut, dasses da um einen MultipleInstanceFrameTypes.Picture geht - das ist etwas anderes als der FrameTypes.Picture der theoretisch evtl in Bildle 1 auftauchen würde (wenn meine MP3 denn Pictures enthielte).
    Jo - mit diesen Werkzeugen: ObjectBrowser, ÜberwachungsFenster kann man jetzt eine Menge anstellen.
    Und ich bin auch recht angetan von der Lib - die scheint ja wirklich kaum einen Wunsch offen zu lassen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()