Delphi-PRAXiS
Seite 4 von 9   « Erste     234 56     Letzte » 

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)

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 06:43 Uhr.
Seite 4 von 9   « Erste     234 56     Letzte » 

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