begin process at 2012 05 29 13:35:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Plugins WinAMP dans Visual Basic (toutes catégories de plugins) via un ActiveX en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Plugins WinAMP dans Visual Basic (toutes catégories de plugins) via un ActiveX en C

dimanche 28 mars 2004 à 14:36:31 | Plugins WinAMP dans Visual Basic (toutes catégories de plugins) via un ActiveX en C

PaTaTe

Membre Club
Salut tout le monde ;)

J'avais déjà posé la question mais sans réponse alors je recommence.

Je cherche une (ou plusieurs) personne(s) étant prete à m'aider dans le devellopement d'un controle ActiveX (le C est avec Delphi les seuls language permettant cela il me semble) pour gérer les plugins IN, OUT, VIS GEN, ENC et DSP.

Des ActiveX de ce genre existe déjà comme ActiVIS pour les plugins graphiques et WinAMP Plug X (payant) pour les plugins IN/OUT (et DSP pour la version enregistrée si je ne me trompe pas).

Mon but serait de faire un OCX unique pour tous les plugins et sourtout gratuit et en Open Source. Je ne connais pas grand chose au C mais avec un peu d'aide, tout est possible.

Si vous etes pret à m'aider dans ce projet, merci de me le faire savoir ici. Si vous avez quelques adresses pour m'aider ca serait sympa.

Pour finir je met le code que l'on m'a donné comme base

Pour le plugin d'entrée, le procédure exportée est:
Code:
In_Module* winampGetInModule2();

Pour les plugin de sortie, c'est:
Code:
Out_Module * winampGetOutModule()


Un exemple pour charger un plugin d'entrée est:
Code:

#include <windows.h>
#include "IN2.H"

In_Module* loadPlugin(char* filename){
HINSTANCE plugdll;
In_Module* (*winampGetInModule2)();
In_Module* tmp;

plugdll=(HINSTANCE)LoadLibrary(infilename);
if(plugdll)
winampGetInModule2=(FARPROC)GetProcAddress(plugdll,"winampGetInModule2");
if(winampGetInModule2){
tmp=winampGetModule2();
tmp->hMainWindow=NULL; //fournir un HWND valide ici
tmp->hDllInstance=plugdll;
tmp->outMod=NULL; //on peut filer un pointeur sur un plugin de sortie ici;
tmp->Init();
return tmp;
}else
return NULL;
}

void unloadPlugin(In_Module* plugin){
plugin->Quit();
FreeLibrary(plugin->hDllInstance);
}



Cet exemple n'est certainement pas complet, mais devrait a peu pres suffir! Pour charger/décharger les plugins de sortie, c'est a peu pres la meme chose!

Pour finir les headers (signatures pour In_Module et Out_module). Pour IN2.H:
Code:

#include "out.h"

// note: exported symbol is now winampGetInModule2.

#define IN_VER 0x100

typedef struct
{
int version; // module type (IN_VER)
char *description; // description of module, with version string

HWND hMainWindow; // winamp's main window (filled in by winamp)
HINSTANCE hDllInstance; // DLL instance handle (Also filled in by winamp)

char *FileExtensions; // "mp3\0Layer 3 MPEG\0mp2\0Layer 2 MPEG\0mpg\0Layer 1 MPEG\0"
// May be altered from Config, so the user can select what they want

int is_seekable; // is this stream seekable?
int UsesOutputPlug; // does this plug-in use the output plug-ins? (musn't ever change, ever :)

void (*Config)(HWND hwndParent); // configuration dialog
void (*About)(HWND hwndParent); // about dialog

void (*Init)(); // called at program init
void (*Quit)(); // called at program quit

void (*GetFileInfo)(char *file, char *title, int *length_in_ms); // if file == NULL, current playing is used
int (*InfoBox)(char *file, HWND hwndParent);

int (*IsOurFile)(char *fn); // called before extension checks, to allow detection of mms://, etc
// playback stuff
int (*Play)(char *fn); // return zero on success, -1 on file-not-found, some other value on other (stopping winamp) error
void (*Pause)(); // pause stream
void (*UnPause)(); // unpause stream
int (*IsPaused)(); // ispaused? return 1 if paused, 0 if not
void (*Stop)(); // stop (unload) stream

// time stuff
int (*GetLength)(); // get length in ms
int (*GetOutputTime)(); // returns current output time in ms. (usually returns outMod->GetOutputTime()
void (*SetOutputTime)(int time_in_ms); // seeks to point in stream (in ms). Usually you signal yoru thread to seek, which seeks and calls outMod->Flush()..

// volume stuff
void (*SetVolume)(int volume); // from 0 to 255.. usually just call outMod->SetVolume
void (*SetPan)(int pan); // from -127 to 127.. usually just call outMod->SetPan

// in-window builtin vis stuff

void (*SAVSAInit)(int maxlatency_in_ms, int srate); // call once in Play(). maxlatency_in_ms should be the value returned from outMod->Open()
// call after opening audio device with max latency in ms and samplerate
void (*SAVSADeInit)(); // call in Stop()


// simple vis supplying mode
void (*SAAddPCMData)(void *PCMData, int nch, int bps, int timestamp);
// sets the spec data directly from PCM data
// quick and easy way to get vis working :)
// needs at least 576 samples :)

// advanced vis supplying mode, only use if you're cool. Use SAAddPCMData for most stuff.
int (*SAGetMode)(); // gets csa (the current type (4=ws,2=osc,1=spec))
// use when calling SAAdd()
void (*SAAdd)(void *data, int timestamp, int csa); // sets the spec data, filled in by winamp


// vis stuff (plug-in)
// simple vis supplying mode
void (*VSAAddPCMData)(void *PCMData, int nch, int bps, int timestamp); // sets the vis data directly from PCM data
// quick and easy way to get vis working :)
// needs at least 576 samples :)

// advanced vis supplying mode, only use if you're cool. Use VSAAddPCMData for most stuff.
int (*VSAGetMode)(int *specNch, int *waveNch); // use to figure out what to give to VSAAdd
void (*VSAAdd)(void *data, int timestamp); // filled in by winamp, called by plug-in


// call this in Play() to tell the vis plug-ins the current output params.
void (*VSASetInfo)(int nch, int srate);


// dsp plug-in processing:
// (filled in by winamp, called by input plug)

// returns 1 if active (which means that the number of samples returned by dsp_dosamples
// could be greater than went in.. Use it to estimate if you'll have enough room in the
// output buffer
int (*dsp_isactive)();

// returns number of samples to output. This can be as much as twice numsamples.
// be sure to allocate enough buffer for samples, then.
int (*dsp_dosamples)(short int *samples, int numsamples, int bps, int nch, int srate);


// eq stuff
void (*EQSet)(int on, char data[10], int preamp); // 0-64 each, 31 is +0, 0 is +12, 63 is -12. Do nothing to ignore.

// info setting (filled in by winamp)
void (*SetInfo)(int bitrate, int srate, int stereo, int synched); // if -1, changes ignored? :)

Out_Module *outMod; // filled in by winamp, optionally used :)
} In_Module;

et OUT.H:
Code:
#define OUT_VER 0x10

typedef struct
{
int version; // module version (OUT_VER)
char *description; // description of module, with version string
int id; // module id. each input module gets its own. non-nullsoft modules should
// be >= 65536.

HWND hMainWindow; // winamp's main window (filled in by winamp)
HINSTANCE hDllInstance; // DLL instance handle (filled in by winamp)

void (*Config)(HWND hwndParent); // configuration dialog
void (*About)(HWND hwndParent); // about dialog

void (*Init)(); // called when loaded
void (*Quit)(); // called when unloaded

int (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms);
// returns >=0 on success, <0 on failure
// NOTENOTENOTE: bufferlenms and prebufferms are ignored in most if not all output plug-ins.
// ... so don't expect the max latency returned to be what you asked for.
// returns max latency in ms (0 for diskwriters, etc)
// bufferlenms and prebufferms must be in ms. 0 to use defaults.
// prebufferms must be <= bufferlenms

void (*Close)(); // close the ol' output device.

int (*Write)(char *buf, int len);
// 0 on success. Len == bytes to write (<= 8192 always). buf is straight audio data.
// 1 returns not able to write (yet). Non-blocking, always.

int (*CanWrite)(); // returns number of bytes possible to write at a given time.
// Never will decrease unless you call Write (or Close, heh)

int (*IsPlaying)(); // non0 if output is still going or if data in buffers waiting to be
// written (i.e. closing while IsPlaying() returns 1 would truncate the song

int (*Pause)(int pause); // returns previous pause state

void (*SetVolume)(int volume); // volume is 0-255
void (*SetPan)(int pan); // pan is -128 to 128

void (*Flush)(int t); // flushes buffers and restarts output at time t (in ms)
// (used for seeking)

int (*GetOutputTime)(); // returns played time in MS
int (*GetWrittenTime)(); // returns time written in MS (used for synching up vis stuff)

} Out_Module;


Le tout est de l'adapter en OCX et de l'approfondir.

Merci de votre aide :)

@++

[PaTaTe]


Cette discussion est classée dans : int, module, void, to, in


Répondre à ce message

Sujets en rapport avec ce message

Probleme de tableau [ par manta7 ] Bonjour, j'ai un petit problème avec la compilationde ce code : int *t; t = malloc(B * sizeof (int)); Je suis sous Microsoft Visual C++ 6 mais je pr [C et Ncurses] Déplacement de curseur et Insertion de texte [ par gulix ] Dans le cadre d'un projet, je dois développer un éditeur de texte de type Vi. Pour cela, j'utilise la bibliothèque ncurses. J'arrive ainsi à gérer san Masquer console erreur [ par lombredudragon ] Voila j'ai un souci avec ce code =>http://www.cppfrance.com/codes/MASQUER_EFFICACEMENT_LA_CONSOLE_/22787.aspxje compile avec Vc++ et j'ai cette erreur le mode graphique sur dos [ par alen ] alb#include#include#include#include#includeint xgclot,xdclot,yh Help.... probleme avec un programme de tri de char [ par ratp ] Es ce que vous pouvez m'aider. j'ai réaliser un programme qui normalement doit permettre de trier les caracteres. mais sa ne marche pas. merci de m'ai j'ai besoin d'aide -> flushall() [ par unionx ] salut tout le monde 1- voila mon script #include int main(void) { FILE *stream; stream = fopen("DUMMY.FIL", "w"); printf("%d streams [debutant]Operation de chaine encore :s [ par firemax ] Bonjour Certain reconaitrons ce code (surtout vecchio56) mais voila ca marche toujours pas et je ne comprend pas :'( Please helllppp Code : #in Errreur [ par RM50Man ] Mon code ne marche pas: Le compilateur devcpp me met build error 1 #include /* contient déjà et */ #include #include #include void reset Delay en decimal [ par gaspard83 ] Bonjour à tous, Je débute tout juste le C++ et me familiarise avec C++ Builder. Je cherche à activer les leds de mon clavier avec ce code, mais le tim sa_sigaction 3eme paramètre [ par falcon971 ] Bonjour,je cherche comment faire pour transmettre le troisième paramètre au handler du sigaction, j'ai cherché un peu partout mais aucune réponse :str


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales