![]() |
Winamp Plugin in Delphi
Hallo,
ich wollte ein einfaches Plugin für Winamp schreiben, welches die anzeige das aktuellen Tracks in Winamp ändert. Dieses Plugin ist für ein bestimmtes Webradio gedacht (später auch für andere Webradios), welches seinen aktuellen Titel nicht per Shoutcast mitliefert, sondern auf der Homepage anzeigt. Es soll also auf die Homepage zugreifen, den Track auslesen und dann die Anzeige im Winamp ändern, wenn der Stream von dem Webradio gespielt wird. Das mit dem Auslesen und alles habe ich bereits in einem Extra-Tool realisiert. Nun möchte ich aber ein entsprechdes Winamp-Plugin machen. Meine Probleme: - Finde kein vollständiges Tuturial / passendes Beispiel. Wenn Ich ein Beispiel finde, dann ist es meist nicht in Delphi, sondern C/C++ und funktioniert nicht richtig, bzw. ist unpassend. Eine Winamp SDK, welche aus Bespielen besteht gibt es zwar, aber dieses ist jedoch in C/++ und dessen Dokumentation ist ziemlich dünn / mangelhaft, weshalb ioh damit nicht zurecht komme. Es erstellt nur statische Librarys (*.LIB) statt dynamische Librarys (*.DLL). Ein Winamp SDK für Delphi soll es angeblich auch geben. Dessen Homepage existiert jedoch nichtmehr, da es schon etwas älter ist und finden konnte ich es auch nicht. Also wenn zufällig jemand für mich ein paar gute / ein passendes Tuturial bzw gutes / passendes Beispiel (möglichst in Delphi) hat, dann wäre das echt super. Über Hinweise zu dem erwähnten Winamp SDK in Delphi wäre ich ebenfalls sehr Dankbar. Alternativ würde ich mich ebenfalls über einen Tipp zu dem oben erwähnten Fehler (*.LIB / *.DLL) freuen. Schonmal vielen Dank im Vorraus! mfg. chri_ri |
Re: Winamp Plugin in Delphi
Ich hab mir mal ein Gerüst zusammen gebastelt, dass eine ganz brauchbare Minimalbasis für eine Plugin DLL ist. Das klärt zwar noch nicht die Frage, wie man denn nun an die Titel kommt, aber es erzeugt zumindest schon mal eine DLL die WinAmp als Plugin annimmt. Ansonsten sind C und Delphi ja konzeptionell nicht so unheimlich weit voneinander entfernt (zumindest was hier relevante Dinge angehen dürfte), so dass das C SDK durchaus eine brauchbare Hilfe ist. Im zweifel zeig doch mal her, an welcher Stelle genau du fest sitzt.
Delphi-Quellcode:
library WinampVisTemplate;
uses Windows; {$R *.res} type PWinampVisModule = ^TwinampVisModule; TwinampVisModule = record description : PChar; // description of module hwndParent : HWND; // parent window (filled in by calling app) hDllInstance : HINST; // instance handle to this DLL (filled in by calling app) sRate : Cardinal; // sample rate (filled in by calling app) nCh : Cardinal; // number of channels (filled in...) latencyMs : Cardinal; // latency from call to Render to actual drawing delayMs : Cardinal; // delay between calls to Render (in ms) // the data is filled in according to the respective Nch entry spectrumNCh : Cardinal; // Number of channels waveformNCh : Cardinal; // Number of channels spectrumData : Array [0..1, 0..575] of Byte; // waveform data (values from 0-255) waveformData : Array [0..1, 0..575] of Byte; // spectrum data (values from 0-255) // functions that winamp calls to configure the plugin, initialise ... Config : procedure(const PVisModule : PwinampVisModule); cdecl; Init : function (const PVisModule : PwinampVisModule) : Integer; cdecl; Render : function (const PVisModule : PwinampVisModule) : Integer; cdecl; Quit : procedure(const PVisModule : PwinampVisModule); cdecl; userData : procedure; cdecl; // user data, optional end; PwinampVisHeader = ^TwinampVisHeader; TwinampVisHeader = record version : Integer; description : PChar; // description of library getModule : function (Which : Integer) : PwinampVisModule; cdecl; end; // forward declaration of the procedures function GetModule(Which :integer) :PWinAMPVisModule; cdecl; forward; procedure Config(const PVisModule : PWinAMPVisModule); cdecl; forward; function Init(const PVisModule : PWinAMPVisModule): integer; cdecl; forward; function Render(const PVisModule : PWinAMPVisModule): integer; cdecl; forward; procedure Quit(const PVisModule : PWinAMPVisModule); cdecl; forward; function winampVisGetHeader: PwinampVisHeader; cdecl; export; forward; const HDR: TWinAMPVisHeader = (Version : $101; // WinAMP checks this for compatibility Description : 'XXX'; // Name of your vis GetModule : GetModule); VisModule: TWinAMPVisModule = (Description : 'XXX'; // Short description of your vis hWNDParent : 0; hDLLInstance : 0; sRate : 0; nCh : 0; LatencyMs : 10; DelayMS : 25; SpectrumNch : 2; WaveformNch : 0; Config : Config; // config function Init : Init; // Plug-in initialization function. Returns 0 if success Render : Render; // render function. 0 if successful, 1 if vis should end Quit : Quit; // quit function UserData : nil); exports winampVisGetHeader; {------------------------------------------------------------------------------} function WinAMPVisGetHeader: PWinAMPVisHeader; begin // Return the main header Result := @HDR; end; function GetModule(Which: Integer): PWinampVisModule; begin if which = 0 then Result := @VisModule else Result := nil; end; procedure Config(const PVisModule: PWinAMPVisModule); begin // Called when user clicks vis configuration end; function Init(const PVisModule: PWinAMPVisModule): Integer; begin // Called first after loading the plugin Result := 0; end; function Render(const PVisModule: PWinAMPVisModule): Integer; begin // Your code to render one frame of your vis // Called continously while vis is running Result := 0; end; procedure Quit(const PVisModule: PWinAMPVisModule); begin // Called at stopping of vis end; begin end. |
Re: Winamp Plugin in Delphi
Der Code da ist für ein Plugin einer Visualisierung.. glaube nicht das man damit die Titel anzeige ändern kann..
|
Re: Winamp Plugin in Delphi
Btw: was bedeutet dieses Zeichen (^) da?
Code:
PwinampVisHeader = ^TwinampVisHeader;
|
Re: Winamp Plugin in Delphi
Delphi-Quellcode:
Heißt auf Deutsch: PwinampVisHeader ist ein Zeiger auf TwinampVisHeader.
PwinampVisHeader = ^TwinampVisHeader;
|
Re: Winamp Plugin in Delphi
Note to myself: lesen->denken-posten :oops:
Ich habs gestern Nacht so verstanden, als wollte der TE die Titel in einem Plugin anzeigen lassen. Scusi! |
Re: Winamp Plugin in Delphi
Erstmal THX für die Antworten!
Also ich habe unter C++ das Visual Studio 2008 Express von Microsoft genutzt. Und der einzige Fehler dort war der bereits erwähnte mit der Erstellung einer *.LIB statt einer *.DLL. Und Thx für das Grundgerüst. Vielleicht brauche ich ja irgendwann mal eine Visualisierung^^ Aber ich dachte eigentlich, dass ich im Beitrag alles klar geschrieben habe. Ich wollte die Titelanzeige IN Winamp ändern / korrigieren. Das Plugin soll die Titel-Informationen von einer extrernen Quelle abrufen und an Winamp übergeben. mfg. FRY82 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz