Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Cover in WMP Format (https://www.delphipraxis.net/195847-cover-wmp-format.html)

EWeiss 31. Mär 2018 15:36

Cover in WMP Format
 
Gibt es eine API oder eine Anwendung die Covers im Format von WMP zu MP3-Tags hinzufügen kann?
Ich möchte den gleichen Tag für Covers addieren so wie ihn der Windows Mediaplayer addiert diesen aber selbst nicht verwenden.

gruss

Maekkelrajter 12. Apr 2018 10:58

AW: Cover in WMP Format
 
Was verstehst du unter 'Format von WMP'? Meinst du damit das Format der in WMA - Audiodateien eingebetteten Cover?
Das geht ganz einfach mit dem hervorragenden Programm 'MP3Tag' von Florian Heidenreich: https://www.mp3tag.de
Damit kann man die Album-Cover aus WMA-Dateien extrahieren und als Tags in MP3 - Dateien einfügen. Darüber hinaus kann MP3Tag Bilder in allen gängigen Formaten als Cover einbinden, also auch die vom WMP hinterlassenen 'Folder.jpg' - Dateien.
Für Delphi gibt es die Mp3FileUtils von 'Gausi', mit denen man u.a. Bilddateien als ID3v2 - Tag in MP3-Files integrieren kann http://www.gausi.de/mp3fileutils.html

Gruß Maekkelrajter

EWeiss 12. Apr 2018 13:46

AW: Cover in WMP Format
 
Zitat:

Meinst du damit das Format der in WMA - Audiodateien eingebetteten Cover?
Ich habe von Mp3 geredet nicht von WMA.

Zitat:

Das geht ganz einfach mit dem hervorragenden Programm 'MP3Tag' von Florian Heidenreich:
Hervorragend.. hmm na ja habe ihn angesprochen aber er war nicht in der Lage zu helfen.

Zitat:

Für Delphi gibt es die Mp3FileUtils von 'Gausi'
Das ist gut tut aber auch nicht das was ich möchte.

Zitat:

Was verstehst du unter 'Format von WMP'? Meinst du damit das Format der in WMA - Audiodateien eingebetteten Cover?
Der WMP speichert sein Cover in einer beliebigen mp3 in einem bestimmten Format und einer speziellen Kennung.

"APIC Image/jpg" wenn ich mich nicht irre.

Dann ist die Frage.
Wird das Cover bzw. der Tag am ende oder Anfang einer Datei gespeichert.
Was ich mit Format meine! Wie werden die Frames gespeichert

Der sinn der Sache ist wenn der Tag nicht identisch ist mit dem vom WMP dann werden im WindowsMediaPlayer_10 Plugin die Covers nicht angezeigt.
Siehe Pic Albumart holt sich die Cover von der Platte "Folder.jpg"
WindowsMediaPlayer_10 aus dem Tag in der mp3 selbst.
Dann kommt noch dazu, das Cover muss 200x200 groß sein.

gruss

Maekkelrajter 12. Apr 2018 18:30

AW: Cover in WMP Format
 
Zitat:

Der WMP speichert sein Cover in einer beliebigen mp3 in einem bestimmten Format und einer speziellen Kennung.

"APIC Image/jpg" wenn ich mich nicht irre.

Dann ist die Frage.
Wird das Cover bzw. der Tag am ende oder Anfang einer Datei gespeichert.
'APIC' ist nach ID3v2.3 der Bezeichner für den Frame, der die Coverbilder enthält.
'Image/Jpeg' ist der sog Mime-Typ, der im Header des Frames hinterlegt ist.

Ausführlichere Informationen findest Du hier: http://id3.org/id3v2.3.0
Und in dieser PDF-Datei:https://de.osdn.net/frs/g_redir.php?....14_letter.pdf
(Seite 62)

Hast Du die MP3FileUtils tatsächlich ausprobiert?

Delphi-Quellcode:

uses mp3FileUtils;

const picfile = 'MeinCoverbild_200x200.jpg';
const mp3file = 'MeinMp3.mp3';


Procedure SetCoverpic;
  var
      MP3Tags: TId3v2Tag;
      PicData: TMemorystream;

begin
  MP3Tags:= TId3v2Tag.Create;
  PicData:= TMemoryStream.Create;
  try
    If (MP3Tags.ReadFromFile(mp3File) = MP3ERR_None) Then
    begin
      Picdata.LoadFromFile(Picfile);
      MP3Tags.SetPicture('image/jpeg', 0, '*', PicData);
      MP3Tags.WriteToFile(mp3file);
    end;
  finally
    FreeAndNIL(MP3Tags);
    FreeAndNIl(PicData);
  end;
end;

//Deklaration von Setpicture:
procedure SetPicture(MimeTyp: AnsiString; PicType: Byte; Description: UnicodeString; stream: TStream);
{
MimeTyp nach Filetyp: 'Image/jpeg' oder 'Image/png'

Pictype: Kennziffer für Cover-Arten:

$00     Other
$01     32x32 pixels 'file icon' (PNG only)
$02     Other file icon
$03     Cover (front)
$04     Cover (back)
[...] usw. bis $14

Description: Dasselbe als Text; '*' entspricht 'other'.

stream: Die eigentlichen Bilddaten;
}
Mein WMP (V12) zeigt das mit dieser Routine im MP3-File eingebettete Cover jedenfalls korrekt an.

Gruß LP

EWeiss 12. Apr 2018 18:50

AW: Cover in WMP Format
 
Zitat:

Hast Du die MP3FileUtils tatsächlich ausprobiert?
Warum bezweifelst du das? ;)

Ich verwende diese in meinem Mediaplayer den du im Anhange gesehen hast.

NUR!
Ich verwende sie nicht um Cover in meinen Dateien abzulegen.
Mein Player ist ein Abspielgerät kein Mp3Tag Editor.

Ich fragte nach einer API bzw. Mp3Editor der dieses Format beherrscht.

mp3tag von Florian Heidenreich kann es nicht.
Alle Covers die ich damit einbinde funktionieren nicht.

Nebenbei es geht nicht darum ob WMP12 die anzeigen kann sondern darum ob WindowsMediaplayer_10 das Plugin Bliss diese ebenfalls widergibt. :)
WMP11 tut das bei mir auch das bedeutet aber nicht das dass besagt Plugin diese dann auch anzeigen kann.
Da es den Tag vom WMP ausliest.

gruss

EWeiss 12. Apr 2018 19:03

AW: Cover in WMP Format
 
Hier mit mp3tag von Florian Heidenreich Covers addiert.
WMP zeigt sie an da der Tag aber nicht kompatibel ist mit dem vom WMP selbst wird das Cover im Plugin nicht angezeigt.

gruss

KodeZwerg 12. Apr 2018 20:11

AW: Cover in WMP Format
 
Ein WMP eigenes ID3-Tag Format kenne ich noch nicht, bei mir klappts mit der MP3FileUtils tadellos.
Ich habe es mit verschiedenen MP3 Dateien durchgespielt, WMP (als App nicht Plugin) zeigt immer brav alles an.
Wenn es bei Dir damit nicht funktioniert, könnte es Dir dennoch weiterhelfen, schnapp Dir ein für deine Plugins/WMP Versionen kompatibles MP3 was ein Bild besitzt und lese mit der MP3FileUtils alles aus damit Du weißt wie die ID3 definitionen für Dich lauten müssen. Wäre das ein Ansatz?
Über eine 200x200 Beschränkung konnte ich auch noch keine brauchbaren Informationen finden, meine Tests waren in verschiedenen Auflösungen ohne Fehler.
Ein Api Aufruf der ID3 Tags liest/schreibt kenne ich auch noch nicht.
[edit]
Achja, was ich fragen wollte, weil meinerseits da ein großes Interesse besteht, Du hast eine FPS Anzeige oben rechts, funktioniert die auf GDI Basis, also könnte jeder so ein Feature haben?
Ich hatte mir da auch ein paar Gedanken gemacht aber komme nicht weiter wenn ich nicht's zeichnen lasse.
[/edit]

EWeiss 12. Apr 2018 20:35

AW: Cover in WMP Format
 
Zitat:

Über eine 200x200 Beschränkung konnte ich auch noch keine brauchbaren Informationen finden
http://www.winhelponline.com/blog/wm...humbnails-fix/
AlbumArt_{E6043A2C-BBEB-49C5-BCF0-5259B6332C34}_Large.jpg
AlbumArt_{E6043A2C-BBEB-49C5-BCF0-5259B6332C34}_Small.jpg

The large one is 200×200 the small one is 75×75


Zitat:

Ein WMP eigenes ID3-Tag Format kenne ich noch nicht
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Zitat:

Ich habe es mit verschiedenen MP3 Dateien durchgespielt, WMP (als App nicht Plugin) zeigt immer brav alles an.
Bitte lese doch mal was ich geschrieben habe und mit Bildern dokumentiert.

Zitat:

Nebenbei es geht nicht darum ob WMP12 die anzeigen kann sondern darum ob WindowsMediaplayer_10 das Plugin Bliss diese ebenfalls widergibt.
Und das geht nur mit dem eigenen Tag von WMP! Wenn dieser den Tag speichert.
https://www.delphipraxis.net/attachm...at-nothing.png

Das Cover wurde mit mp3Tag addiert und so wie du sehen kannst tut sich nichts! (siehe vorheriges Bild im Anhang)
https://www.delphipraxis.net/attachm...rmat-cover.png

gruss

KodeZwerg 12. Apr 2018 21:04

AW: Cover in WMP Format
 
Kannst Du ein MP3 teilen was bei Deinem Projekt funktioniert? (Also ein minimales Audiofile mit Bild.)
Ich gebe zu das in deinem MS Link mehr Tags angegeben sind als übliche ID3's besitzen, um Gegenzuprüfen ob ein noch für die MP3FileUtils undefiniertes Tag den Unterschied macht bräuchte ich ein Sample.
Existiert ein Download der Abspiel-Software, dann könnt ich schneller Testen mit dem MP3-Sample.

EWeiss 12. Apr 2018 21:10

AW: Cover in WMP Format
 
Zitat:

ob ein noch für die MP3FileUtils undefiniertes Tag den Unterschied macht bräuchte ich ein Sample.
Sorry kann kein Urheberrechtliches Material hier hochladen.
Dann bekomme ich etwas auf den Deckel zumal meine MP3 Dateien größer sind als der Upload hier das erlaubt.

Du kannst das sample aber ganz einfach selbst erstellen.
Nimm ein MP3 File oder ein Album und lasse den Tag mit WMP erstellen.
Dann kannst du testen ob es im Mediaplayer Plugin "Bliss" angezeigt wird.

