Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Audio Werkzeuge Bibliothek (AWB) (https://www.delphipraxis.net/167238-audio-werkzeuge-bibliothek-awb.html)

Gausi 19. Mär 2012 17:25

Audio Werkzeuge Bibliothek (AWB)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Audio Werkzeuge Bibliothek (AWB)

Eine Sammlung von Klassen zum Auslesen von Audio-Informationen (Bitrate, Samplerate, Dauer, etc.) und Bearbeiten von Metatags (Interpret, Titel, Album, Cover-Art, ...) in verschiedenen Audio-Dateitypen.

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). Auch die Klassenstruktur ist hier etwas angenehmer, da (fast) alles von einer abstrakten Basisklasse abgeleitet wird. Das Auslesen der Audio-Informationen bei den exotischen Dateifomaten ist von dort (modifiziert) übernommen.

Features (Zusammenfassung)
  • Lesen und schreiben von ID3Tags in mp3-Dateien (ID3v1, v1.1, v2.2, v2.3, v2.4)
  • Lesen und schreiben von Metadaten in Flac-Dateien (Comments, Cover-Art)
  • Lesen und Schreiben von Metadaten in Ogg-Vorbis-Dateien (Comments)
  • Lesen und Schreiben von ApeV2-Tags (Comments, Cover Art, Binary Data) (z.B. in Dateien vom Typ Monkeys Audio, MusePack, OptimFrog, WavePack, TrueAudio)
  • Auswerten von Audiodaten (Bitrate, Samplerate, Dauer, Channels) in mp3, ogg, flac, ape, mpc, ofr, wv, tta
Das ganze mit voller Unicode-Unterstützung und ziemlich weitgehendem Zugriff auf die Tags, ohne das für Anfänger unnötig kompliziert zu machen. So können beliebige eigene Frames (bei id3) bzw. Keys (bei ogg, flac, ape) definiert werden. Cover können mehrere parallel gespeichert werden (front, back, usw.). In id3 und ape sind auch beliebige Binärdaten erlaubt.
Getestet mit Delphi 7 und Delphi 2009. Delphi 6 sollte auch noch laufen, bei Delphi 5 machen die Mp3FileUtils und einige UTF8/Unicode-Routinen Probleme.

Ein paar Hinweise zur Nutzung:

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-Quellcode:
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
Delphi-Quellcode:
TBaseAudioFile
implementieren diese Klassen die Basismethoden und liefern - je nach Typ - weitere Informationen aus den Dateien. Die Klasse
Delphi-Quellcode:
TAudioFile
hat dafür die Properties
Delphi-Quellcode:
<*>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
Delphi-Quellcode:
TBaseApeFile
in der Unit
Delphi-Quellcode:
Apev2Tags.pas
abgeleitet. Die Klasse
Delphi-Quellcode:
TMp3File
hat als Property auch
Delphi-Quellcode:
Id3v2Tag
, über den dann der ganze Quatsch möglich ist, der in den MP3FileUtils-Demos beschrieben wird (z.B. rekursive mp3-Dateien bauen).

Bei den Methoden
Delphi-Quellcode:
T<*>File.ReadFromFile
bzw.
Delphi-Quellcode:
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 (ape, mpc, ofr, wv, tta) vor. Gelegentlich kommen die auch in mp3-Dteien vor - wer das unbedingt braucht, kann das selbst über ein BaseApeFile machen

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. ;-))


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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