Spieldauer einer MP3 auslesen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Keef.

    Spieldauer einer MP3 auslesen

    Heyho ihr Lieben!

    Ich würde gerne (wie auch im Titel beschrieben) die Spieldauer einer MP3 auslesen. Klingt eigentlich relativ simpel. Ist es auch! Der Code (vbarchiv.net/tipps/tipp_557-la…lfe-der-api-auslesen.html) und viele andere, mal mehr, mal weniger variiert funktionieren auch wunderbar bei ca. 90 von 100 Fällen. Die restlichen 10% unterteilen sich in leere und/oder falsche Rückgabewerte (Diese können aber schlecht aussortoert werden, das sie nicht realitätsfern sind).
    Getestet wurde dann ganze mit einer knapp 3000 Liedern starken, gut gepflegten Mediathek.
    Das ganze soll ohne DLLs etc. gelöst werden.

    Was würdet ihr mir empfehlen? Ich überlege die Spieldauer anhand von Dateigröße und Bitrate zu ermitteln, bin mir aber nicht sicher, wie ich das einigermaßen resourcenschonend anstellen soll.

    Vielen Dank für jede Hilfe! :D


    Visual Studio Express 2015 for Windows Desktop (.NET 4)
    Windows 10 Home

    Grüße
    system32
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    oh. ok. sorry. Vorhin in der Eile des Gefechts überlesen.


    Mal einen anderen Ansatz am Rande:
    Jede Datei hat Properties, die man auslesen kann. Und wenn es mich nicht täuscht haben MP3-Dateien ebenfalls ein Property in dem die Länge genannt ist. Lässt sich das so nicht ermitteln?
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Hallo System32,
    ich kann zu dem Thema leider noch nichts beitragen, habe aber schon lange geplant, mal selbst ein VB.net-Programm zu schreiben, das Tags von MP3's vereinheitlicht und evtl. automatisch festlegt. Ich habe noch einiges an manuellem Pflegeaufwand bei meiner MP3-Sammlung vor mir und wollte mir damit behelfen. Ich nutze den TagScanner, das ist ein geniales tool, aber ich möchte eher bestimmte Fälle in den MP3's entdecken oder z.B. die Genres vereinheitlichen, da ist jedes manuelle Tool zu aufwändig (außerdem interessiert mich die API).
    Wäre es möglich, Dein o.g. Projekt als Anschauungsobjekt und Kopiervorlage zu bekommen, wie man die MP3-API nutzt, damit ich nicht bei 0 anfangen muss?
    Danke & Gruß
    Micha

    Acr0most schrieb:

    haben MP3-Dateien
    Ja schon, nur musst du einen Typen bereit gestellt bekommen, welcher dir die entsprechenden Daten liefert.

    @TE: ansonsten, versuch es mal mit CsCore von @thefiloe

    Edit: stackoverflow.com/a/35300960/6635287



    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @us4711
    Vielen Dank! Die UltraID3Lib sieht echt nicht schlecht aus, aber ich würde das gerne ohne DLL's lösen und am besten auch selbst schreiben oder zumindestens verstehen.
    Eigentlich dürfte das ja nicht alzu kompliziert sein. Ich meine MP3 ist ja ein sehr populäres Format.

    @DahProgrammah
    Das Projekt ist für deine Zwecke, denke ich, ein bisschen zu unnötog groß. Habe auch noch nicht ganz verstanden, was du machen möchtest. Du kannst mir gerne nochmal privat Genaueres schreiben, dann gucke ich gerne, ob ich dir helfen kann :)

    @Radinator
    Ja, die habe ich auch schon gefunden. Vielleicht sollte ich diesen thefiloe mal aufsuchen. Der scheint ja was zu wissen.
    @System32
    Danke für's Angebot. Ich habe auch mal in die UltraID3Lib reingeschaut und ein paar Aufrufe angeschaut, damit sollte ich meine Anforderungen wohl machen können.
    Ich möchte grob gesagt bestimmte Dinge, die ich aktuell manuell und immer wieder für jede gerippte CD immer gleich mache, durch ein Programm machen lassen. Bei Hörbüchern z.B. ist das Schema der Benennung der Titel und Dateien bei mir fast immer gleich, die verschiedenen Schritte kann durchaus ein Programm alleine machen.
    Ich hatte mich immer gefragt, wie der Windows Explorer das macht, man markiert eine Datei und sofort werden unten alle verfügbaren Tags angezeigt... irgendwann bin ich dann auf das hier gestossen...
    ' Es wird ein Verweis auf die shell32.dll Datei benötigt. (Zu finden unter Verweis hinzufügen - COM - Microsoft Shell Controls and Automation)
    ' Imports System.IO gehört auch dazu
    ' ...

    Quellcode

    1. [vbnet]
    2. Dim ofd As New OpenFileDialog
    3. If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. Dim Shell As New Shell32.Shell
    5. Dim Folder As Shell32.Folder = Shell.NameSpace(Path.GetDirectoryName(ofd.FileName))
    6. Dim FolderItem As Shell32.FolderItem = Folder.ParseName(Path.GetFileName(ofd.FileName))
    7. For i = 0 To 300
    8. Application.DoEvents()
    9. If Folder.GetDetailsOf(FolderItem, i) <> "" Then
    10. label.Text &= i & " -- " & Folder.GetDetailsOf(FolderItem, i) & vbNewLine
    11. End If
    12. Next
    13. End If
    14. [/vbnet]



    Am Ende kommt dann zB: sowas dabei raus:

    '0 -- 01 4 Non Blondes - Train.mp3
    '1 -- 7,04 MB <-- Dateigröße
    '2 -- MP3-Audioformat
    '3 -- 24.02.2008 12:06
    '4 -- 12.05.2014 20:21
    '5 -- 12.05.2014 20:21
    '6 -- A
    '9 -- Audio
    '10 -- ErnieError-PC\Ernie Error
    '11 -- Musik
    '13 -- 4 Non Blondes
    '14 -- 1992 Bigger, Better, Faster, More!
    '15 -- 1992
    '16 -- Rock
    '19 -- Nicht bewertet
    '20 -- 4 Non Blondes
    '21 -- Train
    '26 -- 1
    '27 -- 00:03:41 <-- Songlänge
    '28 -- ‎266 kBit/s <-- Bitrate
    '29 -- Nein
    '53 -- ERNIEERROR-PC (dieser Computer)
    '155 -- 01 4 Non Blondes - Train.mp3
    '173 -- Nein
    '176 -- 1992 Bigger,Better,Faster,More!
    '177 -- D:\MP3\4 Non blondes\1992 Bigger,Better,Faster,More!
    '178 -- 1992 Bigger,Better,Faster,More! (D:\MP3\4 Non blondes)
    '180 -- D:\MP3\4 Non blondes\1992 Bigger,Better,Faster,More!\01 4 Non Blondes - Train.mp3
    '182 -- MP3-Audioformat
    '188 -- Nicht aufgelöst
    '268 -- Heimnetzgruppe
    '269 -- Freigegeben

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

    @Keef
    Ich bin doch nicht so schlau wie ich dachte und du bist ein Schatz!
    Werde das mal testen... Vielen Dank schonmal! :D

    Edit: Und man soll das hier übrigens immer als Code einfügen, sonst werden die Admins ganz unangenehm ;)

    Edit 2: Hat geklappt! Vielen, vielen Dank! Ist vor allen Dingen schön schnell. - Smaller, Better Faster, More!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „System32“ ()

    'Schön, daß ich Dir helfen konnte. Ich ja ziemlich neu hier, wie das hier mit dem Code posten funktioniert
    hab' ich noch nicht auf die Kette bekommen...

    Bevor ich's vergesse: das mit dem OpenFileDialog kann man sich auch schenken.Wenn Du z.B.: eine komplette
    CD in eine Datenbank einliest geht das natürlich auch vollautomatisch per For Each Schleife.

    ...und noch etwas: Das ganze Funktioniert auch mit MP4 Videos.

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