Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 18.03.12 19:29 
Nach Mp3FileUtils und Flogger kommt jetzt die vermutlich letzte Open Source Unit zum Thema Audio- und Metadaten von mir. Wenn weiteres kommt, dann wird das hier eingepflegt. ;-)

Audio Werkzeuge Bibliothek (AWB)

Der Name ist ein direkte Anlehnung an die Audio Tools Library, die seit einigen Jahren nicht weiter gepflegt wird und einen ähnlichen Funktionsumfang, aber auch ein paar sehr unschöne Eigenschaften hat (besonders in bezug auf mp3-Dateien).

Features (Zusammenfassung)
  • Lesen und schreiben von Metadaten in mp3-Dateien (ID3v1, v1.1, v2.2, v2.3, v2.4) (Details siehe Mp3FileUtils)
  • Lesen und schreiben von Metadaten in Flac-Dateien (Comments und Cover-Art) (Details siehe Flogger)
  • Lesen und Schreiben von Metadaten in Ogg-Vorbis-Dateien (Details siehe Flogger)
  • Lesen und Schreiben von ApeV2-Tags (Comments, Cover Art, Binary Data) (z.B. in Dateien vom Typ Monkeys Audio, MusePack, OptimFrog, WavePack, TrueAudio)
  • Lesen von Metadaten in Windows Media Audio
  • Auswerten von Audiodaten (Bitrate, Samplerate, Dauer, Channels) in mp3, ogg, flac, ape, mpc, ofr, wav, wv, tta

Getestet mit Delphi 7 und Delphi 2009. Delphi 6 sollte auch noch laufen, bei Delphi 5 machen die Mp3FileUtils Probleme.


Die Unit AudioFiles.pas mit der Klasse TAudioFile

Die Superklasse. Folgender Code (leicht gekürzt) reicht, um einen Basis-Tagger für alle Formate zu erzeugen:
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:
25:
26:
27:
28:
procedure TSimpleTagger.FileListBox1Change(Sender: TObject);
begin
    MainAudioFile := TAudioFile.Create(FileListBox1.FileName);
    EdtTitle.Text  := MainAudioFile.Title;
    EdtArtist.Text := MainAudioFile.Artist;
    EdtAlbum.Text  := MainAudioFile.Album;
    EdtGenre.Text  := MainAudioFile.Genre;
    EdtYear.Text   := MainAudioFile.Year;
    EdtTrack.Text  := MainAudioFile.Track;
    Memo1.Clear;
    Memo1.Lines.Add(Format('Type:      %s',       [MainAudioFile.FileTypeName] ));
    Memo1.Lines.Add(Format('FileSize   %d Bytes', [MainAudioFile.FileSize]     ));
    Memo1.Lines.Add(Format('Duration   %d sec',   [MainAudioFile.Duration]     ));
    Memo1.Lines.Add(Format('Btrate     %d kBit/s',[MainAudioFile.Bitrate div 1000]));
    Memo1.Lines.Add(Format('Samplerate %d Hz',    [MainAudioFile.Samplerate]   ));
    Memo1.Lines.Add(Format('Channels:  %d',       [MainAudioFile.Channels]     ));
end;

procedure TSimpleTagger.BtnSaveClick(Sender: TObject);
begin
    MainAudioFile.Title  := EdtTitle.Text ;
    MainAudioFile.Artist := EdtArtist.Text;
    MainAudioFile.Album  := EdtAlbum.Text ;
    MainAudioFile.Genre  := EdtGenre.Text ;
    MainAudioFile.Year   := EdtYear.Text  ;
    MainAudioFile.Track  := EdtTrack.Text ;
    MainAudioFile.UpdateFile;
end;


Die Klassen <*>Files.pas mit den Klassen T<*>File

Abgeleitet von der abstrakten Basisklasse TBaseAudioFile implementieren diese Klassen die Basismethoden und liefern - je nach Typ - weitere Informationen aus den Dateien. Die Klasse TAudioFile hat dafür die Properties <*>File, über die weiterführender Zugriff möglich ist. Das wird in der ExtendedDemo vorgeführt. Die Dateitypen, die ApeTags nutzen, sind dabei von einer Zwischenklasse TBaseApeFile in der Unit Apev2Tags.pas abgeleitet. Die Klasse TMp3File hat als Property auch Id3v2Tag, über den dann der ganze Quatsch möglich ist, der in den MP3FileUtils-Demos beschrieben wird.

Bei den Methoden T<*>File.ReadFromFile bzw. WriteToFile wird bzgl. der Meta-Tags (ID3, ApeV2, Ogg-Vorbis-Comments) folgendes angenommen:
  • ID3-Tags kommen NUR in mp3-Dateien vor. Einige der ApeV2Tag-Formate erlauben auch ID3-Tags. Wenn diese in solchen Dateien vorhanden sind, wird das zwar erkannt, die darin enthaltenen Informationen werden aber ignoriert. Wer diese lesen/schreiben möchte, muss dies selber über die (hier auch enthaltenen) Mp3FileUtils machen.
  • Ogg-Vorbis-Comments kommen in Ogg-Vorbis- und Flac-Dateien vor (eingebettet in den entsprechenden Container)
  • ApeV2Tags kommen nur in den exotischen Formaten vor. Wenn die jemand in mp3-Dateien speichern möchte, kann er das mit etwas Handarbeit auch tun


Lizenz

LGPL oder MPL

Die Audio Tools Library, von denen hier auch einiges drin steckt, stehen nur unter der LGPL. Da ich auf eine Anfrage keine Antwort bekommen habe, das Projekt seit einigen Jahren nicht mehr weiter entwickelt wird, und der Anteil von ATL-Code nicht sonderlich groß ist, habe ich mir die Dual-Lizenz einfach so erlaubt. ;-)
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.


Zuletzt bearbeitet von Gausi am Do 05.04.12 12:37, insgesamt 2-mal bearbeitet
Servite
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 26.03.12 20:57 
Hi,
Thanks for share.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 05.04.12 12:42 
Beim Einbau in meinen Player sind mir noch ein paar Dinge aufgefallen, die anders besser wären. Was das genau war, weiß ich jetzt nicht mehr, aber da die Anzahl der Nutzer dieser Klassen hier doch recht überschaubar ist, habe ich diese ersten Änderungen nicht dokumentiert. ;-) Zum Beispiel kann jetzt der Fehlercode abgefragt werden, der im Constructor der Hauptklasse (bzw. beim Einlesen der Daten aus der übergebenenen Datei) ermittelt wird.

Neu hinzugekommen sind noch Read-Only-Klassen für wav und wma, und auf meiner Webseite gibt es die Audio Werkzeuge Bibliothek jetzt auch. :)

_________________
We are, we were and will not be.