AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Mp3FileUtils
Thema durchsuchen
Ansicht
Themen-Optionen

Mp3FileUtils

Ein Thema von Gausi · begonnen am 15. Jun 2006 · letzter Beitrag vom 23. Jun 2013
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    
Benutzerbild von Gausi
Gausi
Registriert seit: 17. Jul 2005
MP3FileUtils, v0.6


Diese Unit liest aus einer MP3-Datei alle (?) gängigen Informationen aus. Wie bei vielen anderen auch wird der ID3v1-Tag gelesen, fast alle Teile des ID3v2-Tags und diverse Informationen über die Datei ansich, wie z.B. Bitrate und Spieldauer.

Download:
  • Mp3FileUtils - Quellcode inkl. der Demoprogramme. Zip-Archiv, ca. 555kb
  • Demos. - Komplilierte Demo-Programme zum Ausprobieren. Zip-Archiv, ca. 1.9mb
  • Zum Thema Unsynchronisation: "Das Gewitterrätsel - Reloaded" (das war mal eine Aufwärmfrage bei einem Gewinnspiel in der Entwickler-Ecke) (Version 1, Version 2) - Wo war das Gewitter? (Tip: beide Varianten mit dem VLC abspielen und am Scrollbalken spielen )

Änderungen in 0.6:
  • Methoden SetRating und SetPersonalPlayCounter zusammengefasst zu SetRatingAndCounter. Der Code in den eigenen Anwendungen muss da ggf. angepasst werden
  • Unterstützung von "Private Frames"
  • Erkennung des VBRI-Header
  • ein paar neue Genres in der Genre-Liste für ID3v1
  • neue Methoden Get/SetUserText, GetAllUsertextFrames
  • ID3v2Tag.ReadfromStream schneller: Tag wird zuerst komplett geladen, aus dem Memorystream dann die Einzelframes
  • Bugfix: Korrektes Lesen von UTF8-kodierten Textframes mit Delphi 2009
  • Bugfix: ExtendedHeader-Größe wurde falsch interpretiert
  • Bugfix: User-definierte Textframes (TXXX) haben eine andere Struktur als normale Textframes
  • Bugfix: Typ-Gemisch bei GetFrameLength behoben
Folgendes leisten die in dieser Unit implementierten Klassen:
  1. TID3v1Tag:
    • Lesen und Schreiben des ID3v1-Tags
    • Unterscheidung von v1- und v1.1-Tags
  2. TMpegInfo:
    • Lesen/Berechnen der MPEG-Informationen eines mp3-Files - z.B. Bitrate, Channelmode, Samplerate, vbr/cbr, Dauer
    • Schnelles Ermitteln der Daten: Auch bei vbr wird die Spieldauer (fast) immer korrekt ermittelt, ohne die ganze Datei lesen zu müssen
  3. TID3v2Tag:
    • Lesen und Schreiben des ID3v2-Tags
    • Unterstützung aller existierenden Versionen: v2.2, v2.3 und v2.4
    • Unterstützung der Standard-Frames wie Titel, Artist, Album
    • Unterstützung einiger weiterer Text-Frames wie orig. Artist, Composer, Mediatype, Encoder
    • Lesen und schreiben von Lyrics, Bildern, Bewertungen, URLs
    • Lesen und schreiben beliebiger Daten
    • Unterstützung von Unsynchronisation, GroupIDs und Datalength-Bytes
    • Unterstützung von Unicode
    • Unbekannte Frames (~ Informationsfelder) im Tag bleiben erhalten
Für Details verweise ich auf die beiliegende Dokumentation und die verschiedenen Demoprojekte.

Evtl. benötigte Zusatzkomponenten/Units:
Nur für Delphi 2007 oder früher. Verwendung kann in der Datei Config.inc geändert werden.Für Fehlermeldungen oder Codeoptimierungen bin ich jederzeit offen - hier im Thread, per PN oder per Mail.

Edit: Text an die neue Version angepasst.
The angels have the phone box.

Geändert von Gausi (30. Jun 2011 um 20:37 Uhr)
 
SearchBot

 
Delphi 12 Athens
 
#31
  Alt 8. Mai 2009, 17:53
Zitat von Satty67:
anpassen an Delphi5 (und wohl auch 3/4) geht, man muss halt etwas Handarbeit investieren.
Ja, hab ich gemacht; siehe DL oben, da sind die Units drin (v0.4) - ich musste einiges um diese beiden Dummys erweitern, aber dann hat es auf Anhieb geklappt!

@Gausi...
Ooouh - ich bin sooooo blöööd.
Ich habe zwar aus den Utils die Zeit für das Mp3 ermittelt und in einer Variablen abgelegt, aber in einer anderen Procedure nicht aus dieser Variable verwendet, sondern die Tracklength vom Mediaplayer - - und der hat es immer falsch erkannt (ist auch blöd, wenn ich meine Variable auch TrackLength nenne, wenn die vom Mediaplayer genauso heißt, ich Depp)!