Das sollte normaler weise immer der Fall sein.

Dann nimm ein File wo du den Tag mit anderer Software erstellt hast inklusive Cover
Und teste das dann mit dem WMP und dem Plugin Bliss.
Deaktiviere aber vorher in den Optionen die Verbindung zum Internet damit der Tag vom WMP nicht wieder ersetzt wird.

gruss

EWeiss 12. Apr 2018 21:37

AW: Cover in WMP Format
 
Das ist der Unterschied!

Vergleiche beide Pics.. ;)

gruss

KodeZwerg 12. Apr 2018 21:39

AW: Cover in WMP Format
 
Das mit 200x200 bezieht sich auf die Folder.jpg Datei (Thumbnail für Explorer), falls genutzt, nicht für's integrierte Bild im ID3 an sich.
Du machst es einem auch nicht gerade einfach, kein Audio-Sample, keine Wiedergabe-Software, ich tret hier auf der Stelle.
Falls es Dir doch gelingen sollte ein 0:01 Minuten langes Audiofile "herzustellen" und mit einem Bild (von mir aus im unwürdigen 200x200 format) zu versehen, was kompatibel zu Deinem Projekt ist, lass was von Dir hören.

Beim absenden kam was rotes, sorry falls ich darauf hier nicht reagier.

EWeiss 12. Apr 2018 21:43

AW: Cover in WMP Format
 
Zitat:

Du machst es einem auch nicht gerade einfach, kein Audio-Sample, keine Wiedergabe-Software, ich tret hier auf der Stelle.
Wiedergabe Software ist WMP.
Audiosample kannst du in 2 Minuten mit dem WMP selbst erstellen.

Aber wie schon gesagt vergleiche beide Bilder im vorherigen Beitrag dann kannst du den Unterschied schon erkennen.

gruss

KodeZwerg 12. Apr 2018 21:57

AW: Cover in WMP Format
 
So langsam setzt ein Aha-Effekt ein, diese PRIV ID's.....
Ok, ich setz an dieser Stelle an um diese PRIV's auszuwerten/aufzudecken, also das was ich vorhin meinte, undefinierte Tags ermitteln und herausfinden was WMP damit anstellt um Dich glücklich zu bekommen.
Mein WMP hat generell keine Internet-Verbindung, Danke für die Warnung.

EWeiss 12. Apr 2018 22:29

AW: Cover in WMP Format
 
@Maekkelrajter

Habe aus deinem Schnipsel mal schnell eine Anwendung geschrieben..
Aber..

Nemp genauso wie dein Schnipsel zerstören den Tag wenn ich ein Cover addieren.
Mal so neben bei ;)
Es wundert mich also wie das bei dir funktionieren kann.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mp3FileUtils, StdCtrls;

const picfile = 'Folder.jpg';
const mp3file = '10. Chris De Burgh - The Traveller.mp3';

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure SetCoverpic;
var
  MP3Tags: TId3v2Tag;
  PicData: TMemorystream;

begin
   MP3Tags:= TId3v2Tag.Create;
   PicData:= TMemoryStream.Create;
   try
     If (MP3Tags.ReadFromFile(mp3File) = MP3ERR_None) Then
     begin
       Picdata.LoadFromFile(Picfile);
       MP3Tags.SetPicture('image/jpeg', 0, '*', PicData);
       MP3Tags.WriteToFile(mp3file);
     end;
   finally
     FreeAndNIL(MP3Tags);
     FreeAndNIl(PicData);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  SetCoverpic;
end;

end.
@Kodezwerg.
http://id3.org/id3v2.3.0
siehe private Frames..

Hier gibt es ein Programm mit dem man die Privaten Frames entfernen kann.
http://invertedsky.net/?s=desiccate

Aber nach dem entfernen werden die Covers nicht mehr angezeigt.
Also es hat definitiv mit den Privaten Frames zu tun.
Nur wie kommt man daran und kann sie Addieren wenn nötig das Problem ist man weis nicht was dort abgelegt wurde.
So ein kleines Tool das die Daten vor einem Tag setzen könnte wäre nicht schlecht ;)

Aber ohne nähere Infos wird das wohl nicht gehen. :) :duck:

EDIT:
Also das konnte ich schon mal identifizieren..
Zitat:

PRIV WM/MediaClassSecondaryID
PRIV WM/MediaClassPrimaryID
PRIV WM/WMContentID
PRIV WM/WMCollectionID
PRIV WM/WMCollectionGroupID
PRIV WM/UniqueFileIdentifier ;
TALB Hit Giganten-Cabrio Hits Disc 1
TPE2 Various Artists
TCON Alternative Musik
TPE1 Aventura
gruss

Maekkelrajter 13. Apr 2018 12:04

AW: Cover in WMP Format
 
Zitat:

Zitat von EWeiss (Beitrag 1399027)
Es wundert mich also wie das bei dir funktionieren kann.

Mich nicht. Bei mir gibt es eben keine Dateien, die vom WMP resp. einem WMP-Plugin getaggt wurden.
Im Laufe der Zeit wurden schon mehrere tausend MP3s mit einem meiner Programme unter Verwendung der MP3FileUtils behandelt. Bisher waren alle Tags incl. Albumcover von anderen Programmen korrekt lesbar, darunter WMP, iTunes, MP3Tag, VLC-Mediaplayer u. a.

Gruß LP

KodeZwerg 13. Apr 2018 12:18

AW: Cover in WMP Format
 
Auf 3delite.hu hab ich eine nette und sehr umfangreiche Tag-Library gefunden, ich glaube ich nähere mich den PRIV definitionen auf Code-Ebene muss aber noch viel mehr Testen & Checken.
Der ist ja gut, auf der Webseite von dem desiccate gibt es unten auch dessen Source, damit sollte es doch klappen.

EWeiss 13. Apr 2018 13:41

AW: Cover in WMP Format
 
Zitat:

Auf 3delite.hu hab ich eine nette und sehr umfangreiche Tag-Library gefunden,
Wo du dich alles rumtreibst.

Ich kenne diese Library was meinst du wer den Header bzw.. das Example davon für VB6 geschrieben hat?
Geh mal auf Un4Seen und schau mal nach .. LOL.
Aber auch diese kann\macht nicht das was ich möchte.

Zitat:

Der ist ja gut, auf der Webseite von dem desiccate gibt es unten auch dessen Source, damit sollte es doch klappen.
Was klappen?
Nö. Ich habe es kompiliert und getestet es entfernt alle PRIV Frames, ich will sie aber addieren.

gruss

KodeZwerg 13. Apr 2018 14:09

AW: Cover in WMP Format
 
ot
Ja, ich surfe manchmal abseits, war auf der Suche nach besseren Tag-Units/Libraries die vielleicht das WMP gedönse drauf/drinnen haben.
Un4seen ist doch Ian/Bass.dll, ich weiß leider nicht wer dort was eingereicht hat um Bass.dll zu erweitern, aber ich vermute mal der Frage nach das auch Du daran beteiligt warst/bist? Da fällt mir BassVis ein, das kam glaube ich aus Deiner Feder.
/ot

Mit "klappen" meint ich, Source zerlegen wo auf die PRIV's verwiesen wird um dann anstelle das die entfernt werden, dessen Inhalt ausgelesen wird.
Ich glaub ich hab's bald geschafft, ich geh anders da ran, sehr primitiv, brute force style, zur zeit lese ich ein .mp3 rein und durchforste es nach XML signaturen um daraus die PRIV's zu bilden, alles noch sehr unstabil.

EWeiss 13. Apr 2018 14:18

AW: Cover in WMP Format
 
Zitat:

Da fällt mir BassVis ein, das kam glaube ich aus Deiner Feder.
yep..
genauso wie das hier ;)
Kannst gerne den Verlauf lesen.

Aber Warnung mein English ist unter aller Sa...

gruss

KodeZwerg 13. Apr 2018 15:25

AW: Cover in WMP Format
 
Ich habe etwas entdeckt was das bewerkstelligen könnte, nur habe ich absolut keine Ahnung wie man das nach Delphi bringt.
Der Source ist in C# und den Link gibt es hier.
Damit kann man easy PRIV's lesen und schreiben. Beispiel

Am Rande:
Auch habe ich hier gelesen das WMP und andere den ID3v2 standard nicht so ganz einhalten, also könnte es immer wieder zu Komplikationen kommen wenn Du Dich auf WMP versteifst.

EWeiss 13. Apr 2018 15:29

AW: Cover in WMP Format
 
Zitat:

also könnte es immer wieder zu Komplikationen kommen wenn Du Dich auf WMP versteifst.
Was glaubst du bzw.. wo von ich die ganze zeit rede?
Ich will den WMP nicht zum Taggen verwenden deshalb mache ich mir ja den ganzen aufwand hier.

gruss

KodeZwerg 13. Apr 2018 17:08

AW: Cover in WMP Format
 
Ich hatte es beim erstem mal bereits verstanden das der WMP zum taggen nicht in Frage kommt.
Das mit der Taglib-Sharp, konntest Du damit was anfangen?

EWeiss 13. Apr 2018 17:11

AW: Cover in WMP Format
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399147)
Ich hatte es beim erstem mal bereits verstanden das der WMP zum taggen nicht in Frage kommt.
Das mit der Taglib-Sharp, konntest Du damit was anfangen?

Habe es noch nicht getestet.

gruss

Gausi 13. Apr 2018 19:24

AW: Cover in WMP Format
 
Ich antworte mal hier, und nicht im Nemp-Thread.

Um es kurz zu machen: Dein Code ist in Ordnung, Mp3FileUtils ist in Ordnung, Nemp ist in Ordnung. Der Fehler liegt bei Windows. Ist für dich sicherlich eine unbefriedigende Antwort, aber davon bin ich jetzt überzeugt. Andere Tagger, die nicht auf meinem Code basieren, haben prinzipiell das gleiche Problem, auch wenn sie das ggf. umgehen.

Danke erstmal für die Datei, die du mir geschickt hast. Wie vermutet, ist der bereits vorhandene relevante Tag in der Datei in der Version 2.4, die unter Windows Probleme macht. Dass "ohne Cover" die Infos angezeigt werden, liegt am ebenfalls vorhandenen ID3-Tag in der Version 1.

Das Problem ist, dass "alte" Windows-Versionen (bis mindestens einschließlich Windows 7) den ID3-Tag in der Version 2.4 nicht erkennen und verarbeiten können. Unter Windows 10 läuft das mittlerweile. Das Problem ist dabei nicht das Cover, sondern die reine Größe des ID3-Tags, wenn ein Bild rein kommt. Oder, um es anders auszudrücken: Der Tag ist in Ordnung, aber durch den großen ID3-Tag erkennt Windows die Datei nicht mehr als mp3-Datei. dann wird auch kein ID3-Tag in der Version 1 gesucht, und dann sind die Titel-Infos "weg".


Ein wenig zur (vermutlichen) Problemursache - das wird ein klein wenig technisch, aber wir sind hier ja Entwickler ;-).

Eine mp3-Datei sieht (etwas vereinfacht) so aus:
Code:
 
    Optionaler ID3v2-Tag
    (variable Größe)
----------------------
    Optionales anderes Gedöns
    z.B. Xing-Header, Ape-Tags, Datenmüll
----------------------
   MPEG-Frames mit eigentlichen Audiodaten
   (Framegröße abhängig von Bitrate, Samplerate etc. pp.)
   (Frameanzahl abhängig von der Dauer des Stückes)
----------------------
   Optionaler ID3v1-Tag
   (128 Bytes, beginnend mit TAG)
Einen MP3-Datei-Header im eigentlichen Sinne gibt es nicht. Ein mp3-Decoder muss im Bytestrom nach MPEG-Frames suchen. Idealerweise steht der erste Frame direkt am Anfang der Datei, ansonsten direkt nach dem ID3v2-Tag, der sinnvollerweise von Decodern, die den Tag erkennen, bei der Suche nach MPEG-Frames übersprungen wird.

Einen MPEG-Frame erkennt man dabei an 11 gesetzten Bits und einem Plausibilitätscheck der folgenden 21 Bits (zusammen dann 4 Byte). Um nun zu erkennen, ob eine Datei eine MP3-Datei ist, ist es eine gängige Methode, in den ersten X-Bytes der Datei nach einem gültigen MPEG-Frame zu suchen. Oder halt in den ersten X Bytes nach dem ID3v2-Tag.

Wenn Windows eine mp3-Datei mit Version 2.3 am Anfang findet, dann wird dieser Bereich der Datei übersprungen, und nach dem ID3v2.3-Tag recht zügig der erste MPEG-Frame gefunden. Wenn du deinen Code auf einer Datei ausführst, die Version 2.3 enthält, läuft dein Tool. Als Hinweis: Nemp zeigt die Tag-Version an im Eigenschaften-Dialog zu einer Datei im Reiter "Mp3- und ID3-Details".

Wenn Windows eine mp3-Datei mit Version 2.4 findet, dann wird der Tag nicht übersprungen (weil er nicht als solcher erkannt wird). Dann scannt Windows auch in dem ID3-Tag nach MPEG-Frames. Wenn der ID3-Tag nun länger ist als die voreingestellte Suchlänge X, weil z.B. ein Bild im Tag eingebettet ist, dann schlägt die MP3-Erkennung fehl, Windows erkennt die Datei damit nicht als gültige mp3-Datei, und sucht folglich dann auch nicht mehr nach einem ID3v1-Tag am Ende der Datei. Deshalb sind die Infos dann für den Player "weg".

In der Entwickler-Ecke habe ich da mal etwas Schabernack im Rahmen des Advent-Gewinnspiels getrieben. Da hatte ich im ID3-Tag eine weitere Mp3-Datei versteckt, die abgespielt wurde, wenn man den ID3-Tag-Header ungültig gemacht hat (mit einem Hex-Editor). Andernfalls wurde das "reguläre" Lied abgespielt.

Unterstützt wird diese These auch dadurch, dass im Windows-Explorer nicht nur die Tag-Informationen fehlt, sondern auch die Dauer des Stücks. Die ist aber nicht im ID3-Tag gespeichert, sondern wird über die Bitrate und Dateigröße ermittelt.

Abhilfe 1: beim Schreiben des Covers darauf achten, dass man einen Version 2.3-Tag vorliegen hat. Ansonsten entweder nicht schreiben, oder den Tag konvertieren. Wenn man das "dreckig" macht, in dem man den vorhandenen wegschmeißt und einen neuen mit den gewollten Infos füllt, kann es unter Umständen passieren, dass Daten verloren gehen. Sauberer wäre, jeden ID3v2-Frame sauber zu konvertieren. Da aber einige Frames neue IDs bekommen haben, ist das nicht ganz trivial. So eine ConvertTo-Methode stand mal auf der ToDo-Liste, habe ich aber noch nicht umgesetzt - und plane es eigentlich auch nicht.

Abhilfe 2: Windows 10 anschaffen. Das kann den "neuen" Tag, der irgendwann um das Jahr 2000 rausgekommen ist.

Keine schöne Sache, aber das ist einfach ein Bug in Windows. Du kannst übrigens mal versuchen, deine Testdatei mit dem WMP (oder dem Windows Explorer) zu taggen. Wenn du die Datei dann in einem Hex-Editor öffnest, wirst du am Anfang der Datei zwei ID3-Tags finden. Etwas weiter hinten den "echten" mit Version 2.4 und davor den in Version 2.3, den Windows drangepappt hat. (Suche nach "ID3" in der Datei, damit fängt der Tag an.)

Edit: Private Frames sollten damit nichts zu tun haben. Diese werden von diversen Programmen genutzt, um weitere Infos schreiben zu können, für die es im ID3-Quasi-Standard keine Entsprechung gibt. Nemp nutzt auch ein oder zwei private Frames, ist aber damit deutlich sparsamer als der WMP. ;-)

EWeiss 13. Apr 2018 19:43

AW: Cover in WMP Format
 
Zitat:

Das Problem ist, dass "alte" Windows-Versionen (bis mindestens einschließlich Windows 7) den ID3-Tag in der Version 2.4 nicht erkennen und verarbeiten können
Das mag ja sein aber ich verwende keinen 2.4 Tag um Cover zu integrieren.
Siehe Shots..

Trotzdem wird der Tag vom System erkannt inklusive Cover.
Mein Problem sind die PRIV: Frames deshalb kann ich die Covers nicht anzeigen.

Wie gesagt die Frames werden vom WMP geschrieben und die Visualisierung Plug-Ins für den WMP greifen auf diese Frames zu.
Werden sie nicht gefunden wird das Cover auch nicht angezeigt.
Aber ich will den WMP nicht zum Taggen verwenden.

gruss

Gausi 13. Apr 2018 19:59

AW: Cover in WMP Format
 
Das Stück von Chris, das du mir geschickt hast, enthält einen ID3-Tag in der Version 2.4. Mp3fileUtils schreibt beim Bearbeiten genau die Tag-Version, die bereits vorhanden ist. Wenn keine vorhanden ist, Version 3.

Wenn du einen Hex-Editor (z.B. HxD, ist auch portabel) zur Hand hast: das 4. Byte in der Datei, direkt nach dem "ID3". Dieses Byte müsste bei Chris "4" sein, und bei Mariah "3". Wenn das Byte "3" ist, kommt Windows bzw. der WMP mit dem Tag klar.

Die PRIV-Tags haben mit dem Cover eigentlich nichts zu tun. Zumindest nicht mit dem Cover im ID3-Tag. Es kann sein, dass der WMP in diesen PRIV-Frames einige IDs speichert, die dann in einer WMP-Internen Datenbank mit einem Bild verknüpft sind (so kann man sparsam viele Dateien mit größeren Bildinformationen versehen) - aber das ist dann ein ganz anderes Thema.

Falls du das mit den PRIV-Frames nicht glaubst, mach folgendes:
  • Öffne die Datei von Chris in Nemp, und lass dir die Eigenschaften anzeigen.
  • Entferne im Reiter "ID3-Tags" beide Häkchen bei ID3v1 und ID3v2 und klicke auf "übernehmen"
  • Damit ist die Datei vollkommen frei von ID3-Tags
  • Bearbeite die Datei mit deinem kleinen Test-Tool, um die "Folder-.jpg" einzufügen
Dann solltest du eine Mp3-Datei mit Cover, und ohne PRIV-Frames haben.

Oder reden wir aneinander vorbei?

EWeiss 13. Apr 2018 20:04

AW: Cover in WMP Format
 
Zitat:

Dann solltest du eine Mp3-Datei mit Cover, und ohne PRIV-Frames haben.
Soviel Arbeit muss ich mir nicht machen.
Dazu habe ich dieses TOOL welche die Frames entfernt.

siehe!
https://www.delphipraxis.net/1399027-post15.html

Ich will sie aber nicht entfernen denn dann wird das Cover im Visual Plug-In nicht mehr angezeigt.
Ich möchte sie addieren.. und das macht im Moment nur der WMP.

Zitat:

Die PRIV-Tags haben mit dem Cover eigentlich nichts zu tun.
Doch das haben sie.. wenn ich sie mit dem TOOL entferne funktionieren die Covers im Visual Plug-In nicht mehr.
Das ist Fakt.

gruss

Gausi 13. Apr 2018 20:19

AW: Cover in WMP Format
 
Dann greift dieses Tool aber für die Coveranzeige auf die Datenbank des WMP zu, oder sonstwie über eine Windows-API, die möglicherweise irgendwo dokumentiert ist, oder aber vom Autor des Tools reverse engineered wurde. Das weiß ich leider nicht. Möglicherweise läuft das sogar übers Netz.

Wenn du diese Daten schreiben willst, müsstest du noch wissen, wo denn die eigentliche Bildinformation hinterlegt ist. In den PRIV-Frames stehen ja nur ein paar IDs, nichts mehr. Mit dem Cover im ID3-Tag haben diese IDs nichts zu tun.

EWeiss 13. Apr 2018 20:25

AW: Cover in WMP Format
 
Zitat:

Möglicherweise läuft das sogar übers Netz.
Nein habe diverse dinge durch probiert.

Es müssen 2 Covers im Pfad vorhanden sein.
AlbumArtSmall.jpg
Folder.jpg

sind beide vorhanden und die Frames addiert dann wird das Cover angezeigt.
Sind die Frames addiert und eins der Cover fehlt werden diese nicht angezeigt egal ob sich ein Cover im Tag befindet.
sind die Frames im Tag nicht vorhanden selbst wenn beide Covers vorhanden und ein Cover im Tag ist wird es nicht angezeigt.

Hmmm.. Ich glaube da gibt es wohl keine Lösung für.
Schade.
Dann hat sich das wohl erledigt danke für eure Hilfe.

siehe..
https://github.com/perrybutler/id3taglibrary
und lese den Bereich.. Windows Media Player album artwork fix

Zitat:

To make matters worse, Windows Media Player seems to store the GUID inside of a PRIV frame in the ID3 tag embedded in the mp3 file, so even if you try fixing the embedded artwork, Windows Media Player will see the GUID in the PRIV frame and regenerate the hidden jpg files. The problem spreads around from person to person, likely finds its way back into the online database, and never truly gets fixed because users don’t have a way of correcting mp3 files with bad GUIDs stored in PRIV frames of the ID3 tags:
Hier ist noch ein tool da kann man sehen was in den Frames gespeichert ist. Nur zur Info.
Siehe shot

gruss

KodeZwerg 13. Apr 2018 20:45

AW: Cover in WMP Format
 
Was ich mittlerweile herausfand, aber Dir so auch nicht hilft, in den PRIV vom WMP generiert, werden viele Zahlen abgelegt, aus denen Wiederum erstellt WMP ein Name_ZAHLEN_ZAHLEN_ZAHLEN.jpg und verwendet es zur Ansicht.
Vielleicht komme ich noch dahinter was WMP da so anstellt, im moment sind meine Versuche noch mehr als buggy da brute-force.
Auf GitHub fand ich noch ein Tag-Projekt, in VB geschrieben, was auch PRIV erkennt und anzeigen soll, ich kann damit nichts anfangen, aber vielleicht Du. Anbei der Source.

edit
Vergiss das letzte, hab grad erst gesehen das Du das gleiche GitHub Projekt drinn hast, Anhang gelöscht.

EWeiss 13. Apr 2018 20:50

AW: Cover in WMP Format
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399175)
Was ich mittlerweile herausfand, aber Dir so auch nicht hilft, in den PRIV vom WMP generiert, werden viele Zahlen abgelegt, aus denen Wiederum erstellt WMP ein Name_ZAHLEN_ZAHLEN_ZAHLEN.jpg und verwendet es zur Ansicht.
Vielleicht komme ich noch dahinter was WMP da so anstellt, im moment sind meine Versuche noch mehr als buggy da brute-force.
Auf GitHub fand ich noch ein Tag-Projekt, in VB geschrieben, was auch PRIV erkennt und anzeigen soll, ich kann damit nichts anfangen, aber vielleicht Du. Anbei der Source.

siehe vorheriger Beitrag..
Das Bild dann weist du was dort in den Frames geschrieben wird.

Aber es nutz mir nichts wenn ich es nicht selbst zum Tag addieren kann.

gruss

Gausi 13. Apr 2018 20:54

AW: Cover in WMP Format
 
Wenn du den WMP gar nicht benutzen willst, aber das Tag-System bzw. das Plugin, das dieses nutzt, dann könntest du probieren, ob du die GUIDs faken kannst. Wenn der WMP selbst an die Dateien nicht drankommt, dann könntest du probieren, dir ein eigenes GUID-System zu basteln. Diese GUID schreibst du dann in die Private-Frames Das genaue Format dieser Frames ggf. mit nem Hex-Editor austüfteln, meine Mp3FileUtils kann prinzipiell PRIV-Frames schreiben - Daten in einen Stream, Stream in den Frame, fertig. Dann packst du noch die Dateien "AlbumArt_{GUID}_large und small" in das Verzeichnis, und fertig.

Problem könnte dann nur auftauchen, wenn der WMP dann doch mal anfängt, an der Datei rumzupfuschen und "deine" GUID mit der WMP-GUID ersezt, die aus der online-Datenbank kommt oder sonstwie generiert wird, und dann ggf. ein falsches Cover "00000_0000_000_000" geladen wird.

EWeiss 13. Apr 2018 20:58

AW: Cover in WMP Format
 
Zitat:

Zitat von Gausi (Beitrag 1399178)
Wenn du den WMP gar nicht benutzen willst, aber das Tag-System bzw. das Plugin, das dieses nutzt, dann könntest du probieren, ob du die GUIDs faken kannst. Wenn der WMP selbst an die Dateien nicht drankommt, dann könntest du probieren, dir ein eigenes GUID-System zu basteln. Diese GUID schreibst du dann in die Private-Frames Das genaue Format dieser Frames ggf. mit nem Hex-Editor austüfteln, meine Mp3FileUtils kann prinzipiell PRIV-Frames schreiben - Daten in einen Stream, Stream in den Frame, fertig. Dann packst du noch die Dateien "AlbumArt_{GUID}_large und small" in das Verzeichnis, und fertig.

JA genau das wollte ich auch machen also
AlbumArt_{00000000-0000-0000-0000-000000000000}_Large
AlbumArt_{00000000-0000-0000-0000-000000000000}_Small

Eine Leere guid und fertig stelle mir das aber nicht so einfach vor. ;)
Zitat:

und "deine" GUID mit der WMP-GUID ersezt
Das wäre relativ egal ;)

Hier kann man das Tool zum auslesen der PRIV Frames laden. 445KB
https://www.microsoft.com/en-us/down....aspx?id=12826


gruss

Gausi 13. Apr 2018 21:05

AW: Cover in WMP Format
 
Die PRIV-Frames sind ja keine Zauberei. Die sind so aufgebaut:

Code:
<Header for 'Private frame', ID: "PRIV">
Owner identifier       <text string> $00
The private data       <binary data>
Der Owner identifier ist dieses "WM/WMCollectionGroup"-Gedöns. Die eigentlichen Daten sollten dann die GUID enthalten. Du müsstest dann "nur" herausfinden, wie die Binärdaten in Dateinamen konvertiert werden. Bei mir lasse ich den WMP nicht an meine mp3s, das müsstest du dann mal an ein oder zwei Dateien testen. Vielleicht ist es auch einfach eine Hexadezimal-Darstellung oder sonst eine einfache Kodierung.

Zum Schreiben und Lesen der PRIV-Frames bietet MP3FileUtils die Methoden
Delphi-Quellcode:
function GetPrivateFrame(aOwnerID: AnsiString; Content: TStream): Boolean;
procedure SetPrivateFrame(aOwnerID: AnsiString; Content: TStream);
Wichtig ist hier dann nur wieder die Tag-Version des ID3-Tags. Die sollte 2.3 sein, und nicht 2.4.

EWeiss 13. Apr 2018 21:10

AW: Cover in WMP Format
 
Wenn du mal reinschauen möchtest könnte ich dir eine Datei mit den PRIV Frames schicken
Mit dem Tool kannst du diese dann auslesen.
https://www.microsoft.com/en-us/down....aspx?id=12826

Wenn Interesse besteht. ;)

Zitat:

Vielleicht ist es auch einfach eine Hexadezimal-Darstellung oder sonst eine einfache Kodierung.
So wie ich gelesen habe utf16

gruss

Gausi 13. Apr 2018 21:15

AW: Cover in WMP Format
 
Gerne. Dann aber wenn möglich auch die Album-Art-Datei mit der GUID im Namen, damit da ein Abgleich möglich ist. :)

EWeiss 13. Apr 2018 21:17

AW: Cover in WMP Format
 
Zitat:

Zitat von Gausi (Beitrag 1399185)
Gerne. Dann aber wenn möglich auch die Album-Art-Datei mit der GUID im Namen, damit da ein Abgleich möglich ist. :)

Also die GUID steht doch im mpe2.3 Tag.
Oder was meinst du?
Ich kann die Bilder noch addieren.

Die Datei funktioniert auch ohne das ich
AlbumArt_{00000000-0000-0000-0000-000000000000}_Large.jpg
AlbumArt_{00000000-0000-0000-0000-000000000000}_Small.jpg

im Pfad habe
wichtig sind diese beiden Dateien
AlbumArtSmall.jpg
Folder.jpg

größe spielt keine rolle.
Abgeschickt!

Bei dem Anhang ohne.png fehlt das AlbumArtSmall.jpg Cover im Pfad.

gruss

EWeiss 13. Apr 2018 21:45

AW: Cover in WMP Format
 
Datei zum Testen.. source include
Achtung das Plugin vom WMP MediaPlayer_10 muss registriert sein genauso wie die anderen vom WMP
ansonsten werden sie nicht angezeigt und die Liste bleibt leer.

Downloads wenn nicht vorhanden.

https://support.microsoft.com/en-gb/...s-media-player
Psychedelia Viz Pack (Albumart 3D)
Energy Bliss

WMP ist dafür nicht von nöten!
Wenn man bei Albumart3d die Würfel mit Covers unterlegen will ist das Folder.jpg Voraussetzung!

gruss

Gausi 13. Apr 2018 21:54

AW: Cover in WMP Format
 
Laut dem Tag-Projekt, das du eben verlinkt hast, sind CollectionID und CollectionGroupID relevant. Die sind beide identisch und 16 Byte lang in der Datei, die du mir geschickt hast.

Dieser Code (basierend auf dem Mini-Tool aus der ersten Mail) schreibt eine zufällige ID in die Datei und konvertiert dabei die Basis-Infos zu Version 2.3 (Wichtig: Dabei können Infos verloren gehen. Zumindest sollte man die anderen Standard-Infos auch kopieren). Damit sollte dann auch die Chris-Datei, die du mir zuerst geschickt hast, vom WMP verstanden werden. Ob die zufällige ID dann reicht, oder ob doch irgendwo das Bild liegen muss .... keine Ahnung.


Delphi-Quellcode:
Procedure SetCoverpic;
var
  MP3Tags, v23Tag: TId3v2Tag;
  PicData: TMemorystream;
  GUID: TMemorystream;
  i: Integer;
  b: Byte;
begin
   MP3Tags:= TId3v2Tag.Create;
   v23Tag := TId3v2Tag.Create;
   PicData:= TMemoryStream.Create;
   GUID := TMemorystream.Create;
   try
     If (MP3Tags.ReadFromFile(mp3File) = MP3ERR_None) Then
     begin
       Picdata.LoadFromFile(Picfile);

       // basic converting
       v23Tag.Artist := MP3Tags.Artist;
       v23Tag.Album := MP3Tags.Album;
       v23Tag.Title := MP3Tags.Title;

       for i := 1 to 16 do
       begin
          b := Random(255);
          GUID.Write(b, 1);
       end;

       v23Tag.SetPrivateFrame('WM/WMCollectionID', GUID);
       v23Tag.SetPrivateFrame('WM/WMCollectionGroupID', GUID);

       v23Tag.SetPicture('image/jpeg', 0, '*', PicData);
       v23Tag.WriteToFile(mp3file);

     end;
   finally
     FreeAndNIL(MP3Tags);
     FreeAndNIl(PicData);
     FreeAndNIl(GUID);

     FreeAndNIl(v23Tag);
   end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf