Autor Beitrag
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 08.05.03 18:11 
Hallo,

Hiermit möchte ich UltimaTag in die öffentliche Testphase schicken.
UltimaTag ist eine Tagging Engine für Delphi (getestet unter Delphi6), die bisher ID3v1 und ID3v2 lesen und schreiben kann.
Eine Anleitung im eigentlichen Sinne gibt's nich nicht, aber die Arbeitsweise sollte aus dem (englisch) kommentierten Quellcode und der Demo hervorgehen.

Es sollten keine Daten beschädigt werden, aber zur Sicherheit solltet ihr vorerst noch Backups eurer MP3-Dateien erstellen, besonders beim Schreiben (ich weise aber darauf hin, daß es bei mir bisher keine Datenverluste gab).


Selbst wenn ihr die Bibliothek in euren Projekten nicht benutzen wollt, bitte ich euch, zumindest die Demo mit einigen MP3-Dateien auszuprobieren, möglichst mit MP3s verschiedener Player (und damit verschiedenen Implementationen von ID3-Tags), und auch die Tags, die geschrieben wurden, in anderen Playern zu testen. Wenn irgendein Player nicht funktioniert, bitte melden!!!

Auch der Versuch, auf verschiedenen Delphi-Versionen und -Editionen zu kompilieren wäre hilfreich für mich.


Außerdem fände ich Feedback über weitere, gewünschte Funktionen noch gut. Was möglich ist, erfährt man unter ID3.org, es werden also Frame-Wünsche für v2 angenommen.
Allerdings werde ich mich vermutlich nicht, wie bei anderen hier vorgestellten Programmen, gleich wieder in die Arbeit stürzen, sondern eine sorgfältige To-Do-Liste führen, Wünsche werden also nicht sofort erfüllt, aber trotzdem stellt sie bitte, damit ich weiß, was andere Leute nützlich finden.
Nächste Versonen werden aber natürlich hier gepostet.


Link:
www.tommie-lie.de/pub/UltimaTag-0.6a.zip (~280 kB)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert


Zuletzt bearbeitet von tommie-lie am Mi 20.10.04 15:40, insgesamt 1-mal bearbeitet
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 20.05.03 10:21 
hi tommie-lie

ich werde das zuhause mal testen da ich das im moment sehr gut gebrauchen kann.

werde dir dann bescheid geben wie die tests verlaufen sind.

gr€€tz
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 22.05.03 19:25 
sers,


also hab die demo gestartet und mal die erste file eingelesen gab auch gleich nene fehler

ausblenden Quelltext
1:
List Index out of Bounds(255)					


dieser fehler tritt willkürlich auf weis mal gehts mal gehts nicht mal kommt der fehler mal nicht ist bei unterschiedlichen mp3's.

wenn man die mp3 datei dann mit deiner kompo einmal schreibt ist sie hinterher auch lesbar.

ich mach gleich mal nen hardcore test und bind sie in mein programm ein das ich grad am schreiben bin. das liest mp3-dateien rekursiv ein mal sehen was da passiert.

so edit:

1. solltest du die Pas die man in die uses einbindet genauso nen wie die kompo nacher auch hab erst versucht ein TUltimaTag zu erzeugen musste ers bei dir inne demo schauen um rauszufinden das es TID3tag heißt.

2. ich kann den typ nicht createn comiler sagt immer klassen oder recordtyp erforderlich - bei dir gehts *komisch*

3. hab die pas in mein lib verzeichnis gemacht also findet tut er sie.

4. kann nicht weitertesten da ich ne zugriffsverletzung bekomme denke weil ich den id3 tag nicht createt hab


gr€€tz
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 22.05.03 19:57 
very strange...
Könntest du versuchen, dem problem ein wenig näher auf die Pelle zu rücken? Tritt es zum Beispiel nur bei bestimmten Genres auf? Oder haben die betreffenden MP3s irgendeinen speziellen tag? Denn eigentlich benutze ich gar keine Listenn, nur die zwei Stirnglists für die ID3v2-Frames und für die zur Verfügung stehenden Genres. Wenn du die Demo im Debugger laufen lässt, gibt er dann irgendwelche Zeilen an? Vielleicht stimmt ja was mit den Comboboxes nicht, und mit der UltimaTag-Unit ist alles in Ordnung (hoffentlich...).

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 22.05.03 20:06 
Nein, zu spät...

Luncustaf hat folgendes geschrieben:
1. solltest du die Pas die man in die uses einbindet genauso nen wie die kompo nacher auch hab erst versucht ein TUltimaTag zu erzeugen musste ers bei dir inne demo schauen um rauszufinden das es TID3tag heißt.

Öhhh, nö! Die Unit soll später auch mal die Ogg-Tags und die APE-Tags (von Monkey-Audio) unterstützten, dann wäre es doof, wenn ich die Unit ID3Tag.pas nennen würde. Da es bisher aber nur ID3 gibt, habe ich die Klasse auch so genannt. Gaanz später kommt dann eine TUltimaTag-Klasse, die Ogg, ID3 und APE in sich vereint.

Zitat:
2. ich kann den typ nicht createn comiler sagt immer klassen oder recordtyp erforderlich - bei dir gehts *komisch*

DAS ist wirklich seltsam...
Wie sieht denn der Code aus (wenn zu lang, per Mail).

Aber mich interessiert immer noch mehr das Problem mit der Liste...

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Do 22.05.03 20:35 
sers,

also ich hab den debugger genommen und es liegt an der combobox - wenn ich das genre auskommentiere dann lüppts einwandfrei durch.

kannst du das ändern? :) plz. würde deine unit gerne in mein programm einbauen da sie gut kompakt ist.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
    id31 : TID3Tag;
  public
   procedure Lese_ID3Tag(Filename : string);

  end;

var
  id3write: Tid3write;

implementation

uses zentral;

{$R *.dfm}

procedure Tid3write.Lese_ID3Tag(Filename : string);
var
s : string;
f : file of byte;
begin
id31 := TID3Tag.Create;//Fehler!
id31.v1.ReadFromFile(Filename);


achja dann mach bitte irgendnen hinweis hin das die klasse anderst heißt wie die pas datei danke ;)


gr€€tz


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 22.05.03 21:37 
Funktioniert bei mir :shock:
Hast du vielleicht id3write als class deklariert und vergessen, sie mit Create zu erzeugen? Dann ist kein Speicher dafür vorhanden, folglich existiert id31 nicht im Speicher und ein Create greift ins Leere.

Zitat:
kannst du das ändern?

Weiß' nich'.
Könntest du mal probieren, die Prozedur TID3v1Tag.GetGenre durch folgendes zu ersetzen (zu finden in Zeile 160):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function TID3v1Tag.GetGenre: String;
begin
  if FGenre < Genres.Count then
    result := Genres[FGenre]
  else
    result := Genres[12]; // "Other"
end;

Wenn's dann klappt, gibt's eine Version 0.6a, wenn's nicht klappt, liegt's an was anderem, aber ich wüsste nicht an was...

Zitat:
achja dann mach bitte irgendnen hinweis hin das die klasse anderst heißt wie die pas datei

Reicht denn nicht, daß ich es in die Pas-Datei ganz oben hingeschrieben habe? :-P
ultimatag.pas Zeile 4 hat folgendes geschrieben:
The class TID3Tag gives full access to the tag in a MP3-file

gut, in der readme.txt steht's nicht und da ist auch noch ein anderer Fehler drin (grad' aufgefallen), aber die ist je eh nur vorläufig, bis die richtige Dokumentation kommt.

Zitat:
würde deine unit gerne in mein programm einbauen da sie gut kompakt ist.

Freut mich das zu hören.
Aber selbst beide Units (für v1 und v2) von Jurgen Faul sind mit gut 30kb noch kleiner als meine :-P (sind allerdings auch nicht ganz so standardkonform, wie man es sich wünschen würde...)

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert


Zuletzt bearbeitet von tommie-lie am Fr 23.05.03 16:35, insgesamt 1-mal bearbeitet
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Fr 23.05.03 02:05 
sersen,

also hab das ausgetauscht bringt aber nichts fehler besteht nach wie vor.

in die pas datei hab ich net geschaut weil du inner readme schreibst das man sie zb ins lib dir kopieren soll wieso sollte ich sie dann aufmachen? ;)


jo is ne klasse hab das mit dem create net gemacht - nun aber reingebracht funktioniert aber dennoch nicht :(


gr€€tz
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 23.05.03 14:17 
Luncustaf hat folgendes geschrieben:
also hab das ausgetauscht bringt aber nichts fehler besteht nach wie vor.

Seltsam. Bei mir ist das nicht. Ist das immer bei einer MP3-Datei, oder ist es bei ein und derselben Datei mal und mal nicht?

Zitat:
jo is ne klasse hab das mit dem create net gemacht - nun aber reingebracht funktioniert aber dennoch nicht :(

Kann nicht sein, funktioniert bei mir. Wo createst du denn?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Fr 23.05.03 15:33 
sers,

1. ist bei verschiedenen dateien - bei einer datei jedesmal sofern ich den tag nicht nochmal neu mit deiner klasse schreibe.

2. ich hab zwei units -> zentral und id3write -> in zentral erzeuge ich ersmal die klasse id3write vom typ Tid3write dann rufe ich die klasse auf oder eine prozedur davon und in der procedur create ich dann den id3tag :)


gr€€tz
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 23.05.03 16:35 
Also mit der Liste sind mir zwei Fehler unterlaufen. Ich habe den Code oben (in meinem vorletzten Post) korrigiert, einmal war ein Tippfehler drin (s vergessen), einmal ein Denkfehler. Wenn es jetzt immer noch nicht geht, könntest du dann bitte die MP3-Datei in einem Hexeditor laden und mit den Wert des letzten Byte geben? Laut Fehlermeldung müsste er ja dezimal 255 betragen.

Was das andere mit der nicht-createten Klasse ist, weiß ich auch nicht. Könntest du mir mal beide Units per Mail schicken? Wenn sensibler Code drin ist, kannst du ihn ja entfernen, auf die ID3-Geschichten kommt es ja an.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Fr 23.05.03 16:51 
sers,

kann ich heute abend amchen bin atm noch auf maloche :(


heißt das für mich das ich die pas datei nochmal runterladen muss?.



gr€€tz
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Fr 23.05.03 17:50 
nö, wieso? Die hast du doch schon. Du hast bereits den Code der Funktion geändert, diesmal musst du das gleiche tun, nur daß sich diesmal der neue Inhalt um zwei Zeichen unterscheidet (die hoffentlich das gewünschte Ergebnis erzielen :roll:).

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Fr 23.05.03 21:55 
tommie-lie hat folgendes geschrieben:
nö, wieso? Die hast du doch schon. Du hast bereits den Code der Funktion geändert, diesmal musst du das gleiche tun, nur daß sich diesmal der neue Inhalt um zwei Zeichen unterscheidet (die hoffentlich das gewünschte Ergebnis erzielen :roll:).


tut es aber leider nicht :( hab atm kein hexeditor da werde mir morgen einen organisieren - bin den abend leider weg werde dir meine units morgen noch zu shcikcen


gr€€tz
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 31.05.03 18:52 
So, damit keiner auf dumme Gedanken kommt, der Fehler von Luncustaf lag nicht etwa bei meiner Unit, sondern darin, daß er einen Record deklariert hat, der ebenfalls TID3Tag hieß und der Compiler statt meiner Klasse diesen Record genommen hat, was natürlich nicht geklappt hat.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Mi 20.10.04 15:15 
@tommie-lie: könntest du das file auch wieder auf deinen neuen space hochladen?
wolltes grade runterladen un dhab dann gesehen dass du ne neue seite hast und der link somit ungültig ist

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 20.10.04 15:39 
Oha, habe ich gar nicht mehr dran gedacht.
www.tommie-lie.de/pub/UltimaTag-0.6a.zip

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Mi 20.10.04 17:10 
thx

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
Experience1986
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 192

Win XP Pro SP2
Delphi 7
BeitragVerfasst: Di 10.05.05 09:27 
hi,

ich nutze dein UltimaTag in meinem MP3 Player namens PlaylistCopier.

Leider musste ich feststellen, wenn in einem MP3 ID3 v1 oder v2 kein Genre Tag vorhanden ist, dass dann ein Fehler erscheint, den ich bislang nur mit try except end zu unterdrücken wusste.

Der Delphi Debugger schreibt mir etwas von ListIndex(255), ich glaube, überschritten.

Ist dir das Problem bekannt und wenn ja hast du eine Lösung für mich?


Meine Implemtierung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var Tag: TID3Tag;
begin
  Tag:=TID3Tag.Create;
  Tag.v1.ReadFromFile('DateiOhneGenreTag.mp3');
  try
      // StringEmpty() ist ein eigene Funktion, 
      // umzu prüfen ob ein String "Leer" ist, also nur Leerzeichen als 
      // Inhalt hat.
      if not StringEmpty(Tag.v1.Genre) then
        begin
          Songliste[i].Genre:=Tag.v1.Genre;
        end
       else if not StringEmpty(Tag.v2.Genre) then
        begin
          Songliste[i].Genre:=Tag.v2.Genre;
        end
       else
        begin
          Songliste[i].Genre:='';
        end;
   except
               
   end;
end;



ich hatte auch bereits versucht die folgende Zeile in Ord() einzubinden um einen Fehlercode zu erhalten, wie in deiner Demo.

Entweder finde ich keinen Fehlercode, speziell für das Genre oder hast du etwa keinen Speziell dafür erstellt?

ausblenden Delphi-Quelltext
1:
2:
ErrCode:=Ord(Tag.v1.ReadFromFile('DateiOhneGenreTag.mp3'));
if not (ErrCode = 0then exit;
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Di 10.05.05 14:59 
user profile iconExperience1986 hat folgendes geschrieben:
Ist dir das Problem bekannt und wenn ja hast du eine Lösung für mich?
:gruebel: Nein, bekannt ist es mir nicht.
Ein ID3v1-Tag enthält aber eigentlich immer ein Genre, nämlich das letzte Byte. Mir fällt aber gerade auf, daß ich mich bei der Bereichsprüfung vertan habe:
Nahe Zeile 773 in der Methode TID3v1Tag.GetGenre steht "if FGenre <= Genres.Count then", das muss ersetzt werden durch "if FGenre < Genres.Count then".

Aber für ID3v2 fällt mir gerade auf, daß ich tatsächlich keine Fehlerprüfung vorgenommen habe. Das dürfte nicht nur das Genre-Frame betreffen, sondern alle Frames. Ich wüsste im Moment auch nicht, wie man dieses Problem schnell mit einem kleinen Patch lösen könnte, es wäre eine etwas größere Änderung notwendig.

Wie gesagt, für ID3v1 kann ich es mir nicht vorstellen, es sei denn es ist ein Genre gleich 128 (beginnend bei Null), dann ist dieses Genre nicht im Standard enthalten und sowieso noch nicht eingepflegt, oder es geht massiv etwas schief. Für ID3v2 ist mir der Fehler bisher nicht aufgefallen. Nun ist er es, eine Lösung habe ich dennoch nicht, aber trotzdem Danke für die Fehlermeldung.Hier habe ich irgendwo noch eine 0.7 pre-alpha (eigentlich der frühe Vorläufer von UltimaTag2) rumfliegen, die ich leider nicht mehr weiterentwickele. Vielleicht küsst mich irgendwann die Muse und ich fange wieder damit an, dann werde ich bestimmt schauen, ob dort das Problem auch auftritt. Aber ich denke (hoffe), daß diese Bibliothek dann für .NET sein wird, ob ich da meinen alten Win32-Code mitnehmen kann, wird sich noch rausstellen (habe jetzt schon Angst vor den Compilerfehlern *g*).
Leider muss ich dich auf den try..except-Workaround vertrösten.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert