Thema: Mp3FileUtils

Einzelnen Beitrag anzeigen

MW97

Registriert seit: 20. Nov 2010
Ort: Sachsen-Anhalt, Region Magdeburg
13 Beiträge
 
Delphi 7 Personal
 
#63

AW: Mp3FileUtils

  Alt 16. Aug 2011, 14:24
Delphi-Quellcode:
type
    TAudioInf=class
      private
        procedure GetMp3Info;
        procedure GetWmaInfo;
        procedure SetUnknown;
      public
        Interpret: string;
        Titel : string;
        Pfad : string;
        Album : string;
        Jahr : string;
        Dauer : integer;

        //Titelinformationsprozeduren
        procedure GetAudioInfo(FileName: string);
        function GetPlaylistTitel:string;
  end;

implementation

uses
  SysUtils, Mp3FileUtils, ATL_WMAfile, Classes;

//*********************************
//Prozeduren für Titelinformationen
//*********************************

//Hauptprozedur für Titelinformationen
procedure TAudioInf.GetAudioInfo(FileName: string);
begin
  Pfad := filename;
  if (AnsiLowerCase(ExtractFileExt(FileName)) = '.mp3') then
    GetMp3Info
  else
    if AnsiLowerCase(ExtractFileExt(FileName)) = '.wmathen
      GetWMAInfo
    else
      SetUnknown;
  if Interpret='then Interpret:='Unbekannter Interpret';
  if Album=''     then Album:='Unbekanntes Album';
  if Jahr=''      then Jahr:='unbekanntes Jahr';
end;

//Prozedur für Titelinformationen von MP3-Dateien
procedure TAudioInf.GetMp3Info;
var
  MpegInfo: TMpegInfo;
  ID3v2Tag: TID3V2Tag;
  ID3v1tag: TID3v1Tag;
  Stream: TFileStream;
begin
  // Daten mit MP3FileUtils auslesen
  Mpeginfo:=TMpegInfo.Create;
  ID3v2Tag:=TID3V2Tag.Create;
  ID3v1tag:=TID3v1Tag.Create;
  Stream := TFileStream.Create(Pfad, fmOpenRead or fmShareDenyWrite);
  try
  id3v1tag.ReadFromStream(Stream);
  Stream.Seek(0, sobeginning);
  Id3v2tag.ReadFromStream(Stream);
  if Not id3v2Tag.exists then
    Stream.Seek(0, sobeginning)
  else
    Stream.Seek(id3v2tag.size, soFromBeginning);
  Mpeginfo.LoadFromStream(Stream);
  Stream.free;
  //Daten übertragen
  if mpeginfo.FirstHeaderPosition >- 1 then
  begin
    if id3v2tag.artist <> 'then
      Interpret := id3v2tag.artist
    else
      Interpret := id3v1tag.artist;
    if id3v2tag.Album <> 'then
      Album :=id3v2tag.Album
    else
      Album:=id3v1tag.Album;
    if id3v2tag.Year<> 'then
      Jahr:=id3v2tag.Year
    else
      Jahr:=id3v1tag.Year;
    if id3v2tag.title <> 'then
      Titel := id3v2tag.title
    else
      if id3v1tag.title <> 'then
        Titel := id3v1tag.title
      else
        Titel := ExtractFileName(Pfad);
    Dauer := mpeginfo.dauer;
  end else
    SetUnknown;
  finally
  MpegInfo.Free;
  Id3v2Tag.Free;
  Id3v1Tag.Free;
  end;
end;

//Prozedur für Titelinformationen von WMA-Dateien
procedure TAudioInf.GetWmaInfo;
var
  wmaFile: TWMAfile;
begin
  if Not FileExists(Pfad) then
  begin
    SetUnknown;
    exit;
  end;
  try
  wmaFile := TWMAFile.create;
  if wmaFile.ReadFromFile(Pfad) then
  begin
    if wmaFile.Title <> 'then
      Titel := wmaFile.Title
    else
      Titel := ExtractFilename(Pfad);
      Interpret := wmaFile.Artist;
      Dauer := Round(wmaFile.Duration);
      Album :=wmaFile.Album;
      Jahr :=wmaFile.Year;
  end else
    SetUnknown;
  finally
  wmaFile.Free;
  end;
end;

//Prozedur für Titelinformationen von unbekannten Dateien
procedure TAudioInf.SetUnknown;
begin
  Titel := ExtractFileName(Pfad);
  Interpret := '';
  Dauer := 0;
end;

//Prozedur für Titelinformationen nach %Interpret%-%Titel%
function TAudioInf.GetPlaylistTitel:string;
begin
  if Trim(Interpret)='then
    result := Titel
  else
    result := Interpret + ' - ' + Titel;
end;
  Mit Zitat antworten Zitat