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:
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.
We are, we were and will not be.