Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi MusicBrainz abfragen per musicbrainz.dll (siehe Bsp. Code) (https://www.delphipraxis.net/63219-musicbrainz-abfragen-per-musicbrainz-dll-siehe-bsp-code.html)

cip 15. Feb 2006 15:20


MusicBrainz abfragen per musicbrainz.dll (siehe Bsp. Code)
 
Hallo zusammen,

ich möchte gerne die freie Musik-DB MusicBrainz abfragen um Meta-Infos zu bestimmten mp3 auf meiner HDD zu erhalten (z.B. Album, Interpret, Cover Pic, etc.)

MusicBrainz bietet auf der Website ein Client SDK an - nur leider nicht für Delphi. Auch das Wiki enthält nur Infos/Header-Files zur Abfrage per C++.

Der Service kann über eine DLL "angerufen" werden. Übergibt man im einen "Fingerabdruck" (Bitprint) eines MP3s das sich in der MusicBrainz-DB befindet, bekommt man die besagten Infos zurück.

Auf der Mailingliste hab ich folgenden Delphi Code gefunden:

Delphi-Quellcode:
type TMusicBrainz = pointer;
const MBDll='musicbrainz.dll';
 
implementation
   function CreateMB:TMusicBrainz; external MBDll name 'mb_New';
   procedure DestroyMB(var MB:TMusicBrainz); external MBDll name
'mb_Delete';
   procedure GetVersion(MB:TMusicBrainz;Minor,Major,Rev:pointer); external
MBDll name 'mb_GetVersion';
 
procedure TForm1.Button1Click(Sender: TObject);
var Lib:integer;
    MB:TMusicBrainz;
    Info:TBitprintInfo;
    FileName:array[0..255] of char;
    P1,P2,P3:pointer;
    a,b,c,d,e:integer;
begin
   MB:=CreateMB;
   P1:=@a;
   P2:=@b;
   P3:=@c;
   GetVersion(MB,P1,P2,P3);
   DestroyMB(MB);
end;

Geht nur leider nicht :/

Kann mir vllt jemand sagen, wie ich die DLL richtig einsetze?

Die DLL gibts hier: http://ftp.musicbrainz.org/pub/music...2sdk-2.1.2.zip
C# language bindings hier: http://ftp.musicbrainz.org/pub/music...tNet-2.1.1.zip (falls das jmd weiterhilft..)


Dank Euch!!

cip

Ghostwalker 25. Apr 2006 14:08

Re: MusicBrainz abfragen per musicbrainz.dll (siehe Bsp. Cod
 
Die Richtige definition für die mb_GetVersion lautet wie folgt:

Delphi-Quellcode:
   function mb_GetVersion(mb:TMusicbrainz;var min,maj,rev:integer):integer;stdcall;external dllname;
stdcall ist wichtig, da es sich um eine C-Bibleothek handelt. Desweiteren Var-Parameter, da diese ja verändert werden (also der Zeiger auf die Variable gebraucht wird);

Wenn du es mit folgendem code probierst, sollte es gehen:

Delphi-Quellcode:
   const
   thedll='libmusicbrainz.dll';

type
   TMusicbrainz = pointer;

procedure mb_Delete(mb:TMusicbrainz);stdcall;external thedll;
procedure mb_GetVersion(mb:TMusicbrainz;var minor,major,rev:integer);stdcall;external thedll;
function mb_New():TMusicbrainz;stdcall;external thedll;
                 :
var
  mb : TMusicbrainz;
  erg,min,maj,rev : integer;

begin
  mb := mb_New;
  erg := mb_GetVersion(mb,min,maj,rev);
  if (erg <> 0) then
    showmessage(format('Version: %2d.%2d.%2d',[min,maj,rev]))
  else
    showmessage('Fehler !');
  mb_Delete(mb:TMusicbrainz);
end;
Einziges Problem dabei ist, das der den mb_Delete am ende nicht mag.


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