mp3 Dateien Taggen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Infinity.

    mp3 Dateien Taggen

    Hallo

    Ich bin neu hier im Forum und habe auch noch nicht allzuviel erfahrung mit VB, allerdings bin ich kein blutiger Anfänger mehr.
    Ich möchte gerne ein kleines Programm programmieren, welches eine mp3 datei taggen kann (also Titel, Interpret, Album, evtl. noch das Cover). Aber ich bekomme das irgendwie nicht richtig hin. Anscheinend ist das doch nicht ganz so einfach, wie ich mir das vorgestellt habe, es gibt ja auch verschiedene Typen von mp3 Dateien? (habe ich mal gelesen, stimmt das?)

    Nun also, wo es bei mir jetzt genau probleme gibt:

    Angenommen ich habe eine Form, mit 3 Textboxen, eine für Titel, eine für Interpret und eine für Cover, da kann ich dann eingeben was ich will und dann möchte ich auf einen Button klicken, so dass "er" mir dann diese Dinge aus den Textboxen "in die mp3 Datei schreibt", sodass es mir dann im iTunes/Mediaplayer richtig angezeigt wird, einfach so, wie ich es in die Textboxen geschrieben habe. Kann mir da jemand helfen?

    Warum ich nicht einfach einen schon existierenden mp3-Tagger nutze? Weil ich natürlich noch einzelne Funktionen eingebaut habe, die mir "dies und das" leichter machen, jetzt aber für mein Problem unwichtig sind, deshalb habe ich diese auch gar nicht erwähnt/erklährt, etc.

    Ich Danke euch schon einmal für die, die sich Zeit nehmen und mir eine Antwort schreiben und bitte schreibt mir doch noch möglichst genau wie das jetzt funktioniert usw. damit ich dabei auch etwas lernen kann, schliesslich will ich eigentlich nur fertigen Code kopieren, wenn ich auch genau verstehe, wieso, weshalb, warum, damit ich auch verstehe, was ich hier gerade programmiere;)

    Merci
    Ablador
    Informationen, die in einer Mp3 gespeichert sind heißen je nach Version Id3v1 od. Id3v2.
    Da der manuelle Weg so etwas auszulesen für einen Anfänger etwas zu weit gegriffen wäre, solltest du auf eine Bibliothek zurückgreifen.

    Hier findest du ein paar Bibliotheken (Unter .NET).
    Liebe Grüße
    /nicht getestet
    Hallo

    Zuerst einmal danke für die schnelle Antwort.

    Ich habe mir nun diese Bibliothek heruntergeladen: sourceforge.net/projects/id3lib/?source=recommended, allerdings steh ich jetzt wieder etwas an.
    Ich habe dann das ganze ausgepackt und dann die Dateien die unter "id3lib\Mp3Lib\bin\release" in mein VB-Projektverzeichnis kopiert und dann das ganze importiert.
    Wenn ich nun eine Variable erstelle erscheinen auch immer die optionen .artist, .album, etc. eigentlich alles bestens, nur kann ich der Variable irgendwie meine mp3 - Datei nicht zuordnen...
    Kannst du mir da weiterhelfen?
    (Ich habe noch nie eine Bibliothek importiert oder ähnliches, vielleicht habe ich auch da etwas falsch gemacht, deshalb habe ich oben versucht alles genau zu beschreiben, wie ich es gemacht habe.)

    Ablador
    Das wäre einmal der relevante Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports Mp3Lib
    3. Public Class FormUmbenennen
    4. Dim dateineu As Mp3Lib.Mp3File
    5. Private Sub FormUmbenennen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. dateineu = "C:\Users\Ablador\Desktop\Neuer Ordner\" & FormHintergrund.Name 'Pfad zur Datei
    7. End Sub
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. dateineu.TagHandler.Artist = "hallo" 'nur als Test
    10. End Sub
    11. End Class


    Folgende Fehlermeldung erscheint jeweils über der Zeile 11, wenn ich es laufen lasse:

    NullReferenceException wurde nicht behandelt.
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ablador“ () aus folgendem Grund: Fehlermeldung ergänzt.

    Ja klar,
    DateiNeu ist Kein String und muss mittels New instanziert werden.

    Folgendes sollte klappen:

    VB.NET-Quellcode

    1. Dim Datei As New Mp3File("Dateipfad")
    2. '@Button_Click
    3. Datei.TagHandler.Artist = "xyz"
    4. [..]

    Liebe Grüße
    /nicht getestet
    ?( ?( ?(
    funktioniert auch nicht ganz. Wenn ich schreibe:

    VB.NET-Quellcode

    1. Dim dateineu As New Mp3File("C:\Users\Ablador\Desktop\Neuer Ordner\" & FormHintergrund.Name)

    Dann wird die Variable (dateineu) blau unterschrichen und als Fehlermeldung kommt folgendes:

    Quellcode

    1. Fehler bei der Überladungsauflösung, da keine zugreifbare "New" ohne einschränkende Konvertierung aufgerufen werden kann:
    2. "Public Sub New(fileinfo As System.IO.FileInfo)": Der mit dem Argument übereinstimmende Parameter "fileinfo" wird von "Object" auf "System.IO.FileInfo" reduziert.
    3. "Public Sub New(file As String)": Der mit dem Argument übereinstimmende Parameter "file" wird von "Object" auf "String" reduziert. C:\Users\Linus\documents\visual studio 2010\Projects\MP3_Tagger\MP3_Tagger\Form1.vb
    Hä?
    Das ist doch ein String?

    Probier mal:

    VB.NET-Quellcode

    1. Dim dateineu As New Mp3File(New IO.FileInfo("C:\Users\Ablador\Desktop\Neuer Ordner\" & FormHintergrund.Name))


    Ist FormHintegrund.Name ein String?
    Liebe Grüße
    /nicht getestet
    Oh... ok, da hat dieser Fehler gelegen, diese Variable war noch gar nichts und hat es dann nicht als string erkannt, aber irgendwie passiert jetzt einfach gar nichts. Es spuckt mir zwar kein Fehler aus, das ganze Verändert aber auch nichts an den Tags der mp3 Datei...
    Kann es sein, dass diese Bibliothek nur eine Art von mp3 kennt oder was ist es sonst?
    Also, irgendwie bringe ich das einfach nicht auf die Reihe.
    Ich habe mir jetzt die Lib von Myrax heruntergeladen und hinzugefügt und die alte zuerst entfernt, allerdings passiert einfach nichts.
    Ich weiss auch nicht genau, was ich falsch mache... es erscheint zwar keine Fehlermeldung, aber wie vorhin, passiert nichts. Der Code sieht übrigens so ziemlich genau gleich aus...
    Falls ihr noch eine Idee habt, wie es noch funktionieren könnte, könnt ihr sie mir gerne senden, ansonsten muss ich dieses Projekt im mom. denke ich aufgeben und es mir für später einmal aufheben ;)
    Danke trotzdem!
    ablador
    Hallo ablador.

    download.banshee.fm/taglib-sharp/

    Der Code bezieht sich auf Version 2.0.4.0 von taglib-sharp.dll
    Die neueren Versionen hab ich noch nicht benutzt.


    Die funktioniert. Verweis auf Dll hinzufügen (lokale Kopie = true)


    VB.NET-Quellcode

    1. Private Sub get_Tags(ByVal Dateipfad As String)
    2. Dim mfile As TagLib.File = Nothing
    3. Dim strGenre As String = String.Empty
    4. Dim strInterpret As String = String.Empty
    5. Dim strAlbum As String = String.Empty
    6. Dim strTitel As String = String.Empty
    7. Dim strJahr As String = String.Empty
    8. Dim strkbps As String = String.Empty
    9. Dim strKommentar As String = String.Empty
    10. mfile = TagLib.File.Create(Dateipfad) ' hier den kompletten Dateipfad eingeben - also inklusive Dateiname und Dateiendung
    11. strGenre = mfile.Tag.FirstGenre
    12. strInterpret = mfile.Tag.FirstPerformer
    13. strAlbum = mfile.Tag.Album
    14. strTitel = mfile.Tag.Title
    15. strJahr = mfile.Tag.Year.ToString
    16. strkbps = mfile.Properties.AudioBitrate.ToString
    17. strKommentar = mfile.Tag.Comment
    18. 'Cover-Bild auslesen und in PictureBox reinhaun
    19. If mfile.Tag.Pictures.Length >= 1 Then
    20. Dim bin As Byte() = DirectCast(mfile.Tag.Pictures(0).Data.Data, Byte())
    21. CoverPictureBox.Image = Image.FromStream(New MemoryStream(bin)).GetThumbnailImage(CoverPictureBox.Width, CoverPictureBox.Height, Nothing, System.IntPtr.Zero)
    22. Else : CoverPictureBox.Image = Nothing
    23. End If
    24. mfile = Nothing
    25. End Sub
    Also ich weiss wirklich nicht, was ich immer falsch mache. Wahrscheinlich ist es nur etwas ganz, ganz kleines, doch das reicht ja bekanntlich, damit das ganze nicht funktioniert.

    Ich habe mir jetzt diese Datei gedownloadet:
    download.banshee.fm/taglib-sha…sharp-2.0.4.0-windows.zip
    und nur diese, ich hoffe das ist richtig.
    Dann die Datei ausgepackt, aber im Downloadverzeichnis gelassen.
    Dann habe ich in VB ein neues Projekt aufgemacht mit nur einer Form und einem Button.
    Ich habe dann einfach auf "Projekt" und dann "Verweis hinzufügen" geklickt und dann die Datei "taglib-sharp.dll" ausgewählt und hinzugefügt.
    Das hier ist mein gesammter Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports TagLib
    2. Public Class Form1
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim mfile As TagLib.File = Nothing
    5. Dim strGenre As String = String.Empty
    6. Dim strInterpret As String = String.Empty
    7. Dim strAlbum As String = String.Empty
    8. Dim strTitel As String = String.Empty
    9. Dim strJahr As String = String.Empty
    10. Dim strkbps As String = String.Empty
    11. Dim strKommentar As String = String.Empty
    12. strAlbum = "hallo"
    13. mfile = TagLib.File.Create("C:\Users\Ablador\Desktop\Neuer Ordner\Zebrahead- Hit the Ground.mp3") ' hier den kompletten Dateipfad eingeben - also inklusive Dateiname und Dateiendung
    14. strGenre = mfile.Tag.FirstGenre
    15. strInterpret = mfile.Tag.FirstPerformer
    16. strAlbum = mfile.Tag.Album
    17. strTitel = mfile.Tag.Title
    18. strJahr = mfile.Tag.Year.ToString
    19. strkbps = mfile.Properties.AudioBitrate.ToString
    20. strKommentar = mfile.Tag.Comment
    21. End Sub
    22. End Class


    Das Ergebnis ist: Es passiert wiederum gar nichts, allerdings bekomme ich auch keinerlei Fehlermeldungen.

    Die Datei befindet sich in diesem Ortner, das habe ich natürlich schon überprüft.

    Wo der Fehler liegt, weiss ich nicht. Falls ihn jemand findet, kann er ihn mir gerne schreiben, ansonsten ist auch nicht so schlimm.
    Allerdings bin ich ab morgen eine Woche in den Ferien, kann dann also nicht mehr antworten.

    Ablador
    Bitte lerne unbedingt die Grundlagen!
    Du verwendest hier Variablen und setzt ihren Wert auf das entsprechende Tag. Mehr nicht. Der Code erzeugt keinerlei Ausgabe.
    Das könnte man z. B. so erreichen. Hier wird der Interpret in eine TextBox mit dem Namen ArtistTextBox geschrieben:

    VB.NET-Quellcode

    1. ArtistTextBox.Text = mfile.Tag.FirstPerformer