AW: Cover in WMP Format
Supi ;)
Werde das direkt mal testen. WOW funktioniert perfekt. Vielen Dank! Genauso muss es sein ;) Jetzt den Kram noch irgendwie als Batch Datei ausführen und gut ist. Das ist dann genau das was ich mir vorgestellt habe. Du siehst also es hat doch mit den Frames zu tun ;) btw.. im Post vorher kannst du mein BassVis Projekt laden und es selber mal testen wenn du möchtest. Eine ID müsste noch für das Rating zuständig sein damit die Sterne noch angezeigt werden. Muss mich da nochmal schlau machen und vor allem was ich da übergeben muss eine GUID sicherlich nicht. 3 Sterne als Standard sollte reichen gruss |
AW: Cover in WMP Format
Aber irgendwas stimmt da doch nicht. Man schreibt eine zufällige Zahl in die Datei, und dann wird das richtige Cover angezeigt? Hä? :gruebel:
Mit dem BassVis Beispiel und dem AlbumArt-Plugin wird bei mir auch immer ein Cover angezeigt. Ein mp3-File und ein Folder.jpg reicht. Aber gut, wenn es bei dir jetzt klappt, dann klappts. :lol: Fürs Rating gibt es eigentlich einen Rating-Frame "POPM", der auch für jeden Player einzeln benutzt werden kann, iirc. |
AW: Cover in WMP Format
Zitat:
Zitat:
Ich benötige das AlbumArtSmall.JPG sonst wird das Cover nicht angezeigt. Habe da jetzt mal dein Rating hinzugefügt. Was muss ich da einfügen um auf 3 Sterne zu kommen?
Delphi-Quellcode:
so bekomme ich nur einen.
v23Tag.Rating := 3;
gruss |
AW: Cover in WMP Format
Rating ist intern ein Byte-Wert. Die 1-5 Sternchen müssen also umskaliert werden auf 1-255 (0 für undefiniert). Aber keine Garantie, dass der WMP das genauso macht.
|
AW: Cover in WMP Format
Zitat:
Danke! EDIT: 128 sind 3 Sterne! Ob die Annahme stimmt von der Berechnung her keine Ahnung ;) Aber so funktioniert es zumindest. Wäre super wenn du das mit den PRIV: Frames in Nemp addierst könnte dann alle Tags damit abgleichen. :) gruss |
AW: Cover in WMP Format
Ich weiß ehrlich gesagt nicht, was ich in Nemp mit den Privaten Frames des WMP anfangen soll. :gruebel: Sinnvoll wäre das ja nur, wenn ich das auch mit sinnvollen Daten befüllen würde. Einfach nur Zufallswerte reinschreiben finde ich nicht sonderlich -ähm- sinnvoll.
Wie gesagt - diese Frames nutzt der WMP für seine eigenen Zwecke. Ein Cover-Bild nicht in jeder Datei zu speichern, sondern nur eine eindeutige ID, über die dann ein Bild zugeordnet werden kann, ist ja prinzipiell eine sinnvolle Sache - das spart in der Summe ordentlich Platz. Aber solange ich nicht weiß, was der WMP da genau erwartet, werde ich da nichts dran rumpfuschen. Ich wäre auf der anderen Seite auch etwas stinkig, wenn der WMP in mp3-Dateien den PRIV-Frame mit der Kennung "NEMP/Tags" mit Zufalls-Zeichen füllen würde, die mein Player für die erweiterten Tags in der Tagwolke nutzt. |
AW: Cover in WMP Format
Zitat:
Zitat:
Dann wäre es Voraussetzung damit die Visualisierungen richtig dargestellt werden. Andernfalls macht so was ja keinen Sinn bin da etwas penible drin. Zitat:
AlbumArt3D das mit den Würfeln benötigt NUR das Folder.jpg. Aber Bliss um das es eigentlich geht benötigt zusätzlich noch das Albumartsmall.jpg Probiere es aus und du wirst es sehen. gruss |
AW: Cover in WMP Format
Der Gedanke kam mir auch schon. :lol:
Aber die nächste Baustelle bei mir wäre erstmal 64-Bit. Hab da einen an der Hand, bei dem Nemp in die Knie geht, weil die Bib zu groß wird und dann mit meinem stellenweise etwas großzügigen Speicherverbrauchs an die Grenze eines 32-Bit-Prozesses kommt. Vermutlich läuft bei 1.000.000 Titeln dann auch sonst nichts mehr vernünftig, aber das Portieren reizt mich irgendwie. Vor allem um zu gucken, ob meine Mp3FileUtils halbwegs sauber in dieser Hinsicht sind. :pale: |
AW: Cover in WMP Format
Zitat:
Nur dir sollte klar sein das alle Plug-Ins zumindest die meisten davon sind in 32Bit geschrieben. Aber gut es gibt ein Workaround damit 32Bit DLL's mit 64Bit Anwendungen funktionieren siehe "WM_COPYDATA" Wollte mich nochmal bedanken das du dich meiner angenommen hast :) Zitat:
Verwende diese in meinem Player Shot auf der ersten Seite vom Thread ;) Lasse das Example von BassVis mal online vielleicht kann es ja jemand brauchen. gruss |
AW: Cover in WMP Format
Das freut mich für Dich das es letzten Endes, obwohl Du schon aufgegeben hattest, sich doch noch alles zum Guten gewendet hat. Nachdem ich mir das SetPic() angeschaut habe verstehe ich auch wieso ich hinter den Zahlen nicht wirklich ein Muster erkennen konnte :)
|
AW: Cover in WMP Format
Zitat:
Mit eurer Hilfe. Alleine wäre ich wohl aufgeschmissen gewesen. Habe alles gerne perfekt ohne das andere Programme sich da einmischen. ;) gruss |
AW: Cover in WMP Format
Falls du meinen Codeschnipsel produktiv einsetzt, dann denk aber daran, dass du in den neu erstellten ID3-Tag noch weitere Informationen vom alten einfügst (mindestens noch Jahr, Kommentar, Genre). Und den alten Tag nur dann durch neuen, WMP-Kompatiblen ersetzt, wenn es nötig ist, also durch eine Abfrage der Version
Delphi-Quellcode:
Dass Daten möglicherweise verloren gehen liegt daran, dass ich in dem Codeschnipsel die "dreckige" Variante für die Konvertierung von 2.3 nach 2.4 gewählt habe, und nicht jeden tatsächlich vorhandenen Frame aktualisiere.
if MP3tags.Version.Major = 3 then
// vorhandenen Tag schreiben, WMP kommt damit klar MP3tags.WriteToFile(mp3File) else // neu gebauten Tag schreiben. Dabei gehen möglicherweise Daten verloren v23Tag.WriteToFile(mp3file); |
AW: Cover in WMP Format
Zitat:
Habe bei 6000 Titeln das PRIV: Frame entfernt. Mache die Anwendung fertig und lasse die drüber laufen.
Delphi-Quellcode:
Anbei noch das Tool desiccate compiliert und für VS2017 angepasst.
v23Tag.Artist := MP3Tags.Artist;
v23Tag.Album := MP3Tags.Album; v23Tag.Title := MP3Tags.Title; v23Tag.Year := MP3Tags.Year; v23Tag.Track := MP3Tags.Track; v23Tag.Genre := MP3Tags.Genre; v23Tag.Rating := 128; for i := 1 to 16 do begin b := Random(255); GUID.Write(b, 1); end; Damit können private Frames, Comments, Ufid's aus dem Tag entfernt werden. Es ist sehr zuverlässig und hat bei mir noch keinen Tag zerstört. gruss |
AW: Cover in WMP Format
Ich denke das dürfte als Warnung ausreichen.
gruss |
AW: Cover in WMP Format
Hier ist das Ergebnis wer's braucht ;)
Das was in der Listbox ROT ausgelegt ist wurde nicht verändert. Deshalb nicht weil kein AlbumArtSmall.jpg im Pfad gefunden wurde. @Gausi habe deine mp3FileUtil im Archiv addiert hoffe das geht in Ordnung, wenn nicht werde ich sie natürlich entfernen. gruss |
Dieses Thema wurde am "14. Apr 2018, 15:12 Uhr" von "Daniel" aus dem Forum "Klatsch und Tratsch" in das Forum "Multimedia" verschoben.
|
AW: Cover in WMP Format
Der Thread hat ja einen hochinteressanten Verlauf genommen, nachdem das eigentliche Problem herausgearbeitet worden war. Die 'PRIV' - Frames hatte ich bisher überhaupt nicht auf dem Schirm. Daraufhin habe ich mal meinen eigenen MP3-Bestand mit dem von dir verlinkten Tool iDesiccate durchforstet und etliche Dateien mit solchen Frames gefunden. Wahrscheinlch sind sie irgendwann einmal durch einen nicht ausreichend restriktiv konfigurierten WMP kontaminiert worden :shock:
In meinem eigenen Programm, dessen Kernfunktion die Anonymisierung von Audiodateien (MP3 und M4A) ist, sind diese PRIV-Frames zum Glück irrelevant. Dort werden die wichtigsten Tags incl. Cover ausgelesen und gesichert. Anschließend werden alle ID3 -Tags komplett aus der Datei entfernt. Zum Schluss werden nur die ausgewählten Tags in die Datei zurückgeschrieben. Damit sollte aller kryptischer Mist entsorgt sein (hoffe ich). Dein Projekt habe ich mir mal in die IDE geladen und angesehen. Testen werde ich das Programm allerdings (vorläufig) nicht, alldieweil ich auf absehbare Zeit keine WMP-Plugins einzusetzen gedenke. :wink: Eine Anmerkung kann ich mir allerdings nicht verkneifen: Das Englisch in dem Readme-Text ist, vorsichtig ausgedrückt, verbesserungsfähig. Vorschläge:
Delphi-Quellcode:
Ich bitte um Nachsicht, dass ich den Oberlehrer in mir mal wieder nicht im Zaum halten konnte :oops:pString := 'the application writes PRIV: Frames to MP3 Tag' + #13#10 + 'this is necessary so that the visual plugins for WMP work properly' + #13#10 + // Vorschlag: 'necessary to make the visual...' 'without having create the Mp3 tag via WMP (Windows Media Player)' + #13#10 + // Vorschlag: 'without having created...' 'a file called AlbumArtSmall.jpg is required in the Search path' + #13#10 + #13#10 + 'WARNING: after execute the function over DoIt, process can''t be stopped' + #13#10 + // Vorschlag: 'after executing...' #13#10 + 'Artist' + #13#10 + 'Album' + #13#10 + 'Title' + #13#10 + 'Year' + #13#10 + 'Track' + #13#10 + 'Genre' + #13#10 + 'Comment' + #13#10 + #13#10 + 'are not changed' + #13#10 + 'if your use more entries in the Mp3 tag' + #13#10 + 'please close the application, or your data will be lost!'; Gruß LP |
AW: Cover in WMP Format
Zitat:
Aber muss dazu sagen.. habe nie English in der Schule gelernt das bisschen das ich kann habe ich mir mit der zeit angeeignet Gewohnheit eben wenn man viel English lesen muss gezwungener weise. Habe ja hier schon gesagt was ich von meinem English halte ;) https://www.delphipraxis.net/1399132-post20.html Aber kein Problem.. Hier das Update habe noch zwei kleine Probleme behoben. btw.. Habe es nach Multimedia verschieben lassen da es ja jetzt darum geht. Danke an die Admins! gruss |
AW: Cover in WMP Format
zu den PRIV-Frames nochmal: Dass dadurch der Fehler hier behoben werden konnte, liegt an der Schusseligkeit des Plugin-Entwicklers. Wenn ohnehin ein Fallback auf das normale Cover "AlbumArtSmall.jpg" genommen wird, dann sollte dieser Fallback auch genommen werden, wenn im ID3-Tag keine GUID für das Coverart gefunden werden kann. Dass man das Plugin fixen kann, in dem man Datenmüll in die Datei schreibt ist einfach nur ... kaputt.
Ansonsten haben PRIV-Frames ja durchaus ihren Nutzen. Sie können allerdings in der Tat bei der Weitergabe persönliche Daten enthalten, das ist richtig. Das gilt aber auch für andere Möglichkeiten, zusätzliche Daten in den ID3-Tag zu schreiben. Einige Tagger/Ripper/Player nutzen diverse "Usertext"-Frames, andere mehrere "Kommentar"-Frames. Und der WMP ist nicht der einzige Player, der die PRIV-Frames nutzt. |
AW: Cover in WMP Format
Zitat:
btw.. Hab da noch ein Problem. Ich habe mp3Tags in Version ID3_v1 Dein mp3fileUtils meldet mir aber das kein Tag gefunden wurde aber er ist definitiv als ID3_v1 enthalten. Wollte jetzt noch deine error messagen an einem String (Label) übergeben wie? Sind ja enums. gruss |
AW: Cover in WMP Format
ID3_v1 und ID3_v2 sind zwei völlig unterschiedliche Dinge, daher sind das auch zwei Klassen bei Mp3FileUtils. Innerhalb dieser beiden Tag-Versionen wird dann unterschieden zwischen v1.0 und 1.1 bzw. v2.2 (fast nicht mehr zu finden), v2.3 und v2.4.
In der Regel macht man das bei MP3-Dateien so, dass man zuerst nach einem ID3v2-Tag sucht. Falls der nicht da ist, nimmt man den ID3v1-Tag. Dieser ist aber sehr restriktiv und kann außer Interpret, Titel, Album, Kommentar, Jahr, Genre und Track-Nr. (letzteres nur v1.1) keine weiteren Daten enthalten. Wenn man weitere Daten schreiben will, sollte man in dem Fall die Daten aus dem ID3v1-Tag übernehmen in einen neu zu erstellenden ID3v2-Tag. Für die Ausgabe des Fehlers müsste man noch ein sinnvolles String-Array definieren
Delphi-Quellcode:
Wundert mich grade ein bisschen, dass ich das damals nicht mit dabei gepackt habe.
MP3ErrorString: Array[TMP3Error] of String = ( ... )
|
AW: Cover in WMP Format
Habe es gerade gemacht bekomme aber Probleme.
Delphi-Quellcode:
Wie kann ich die jetzt auswerten ?
const
cMP3Error : Array[TMP3Error] of String = ( 'MP3ERR_None', 'MP3ERR_NoFile', 'MP3ERR_FOpenCrt', 'MP3ERR_FOpenR', 'MP3ERR_FOpenRW', 'MP3ERR_FOpenW', 'MP3ERR_SRead', 'MP3ERR_SWrite', 'ID3ERR_Cache', 'ID3ERR_NoTag', 'ID3ERR_Invalid_Header', 'ID3ERR_Compression', 'ID3ERR_Unclassified', 'MPEGERR_NoFrame' );
Delphi-Quellcode:
bekomme dann immer nur MP3ERR_None zurück obwohl ein Fehler aufgetreten ist.
var
error : TMP3Error; ... lblMessageVal.Caption := cMP3Error[Error]; Zitat:
Darauf kann ich reagieren und ändere mit MP3Tag auf 2.3 gruss |
AW: Cover in WMP Format
Zeig mal Code wo Du
Delphi-Quellcode:
einen Wert zuordnest.
error
|
AW: Cover in WMP Format
Zitat:
Delphi-Quellcode:
gruss
Error := MP3ERR_None; //<<<
Picdata.LoadFromFile(Picfile); // basic converting v23Tag.Artist := MP3Tags.Artist; v23Tag.Album := MP3Tags.Album; v23Tag.Title := MP3Tags.Title; v23Tag.Year := MP3Tags.Year; try If (MP3Tags.ReadFromFile(mp3File) = MP3ERR_None) Then begin v23Tag.Track := MP3Tags.Track; v23Tag.Genre := MP3Tags.Genre; v23Tag.Comment := MP3Tags.Comment; if MP3Tags.Rating = 0 then v23Tag.Rating := 128 // 3 Sterne else v23Tag.Rating := MP3Tags.Rating; 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 else begin lblMessageVal.Caption := cMP3Error[Error]; end; |
AW: Cover in WMP Format
Zitat:
Delphi-Quellcode:
auch bei einem Fehler aktualisiert.
error
Entweder hab ich Tomaten auf den Augen, aber ich seh nur in Zeile 1 das
Delphi-Quellcode:
gefüttert wird?!
error
Also so hier in etwa:
Delphi-Quellcode:
end else
begin Error := MP3ERR_NoFile; lblMessageVal.Caption := cMP3Error[Error]; end; |
AW: Cover in WMP Format
Eher so:
Delphi-Quellcode:
Wichtig wäre aber ggf. noch, dass beim Schreiben auch was schief gehen kann. Wenn man den User über alles informieren will, werden solche Prozeduren ein klein wenig verschachtelter.
error := MP3Tags.ReadFromFile(mp3File);
If (error = MP3ERR_None) Then begin // ... end else begin lblMessageVal.Caption := cMP3Error[Error]; end |
AW: Cover in WMP Format
Zitat:
Delphi-Quellcode:
Error := MP3Tags.ReadFromFile(mp3File);
If Error = MP3ERR_None then Zitat:
Vielleicht kannst du das ja noch bei einem späteren Update mit berücksichtigen. :) gruss |
AW: Cover in WMP Format
Zitat:
Ich hab Delphi grad nicht offen gehabt (wusst nicht das die unit codes übermittelt), nur gesehn das Error nicht gefüttert wird ;-) |
AW: Cover in WMP Format
Zitat:
Manchmal ist man neben der Rolle. gruss |
AW: Cover in WMP Format
Joar, nach'm zweiten mal Lesen hät's mir auch klar sein müssen, steht ja
Delphi-Quellcode:
also hat's einen Return Code.
If (MP3Tags.ReadFromFile(mp3File) = MP3ERR_None) Then
Oje, ich bin heut auch fertig, mir schwirrt der Kopf, ich erstelle so etwas wie PEID was sich auf dessen UserDB.txt beruht aber auch PE+ Dateien unterstützt. Die vielen ?? Auswertungen bereiten mir momentan eine große Sorge aber davon ein ander mal im "User Projekte"-Forum |
AW: Cover in WMP Format
Zitat:
Ohne AlbumArtSmall funktioniert es nicht. Ohne PRIV auch nicht. Also wenn ich schon auf die platte zugreife warum dann noch eine Umleitung um nach den PRIV Frames zu suchen. Irgendwie eine Verdummung der Leute oder ein versuch dieses Plugin außerhalb WMP nicht nutzen zu können. Das Cover aus den Tags nimmt er auch nicht. gruss |
AW: Cover in WMP Format
Mein WMP kann nicht telefonieren, Mich würde interessieren was mit einer von Dir präparierten Datei passiert, also Bliss Kompatibel mit neuem ID3 Header und die dann durch den WMP getaggt wird.
Ist das mp3 danach Schrott? Ist nur der Header zerschossen? Wird das Cover wegradiert? Ist alles Okay? und solche Dinge halt. Wenn man den ID3 Tag samt PRIV entfernt, also nurnoch Audio hat, diese cleane datei vierfach haben und zu verschiedenen Zeitpunkten von WMP einzeln taggen lassen, einmal mit Cover, einmal ohne, das ganze zweimal. Haben alle vier mp3's die gleiche GUID zugewiesen bekommen? edit Um zu Erfahren in wie fern eine Random() generierte GUID schädlich sein kann, darauf bezieht sich das erstere |
AW: Cover in WMP Format
Zitat:
Deshalb ist mir das relativ egal da ich meine eigenen Abspieler habe. Der andere ein fast vollständiger Clone von Winamp. 2.9 Also daran soll es nicht liegen ;) Zitat:
Leute die ihre Sammlung pflegen werden diese bestimmt nicht mit WMP taggen. gruss |
AW: Cover in WMP Format
Ist ja richtig, Dein Programm sieht Spitze aus und funktioniert bestimmt auch hervorragend, Nemp genauso (und alle die ich hier vergessen hab zu erwähnen), darum ging es mir aber gerade nicht sondern um's WMP Format an sich. Ich wollt nochmal zum Thread Title.
Ich hab da halt wie Gausi meine Bedenken weil Dein Tool ja im WMP PRIV Bereich eingreift, ja Du hast 'ne Warnung drinnen damit es Dir egal sein kann, ich fragte halt einfach mal so in den Raum hinein, weil mich da doch ein gewisses feeling gepackt hat und für mich so noch nicht ganz abgeschlossen war, das Thema WMP Format. |
AW: Cover in WMP Format
@ Eweiss:
Gerade habe ich mir dein Tool PrivFramesWriter nochmal genau angeschaut. Dabei fiel mir auf, dass du eine Stringlist instantiierst, aber nicht freigibst:
Delphi-Quellcode:
procedure TForm1.btnSearchClick(Sender: TObject);
var List: TStringList; IntI: Integer; Mask: array[0..0] of string; begin edSearchpath.Text := GetFolder(CSIDL_DRIVES, 'Select search path'); lstSearch.Clear; If edSearchpath.Text <> '' then begin Mask[0] := '.mp3'; List := TStringList.Create; FindMediaFiles(List, edSearchpath.Text, Mask, True); lblCount.Caption := IntToStr(List.Count); ProgressCounter:= List.Count; lblProgress.Caption := IntToStr(ProgressCounter); if List.Count > 0 then begin btnDoIt.Enabled := true; Setlength(failed, List.Count); end; for IntI := 0 to List.Count - 1 do lstSearch.Items.Add(List[IntI]); end; end; Sollte das nicht so aussehen:
Delphi-Quellcode:
Gruß LP
procedure TForm1.btnSearchClick(Sender: TObject);
var List: TStringList; IntI: Integer; Mask: array[0..0] of string; begin edSearchpath.Text := GetFolder(CSIDL_DRIVES, 'Select search path'); lstSearch.Clear; List := TStringList.Create; try If edSearchpath.Text <> '' then begin Mask[0] := '.mp3'; FindMediaFiles(List, edSearchpath.Text, Mask, True); lblCount.Caption := IntToStr(List.Count); ProgressCounter:= List.Count; lblProgress.Caption := IntToStr(ProgressCounter); if List.Count > 0 then begin btnDoIt.Enabled := true; Setlength(failed, List.Count); end; for IntI := 0 to List.Count - 1 do lstSearch.Items.Add(List[IntI]); end; finally FreeAndNil(List) end; end; |
AW: Cover in WMP Format
Zitat:
Auf jeden fall hast du recht. ;) Keine Entschuldigung, aber im Eifer des Gefechts habe ich nur auf das Ergebnis geachtet als darauf Programmtechnisch alles korrekt zu machen. List wird ja nach dem addieren zur Listbox nicht mehr benötigt muss also Frei gegeben werden. Danke für die Info. EDIT: Würde aber die TStringlist erst erstellen wenn sie auch benötigt wird. Warum ein Objekt initialisieren wenn ich damit nichts tun kann, also wenn das suchen abgebrochen wird. Macht also nur sinn wenn ich anschließend damit auch Arbeiten will\kann. gruss |
AW: Cover in WMP Format
Korrigiert so wäre es richtig.
Delphi-Quellcode:
Man könnte das alles noch etwas schöner machen.
procedure TForm1.btnSearchClick(Sender: TObject);
var List: TStringList; IntI: Integer; Mask: array[0..0] of string; begin edSearchpath.Text := GetFolder(CSIDL_DRIVES, 'Select search path'); If edSearchpath.Text <> '' then begin if lstSearch.Count > 0 then lstSearch.clear; try List := TStringList.Create; Mask[0] := '.mp3'; FindMediaFiles(List, edSearchpath.Text, Mask, True); lblCount.Caption := IntToStr(List.Count); ProgressCounter:= List.Count; lblProgress.Caption := IntToStr(ProgressCounter); if List.Count > 0 then begin btnDoIt.Enabled := true; Setlength(failed, List.Count); end; for IntI := 0 to List.Count - 1 do lstSearch.Items.Add(List[IntI]); finally FreeAndNil(List); end; end; end; Zum Beispiel wenn ein Fehler auftritt (Tag nicht gefunden) Die aktuelle Zeile Gelb färben so das man den Pfad bzw. die Datei erkennen kann die keinen gültigen 2.3 Tag besitzt. Habe das mal versucht aber bei mir wird diese Zeile immer wieder mit grün über pinselt. Nun bin kein VCL Freak eher das Gegenteil aber das ist ja bekannt. Noch ein Pic für @KodeZwerg gruss |
AW: Cover in WMP Format
So wäre es richtiger ;)
Delphi-Quellcode:
List := TStringList.Create;
try (* Mit der Liste arbeiten *) finally List.Free; //reicht bei lokalen Variablen völlig aus end; |
AW: Cover in WMP Format
Zitat:
Danke dann ist das jetzt geklärt ;) Leider kann ich das alte Archiv nicht mehr löschen destotrotz hier das Update. gruss |
AW: Cover in WMP Format
Zitat:
Diskobeleuchtung, Überall Boxen, Dein Plugin, Mann-O-Mann, mächtig Gewaltig Egon! (spruch als Olsenbande) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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