Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
Delphi XE2 Architect
|
Re: Tags Auslesen mit BASS
13. Apr 2008, 07:14
Hi
ich habe schon seit der ersten Beta alles auf die V2.4 umgestellt und es funzt alles wie es soll inc.
Tags.dll.
Allerdings lade ich alles dynamisch.
PS.
Vielleicht hast du ja irgendeine ältere Bass version in deinem System Verzeichnis
Delphi-Quellcode:
unit Dynamic_Tags;
interface
uses
Windows;
var
TAGS_Read: function( handle: DWORD; const fmt: PChar): PChar; stdcall;
TAGS_GetLastErrorDesc: function: PChar; stdcall;
TAGS_GetVersion: function(): DWORD; stdcall;
var
BASSTAGS_Handle:Thandle = 0;
Function Load_BASSTAGSDLL( const dllfilename : string) : boolean;
Procedure Unload_BASSTAGSDLL;
implementation
Function Load_BASSTAGSDLL( const dllfilename : string) : boolean;
var
oldmode : integer;
begin
if BASSTAGS_Handle <> 0 then // is it already there ?
result := true
else
begin {go & load the dll}
oldmode := SetErrorMode($8001);
BASSTAGS_Handle := LoadLibrary(pchar(dllfilename)); // obtain the handle we want
SetErrorMode(oldmode);
if BASSTAGS_Handle <> 0 then
begin
@TAGS_Read:= GetProcAddress(BASSTAGS_Handle, Pchar(' TAGS_Read'));
@TAGS_GetLastErrorDesc:= GetProcAddress(BASSTAGS_Handle, Pchar(' TAGS_GetLastErrorDesc'));
@TAGS_GetVersion:= GetProcAddress(BASSTAGS_Handle, Pchar(' TAGS_GetVersion'));
if (@TAGS_Read = nil) or
(@TAGS_GetLastErrorDesc = nil) or
(@TAGS_GetVersion = nil) then
begin
FreeLibrary(BASSTAGS_Handle);
BASSTAGS_Handle := 0;
end;
end;
result := (BASSTAGS_Handle <> 0);
end;
end;
Procedure Unload_BASSTAGSDLL;
begin
if BASSTAGS_Handle <> 0 then
FreeLibrary(BASSTAGS_Handle);
BASSTAGS_Handle := 0;
end;
end.
//test
Delphi-Quellcode:
Function TBassEngine.Get_Fileinfo(Filename : String; var fInfo : TFileInfo) : Boolean;
var Chan : DWORD;
size : QWORD;
time : float;
begin
.
.
.
.
Chan:= BASS_StreamCreateFile(false, PChar(Filename), 0,0, BASS_STREAM_DECODE);
if Chan = 0 then
Chan:= BASS_MusicLoad(false, Pchar(Filename), 0, 0, BASS_MUSIC_DECODE or
BASS_MUSIC_STOPBACK or
BASS_MUSIC_NOSAMPLE or
BASS_MUSIC_PRESCAN, 0);
if Chan = 0 then
begin
// Error
exit;
end;
{Get File Tag (Tags.dll) }
if Bass_dll_loaded[6] then
Begin
fInfo.TagArtist := TAGS_Read(Chan, '%IFV1(%ARTI, %ARTI)');
fInfo.TagTitle := TAGS_Read(Chan, '%IFV1(%TITL, %TITL)');
fInfo.TagAlbum := TAGS_Read(Chan, '%IFV1(%ALBM, %ALBM)');
fInfo.TagTrack := TAGS_Read(Chan, '%IFV1(%TRCK, %TRCK)');
fInfo.TagDate := TAGS_Read(Chan, '%IFV1(%YEAR, %YEAR)');
fInfo.TagGenre := TAGS_Read(Chan, '%IFV1(%GNRE, %GNRE)');
fInfo.TagComment:= TAGS_Read(Chan,' %IFV1(%CMNT, %CMNT)');
End;
.
.
.
.
end.
|
|
Zitat
|