AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Winamp Plugin in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Winamp Plugin in Delphi

Ein Thema von chri_ri · begonnen am 22. Okt 2008 · letzter Beitrag vom 26. Okt 2008
Antwort Antwort
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#1

Winamp Plugin in Delphi

  Alt 22. Okt 2008, 16:52
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Winamp Plugin in Delphi

  Alt 23. Okt 2008, 00:11
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von seim
seim

Registriert seit: 11. Nov 2007
83 Beiträge
 
#3

Re: Winamp Plugin in Delphi

  Alt 23. Okt 2008, 08:46
Der Code da ist für ein Plugin einer Visualisierung.. glaube nicht das man damit die Titel anzeige ändern kann..
  Mit Zitat antworten Zitat
Benutzerbild von seim
seim

Registriert seit: 11. Nov 2007
83 Beiträge
 
#4

Re: Winamp Plugin in Delphi

  Alt 23. Okt 2008, 08:48
Btw: was bedeutet dieses Zeichen (^) da?

Code:
PwinampVisHeader = ^TwinampVisHeader;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#5

Re: Winamp Plugin in Delphi

  Alt 23. Okt 2008, 08:51
PwinampVisHeader = ^TwinampVisHeader; Heißt auf Deutsch: PwinampVisHeader ist ein Zeiger auf TwinampVisHeader.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Winamp Plugin in Delphi

  Alt 23. Okt 2008, 12:11
Note to myself: lesen->denken-posten

Ich habs gestern Nacht so verstanden, als wollte der TE die Titel in einem Plugin anzeigen lassen. Scusi!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Winamp Plugin in Delphi

  Alt 26. Okt 2008, 02:05
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 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