Alle Aufregung umsonst - sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry sorry und nochmal sorry.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#32
  Alt 16. Aug 2009, 15:37
Der VBRI-Header ist zwar noch nicht drin, trotzdem der Hinweis auf eine neue Version.

Unter Delphi 2009 gab es Probleme mit dem ID3v1-Tag, der durch ein Char-AnsiChar-Dingens weder gelöscht noch überschrieben werden konnte. Beim Speichern wurde dadurch immer wieder ein neuer Tag (also 128 Bytes) an die Datei angehängt. Das hat die Datei zwar nicht beschädigt, was ihre Abspielbarkeit betrifft, ist aber dennoch äußerst unschön.
  Mit Zitat antworten Zitat
Z4ppy

 
Delphi 7 Enterprise
 
#33
  Alt 16. Jan 2011, 03:07
Ich habe folgendes festgestellt:
Die Dauer, die TMpegInfo zurückgibt, stimmt mit der Angabe im Explorer überein, nicht aber mit der in Winamp und iTunes.
Die Angaben sind zum Teil ziemlich weit auseinander: bei Iron Maiden - Remember Tomorrow zeigen mir beispielsweise TMpegInfo und Explorer 5:48 an, bei Winamp und iTunes ist der Song nur 5:28 lang
Weisst du, woran das liegen könnte? Sind die Dateien eventuell fehlerhaft?

MfG Z4ppy

€dit: Interessant ist übrigens: über die SendMessage API von Winamp bekommt man wieder den höheren Wert, intern zeigt Winamp aber den niedrigeren an

Geändert von Z4ppy (16. Jan 2011 um 04:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#34
  Alt 16. Jan 2011, 10:23
Es gibt immer wieder mal solche Fälle, wo meine Unit (oder auch mal andere Programme) falsche Werte liefern. Das kann unterschiedliche Ursachen haben: Eine wäre die falsche Erkennung von "variable Bitrate", z.B. durch defekte Xing-Header oder die VBRI-Header, die ich bisher nur in meiner lokalen Version erkennen kann.

Spontan würde ich hier auf einen sehr großen ID3v2-Tag tippen, aber da kann ich mich auch irren. Schick mir so eine Datei am besten mal per Mail, dann kann ich mir die mal genauer angucken.

Adresse ist mail<Ät>gausi<Punkt>de
  Mit Zitat antworten Zitat
DelTurbo

 
Delphi 2007 Architect
 
#35
  Alt 30. Jun 2011, 14:17
Hi,
leider habe ich ein Problem mit den Demos. Ich nutze Demo_ID3v2_Level2.exe um ein Bild anzuhängen. In der "orginal" Demo-Exe klappt es auch.

Bei dem Demo-Sourcecode der dabei ist, klappt es nicht. Es klappt nur wenn vorher schon ein Bild enthalten war. Möchte man ein mp3 um ein Bild erweitern, dann klappt es nur mit der "orginal" Demo_ID3v2_Level2.exe.

Wäre toll wenn mir einer helfen würde.

Danke im voraus

EDIT: Ich habe ein bissl getraced. GetPictureFrameIndex da kommt er mit -1 zurück weil kein Bild da ist. Er legt es dann aber nicht an. Sind die DemoSource andere als die exe-files??

Edit2:
Der fehler ist hier.
Delphi-Quellcode:
// ------------------------------------------
// set pictures
// ------------------------------------------
procedure TID3v2Tag.SetPicture(MimeTyp: AnsiString; PicType: Byte; Description: UnicodeString; stream: TStream);
var IDX: Integer;
    NewFrame: TID3v2Frame;
    idStr: AnsiString;
    oldMime: AnsiString;
    oldDescription: UnicodeString;
    oldType: Byte;
    oldStream: TMemoryStream;
begin
    idStr := GetFrameIDString(IDv2_PICTURE);
    IDX := GetPictureFrameIndex({PicType,} Description);
    if IDX <> -1 then
    begin
        if Stream = NIL then
          Frames.Delete(IDX)
        else
        begin
            if (Description = '*') or (MimeTyp = '*') or (Stream.size = 0) then
            begin
                oldStream := TMemoryStream.Create;
                (Frames[IDX] as TID3v2Frame).GetPicture(oldMime, oldType, oldDescription, oldStream);
                if (Description = '*') then
                  Description := oldDescription;
                if (MimeTyp = '*') then
                  MimeTyp := oldMime;
                if Stream.Size = 0 then
                  oldStream.SaveToStream(Stream);
                oldStream.Free;
            end;
            (Frames[IDX] as TID3v2Frame).SetPicture(MimeTyp, PicType, Description, Stream)
        end;

    end else
    begin
        if (Stream <> NIL) and (Stream.Size > 0)then
        begin
            NewFrame := TID3v2Frame.Create(idStr, TID3v2FrameVersions(FVersion.Major));
            NewFrame.AlwaysWriteUnicode := fAlwaysWriteUnicode;
            newFrame.CharCode := fCharCode;
            NewFrame.AutoCorrectCodepage := fAutoCorrectCodepage;
            Frames.Add(newFrame);
            if (Description = '*') then
                Description := '';
            if (MimeTyp = '*') then
                  MimeTyp := 'image/jpeg';
            newFrame.SetPicture(MimeTyp, PicType, Description, stream)
        end;
    end;
end;
Er merkt das kein Bild da ist, legt es an (NewFrame) und "schmeisst" es weg. Trotzdem frage ich mich warum es bei den demo-exe-files geht. Dürfte ja nicht...

Geändert von DelTurbo (30. Jun 2011 um 15:47 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

 
Delphi 2007 Architect
 
#36
  Alt 30. Jun 2011, 17:30
Sorry, ich steh nun TOTAL aufm schlauch. Sobald er TID3v2Tag.SetPicture macht, speichert er garkeine infos. Kommentier ich diese eine zeile aus, nimmt er wenigtens die anderen einträge.

Nun bin ich total verwirrt...

UPS... Sorry für den "spam". Ich wollte eigentlich editieren..
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#37
  Alt 30. Jun 2011, 20:27
Kann sein, dass da in der 0.5er Version ein Bug drin ist. Ich hab es grade mit der aktuellen Version 0.6 ausprobiert, und da funktioniert das. Auch wenn bisher kein Bild in dem mp3 drin ist. Ich änder die Links im ersten Posting mal, das hatte ich hier vergessen.

Um ein Bild erweitert wird da aber nichts. In der "Level2-Demo" wird "irgendein" Bild geschrieben, d.h. ein vorhandenen wird überschrieben.
  Mit Zitat antworten Zitat
DelTurbo

 
Delphi 2007 Architect
 
#38
  Alt 1. Jul 2011, 10:02
Hi,
erstmal vielen dank für deine antwort. Aber ich habe es mit der 06er probiert. Die habe ich von deiner Homepage geladen.

Das mit dem NewFrame (oben der Codesnipsel) verstehe ich leider garnicht. Muss das nicht auch wieder freigeben werden? Dort läuft er ja durch wenn kein Bild vorhanden ist.

Auch verstehe ist nicht warum deine demo exe 170kb grösser ist, als die exe die ich mit deiner demo erstelle. Zumal es wirklich mit DEINER exe funktioniert. Das heisst wenn kein Bild enthalten war, wird das bild reingemacht und auch danach z.b. im Mediaplayer angezeigt.

Erstelle ich die, geht es wirklich nur wenn schon ein bild vorhanden war. Ich hänge dir die exe mal hier dran.

Vielen dank für deine hilfe!!!
Angehängte Dateien
Dateityp: zip Demo_ID3v2_Level2_exe.zip (292,6 KB, 12x aufgerufen)

Geändert von DelTurbo ( 1. Jul 2011 um 10:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

 
Delphi 11 Alexandria
 
#39
  Alt 1. Jul 2011, 10:16
Der NewFrame wird später automatisch freigegeben, wenn das TID3v2Tag-Objekt selbst freigegeben wird. Das ist halt ein neuer Block von Information, der im Tag enthalten ist und von diesem auch verwaltet wird.

Wenn es mit meiner Exe klappt, aber mit deinem Compilat der Original-Demo nicht, dann habe ich einen schlimmen Verdacht, falls du wirklich Delphi 7 verwendest, wie im Profil angegeben. Da muss ich wohl am WE mein D7 Personal nochmal installieren und ausprobieren. Könnte sein, dass da noch ein String-AnsiString-Problem besteht . Die Demo habe ich nämlich mit D2009 compiliert.
  Mit Zitat antworten Zitat
DelTurbo

 
Delphi 2007 Architect
 
#40
  Alt 1. Jul 2011, 10:27
Jap, ich habe es grade probiert. Unter 2009 geht es wirklich. Unter D7 nicht. Unter 2009 ist auch die .exe so gross wie deine. Unter 2009 tritt beim laden eines mp3 OHNE bild folgender fehler auf. Aber nehme ich dann ein Bild rein und speichere es ab, dann ist es wirklich da.

"Im Projekt Demo_ID3v2_Level2.exe ist eine Exception der Klasse EJPEG mit der Meldung 'JPEG-Fehler #42' aufgetreten."

Wär echt super wenn man das fixen könnte damit man/ich es auf D7 nutzen könnte. Vielleicht kannst du mir ja sagen wo ich ungefähr suchen muss. Sollte ich das finden, werde ich dir das natürlich zukommen lassen.

Nochmals danke für die Hilfe!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz