Sonique Plugins mit Delphi4

Diskutiere Sonique Plugins mit Delphi4 im Developer Network Forum im Bereich Hardware & Software Forum; Hallo weiß jemand wie ich Plugins mit Delphi4 für den Sonique Player schreibe? Ich habe mir die C API von der Homepage geladen, doch ich hab noch...
  • Sonique Plugins mit Delphi4 Beitrag #1
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Hallo

weiß jemand wie ich Plugins mit Delphi4 für den Sonique Player schreibe? Ich habe mir die C API von der Homepage geladen, doch ich hab noch nicht viel mit DLLs gearbeitet!

Vielleicht kennt ihr auch einen Link!

Danke
cion
 
  • Sonique Plugins mit Delphi4 Beitrag #2
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Geht es dann um das Entwickeln einer DLL, die den Anforderungen der Schnittstelle (Plugin) entsprechen muß? Wenn ja, können wir uns um den allgemeinen Aufbau und die Arbeit mit DLLs unter Delphi hier unterhalten...

O Love

------------------
"I will not abide disobedience!"
 
  • Sonique Plugins mit Delphi4 Beitrag #3
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Ach püh, die deklarieren nur eine Funktion, die aber dann Funktionspointer zurückgibt.

Wie auch immer, ich habe Dir mal einen DLL-Rumpf fertig gemacht. Delphi erzeugt übrigens schon einen Teil selbst, Du mußt nur Neu - DLL aufrufen!

-----
library MyDLL;

uses
Windows;

var
SaveExit : Pointer;

procedure LibExit;
begin
// Irgendwas freigeben *
ExitProc := SaveExit; // Kette der Exit-Prozeduren wiederherstellen
end; // LibExit

function MyFunction (lpszParam: LPSTR): Integer; stdcall;
begin
Result := -1
end; // MyFunction

exports
MyFunction;

begin
// Irgendwas initialisieren *
SaveExit := ExitProc; // Kette der Exit-Prozeduren speichern
ExitProc := @LibExit; // Exit-Prozedur LibExit installieren
end.
-----

Die einzige externe Funktion Deiner DLL muß also QueryModule heißen, und einen Zeiger auf einen Record VisInfo zurückliefern, welcher wiederum die internen Funktionspointer enthält.

Damit kannst Du erstmal was basteln, denke ich.

O Love

------------------
"I will not abide disobedience!"
 
  • Sonique Plugins mit Delphi4 Beitrag #4
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Danke schön. So ich bin jetzt dran und setze das nach Delphi um. Allerdings bin ich jetzt auf ein paar Probleme gestoßen!

1. Wie kann ich das hier verstehen? #define VI_WAVEFORM 0x0001

2. Wie kann ich aus einer Funktion einen Pointer machen. Also ich habe ein Objekt und in diesem Objekt gibt es eine Funktion. Nun will ich, wenn diese Funktion aufgerufen wird, das dann eine andere Funktion aufgerufen wird.

3. Was bedeutet "long" in C und was bedeutet das hier: unsigned char Spectrum[2][256];

Danke
cion
 
  • Sonique Plugins mit Delphi4 Beitrag #5
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Danke schön. So ich bin jetzt dran und setze das nach Delphi um. Allerdings bin ich jetzt auf ein paar Probleme gestoßen!

1. Wie kann ich das hier verstehen? #define VI_WAVEFORM 0x0001

2. Wie kann ich aus einer Funktion einen Pointer machen. Also ich habe ein Objekt und in diesem Objekt gibt es eine Funktion. Nun will ich, wenn diese Funktion aufgerufen wird, das dann eine andere Funktion aufgerufen wird.

3. Was bedeutet "long" in C und was bedeutet das hier: unsigned char Spectrum[2][256];

Danke
cion
 
  • Sonique Plugins mit Delphi4 Beitrag #6
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
1. #define VI_WAVEFORM 0x0001 ist nur eine Deklaration für den Präprozessor von C, kannst Du in Delphi so schreiben:

const
VI_WAVEFORM = $0001;

2. Der will im Struct (Record) nur einen Pointer auf eine Funktion haben, die allerdings dann die richtig dimensionierten Parameter (lauf Schnittstelle) haben muß. Schau Dir mal das DLL-Beispiel an, dort wird schon damit rumgespielt. Beim Lib_Exit steht der Klammeraffe davor, damit bekommst Du von der Funktion den Pointer. Im Record VisInfo muß nur dieser Pointer stehen, den Aufruf macht das Programm, welches sich über QueryModule ja diese Pointer holt.

3a. long ist ein 32bit Integer in C.

3b. unsigned char Spectrum[2][256] bedeutet in Delphi:

var
Spectrum: array[0..1, 0..255] of Byte;

O Love

------------------
"I will not abide disobedience!"
 
  • Sonique Plugins mit Delphi4 Beitrag #7
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Danke schön. Wenn ich noch weitere Fragen habe dann melde ich noch!

cion
 
  • Sonique Plugins mit Delphi4 Beitrag #8
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Ja genau an sowas dachte ich: Also ich bin zwar kein Delphi Anfänger, doch habe ich bisher noch nie etwas mit DLLs zu tun gehabt. Die API von Sonique ist auch extrem klein und beinhaltet lediglich ein paar Anweisungen. Naja und die machen mir eben Probleme, weil ich nicht weiß wie ich das in Delphi in DLL form übersetzen soll. Hier ist mal die API:

/*====================================================================================

Sonique Visual Plugin API

(c) 1999 Sonique Team, edited by Rajesh Singh ([email protected])

Notes:

*Video points to memory in 32bit video memory, ie, the following can be used
for your utility and to help your understanding of the pixel format used.

====================================================================================*/

#define ALPHA_MASK 0xFF000000
#define RED_MASK 0x00FF0000
#define GREEN_MASK 0x0000FF00
#define BLUE_MASK 0x000000FF

#define ALPHA_SHIFT 24
#define RED_SHIFT 16
#define GREEN_SHIFT 8
#define BLUE_SHIFT 0

#define AlphaByte(x) (((x))>>ALPHA_SHIFT)
#define RedByte(x) (((x) & RED_MASK)>>RED_SHIFT)
#define GreenByte(x) (((x) & GREEN_MASK)>>GREEN_SHIFT)
#define BlueByte(x) (((x) & BLUE_MASK)>>BLUE_SHIFT)
#define MakeColour(a, r, g, b) (((a)>>ALPHA_SHIFT) + ((r & RED_MASK)>>RED_SHIFT) + ((g & GREEN_MASK)>>GREEN_SHIFT) + ((b & BLUE_MASK)>>BLUE_SHIFT))

#ifndef DLLEXPORT
#define DLLEXPORT __declspec( dllexport )
#endif

#define VI_WAVEFORM 0x0001 /* set if you need the waveform */
#define VI_SPECTRUM 0x0002 /* set if you need the FFT values */
#define SONIQUEVISPROC 0x0004 /* set if you want to allow Soniques user pref vis to affect your vis
for example - blur, smoke and zoom */
#pragma pack (push, 8)

typedef struct
{
unsigned long MillSec; /* Sonique sets this to the time stamp of end this block of data */
unsigned char Waveform[2][512]; /* Sonique sets this to the PCM data being outputted at this time */
unsigned char Spectrum[2][256]; /* Sonique sets this to a lowfidely version of the spectrum data
being outputted at this time
0 (bass) -> 255 (treble) */
}
VisData;

typedef struct
{
unsigned long Reserved; /* Reserved */

char *PluginName; /* Name of the Plug-In */
long lRequired; /* Which flags (VI_WAVEFORM|VI_SPECTRUM|SONIQUEVISPROC) to set */
void (*Initialize)(void); /* Called before Plug-In has to Render */
BOOL (*Render)( unsigned long *Video, int width, int height, int pitch, VisData* pVD); /* Function called to Render */
BOOL (*SaveSettings)( char* FileName ); /* Function called to Save the Settings */
BOOL (*OpenSettings)( char* FileName ); /* Function called to Open the Settings */
}
VisInfo;

#pragma pack (pop, 8)

DLLEXPORT VisInfo* QueryModule(void); /* exported DLL */

Ich hoffe ihr könnt mir da weiterhelfen...
Danke

cion
 
Thema:

Sonique Plugins mit Delphi4

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.181
Beiträge
1.579.177
Mitglieder
55.880
Neuestes Mitglied
Hahn
Oben