Utiliser les plugins Winamp [Delphi/C++] - Programmation
Marsh Posté le 14-01-2002 à 10:24:00
C'est marrant, mais je suis EXACTEMENT dans le meme cas que toi
Si tu réussi ou si je réussi je te mail ce que j'ai fait, mais en attendant je cherche a savoir comment envoyer mon petit buffer de pcm data (quelle taille ? dans un callback ou un timer ? )
Marsh Posté le 14-01-2002 à 10:41:36
D'apres ce que j'ai compris, il faut utiliser un timer avec comme interval le latencyMs. Et exactement comme toi, je vois pas du tout quoi faire avec le PCMData.
J'ai posté le même message sur le forum Winamp on verra bien... Content de pas etre tout seul a vouloir faire ça !
Marsh Posté le 14-01-2002 à 14:02:42
ah déja je viens de comprendre pour les inputs. Enfin si l'on veut, comme moi, passer outre l'utilisation des output. Le truc c'est de filler la structure Out_Module par les datas que l'on a a envoyer et de passer cette struct a l'input qui gerera tout le reste (seeking, pause ...). C'est ce que m'a dit Ian Luck, l'auteur de la librairie BASS, je lui ai demandé pour les autres types de plugins, mais il doit avoir l'accord de nullsoft pour ca (c po gagné en gros ...).
Pour les vis, je viens de penser a un truc : et si on utilisait les FFT pour se faire un 'tit buffer, et pourquoi pas de 576 floats ? Ca peut etre une solution, d'autant que j'utilise FMOD qui dispose de cette routine (pas bien dur a faire sans cette librairie de toute facon).
La je suis au boulot, je vais d'abord voir pour les vis et ensuite les inputs.
Note : cdex supporte les plugins inputs en standard, il peut etre interessant de jeter un coup d'oeil sur ses sources
Marsh Posté le 15-01-2002 à 06:45:54
J'ai rien trouvé de mon coté: ça bloque
Marsh Posté le 15-01-2002 à 13:40:13
ReplyMarsh Posté le 15-01-2002 à 13:55:51
j'ai cherché et j'ai rien trouvé non plus
Marsh Posté le 15-01-2002 à 14:33:27
tu as vu, il faut recuperer le pointer PCMData et le mettre dans l'array WaveFormData... Tu doit savoir faire ça toi non ?
Marsh Posté le 15-01-2002 à 14:39:19
heu t'as pas un exemple plus parlant ?
Marsh Posté le 15-01-2002 à 16:15:22
Yopla ! Me revoila, j'ai essayé hier avec les vis, en recupérant 512 floats en FFT (512 pas 576 pour l'instant) le tout dans un timer a 10, ca fait bien bouger le plugin mais pas aussi bien que le fait winamp. C'est assez bizarre je trouve ... Par contre, la meme procedure dans un callback accélere (logique) nettement la rapidité pour etre aussi fluide qu'avec winamp. Maintenant, le truc c'est de savoir si mon probleme vient du fait que je perd en castant de float vers unsigned char ou est ce vraiement les données pcm (buffer d unsigned char de 576) qu'il veut ? J'ai commencé hier avec un buffer pcm (576 cette fois), mais ca plante pour l'instant (mes donnés sont en ring), je vous tient au courant.
Marsh Posté le 16-01-2002 à 07:30:37
Oula bon je vais attendre un peu que tu trouves car là je suis largué... Je suis debutant en Delphi...
Sur le forum de Winamp pas une seule reponse, j'ai ecrit a Justin Frankel j'attend la reponse.
Marsh Posté le 16-01-2002 à 09:33:13
t'inquiète pas, moi je suis aussi largué
j'ai jamais manipulé de données vidéo/audio en programmation, sauf un wav en assembleur
Marsh Posté le 17-01-2002 à 07:34:04
KarLKoX: tu peux pas me filer ton code comme tu as dejà avançé plus que moi
Marsh Posté le 17-01-2002 à 07:50:47
KarLKoX a écrit a écrit : Yopla ! Me revoila, j'ai essayé hier avec les vis, en recupérant 512 floats en FFT (512 pas 576 pour l'instant) le tout dans un timer a 10, ca fait bien bouger le plugin mais pas aussi bien que le fait winamp. C'est assez bizarre je trouve ... Par contre, la meme procedure dans un callback accélere (logique) nettement la rapidité pour etre aussi fluide qu'avec winamp. Maintenant, le truc c'est de savoir si mon probleme vient du fait que je perd en castant de float vers unsigned char ou est ce vraiement les données pcm (buffer d unsigned char de 576) qu'il veut ? J'ai commencé hier avec un buffer pcm (576 cette fois), mais ca plante pour l'instant (mes donnés sont en ring), je vous tient au courant. |
Quéquidilui ?
Marsh Posté le 18-01-2002 à 06:49:46
ReplyMarsh Posté le 18-01-2002 à 09:19:11
un peu oqp ces temps ci, désolé.
Pour les sources, pas de probleme, doit y avoir pas beaucoup plus que toi mais on sait jamais. Par contre, il faut que je recode tout, parce que la, c'est carrément le bordel.
Sinon pour ce que j'ai dit plus haut, on dirait que ca a l'air correct car je viens de regarder les sources d'xmms (un clone de winamp pour les *nix), il utilise les fft pour calculer la fréquence mais en tenant compte du fait que la source soit mono ou stéréo. Ca vaut le coup d'oeil de regarder un peu la dedans ...
Marsh Posté le 18-01-2002 à 09:26:47
Ok, mon email c'est blacksun @ powerdivx.com (marre du spam)
J'ai pas encore essayer d'utiliser les DSP mais ça va plus trop tarder. Sinon tu as reçu une reponse de Nullsoft pour pouvoir utiliser leur framework ?
Marsh Posté le 18-01-2002 à 11:10:40
non, j'ai jamais recu de réponse, malgré mes 2 mails. Je comprend qu'ils recoivent pas mal de mails, mais pour un truc aussi important, je pense qu'ils auraient pu donner une petite réponse ...
Marsh Posté le 18-01-2002 à 11:24:24
Je crois qu'on va faire sans c'est leur faute ils repondent pas... Une fois qu'ils realiseront ce qu'on a fait là ils vont prendre contact avec nous et on pourra discuter...
Marsh Posté le 18-01-2002 à 11:28:36
Ah oui si c'est possible, tu peux m'envoyer tes sources avant samedi 11h du matin, car apres je part en week end et c'est le seul moment où je peux coder tranquillement. Si tu peux pas tu peux tjrs m'envoyer ce que tu as dejà fait ça m'aiderais bcp.
Marsh Posté le 18-01-2002 à 15:28:33
BlackSun, matte donc les sources des composants qui utilisent winamp (tel que certain BU ou d'autres dispo sur le web)...
Marsh Posté le 18-01-2002 à 15:33:05
http://www.torry.net/samples_plugins.htm
http://www.csh.rit.edu/~jon/code/delphi/dammit.html
http://www.torry.net/util_plugin.htm
http://www.stnd.de/programming/tut [...] nplug.html
http://www.antenet.fi/irassistant/download.html
http://www.sulaco.co.za/winamp_tut.htm
http://www.cosorio.cjb.net/
Bon, il y en as plein d'autres sur le web au taff mon vieux !!!
Marsh Posté le 19-01-2002 à 07:46:51
Merci mais ça m'aide pas du tout, là ou je bloque c'est quand il faut convertir un pointer PCMData...
Marsh Posté le 19-01-2002 à 21:25:38
Blacksun, je sais pas du tout j'ai même pas regardé comment ça marchais, mais je suis sûr que dans les exemples que je te donne tu as l'explication... Ils y arrivent eux, alors ça doit pas être sorcier
Marsh Posté le 21-01-2002 à 02:17:38
BlackSunSoft>excuse moi, je n'ai pas eu beaucoup de temps ce week end, mais j'ai commencé cette nuit, je te l'envoye des que possible. (je traine a cause d'un nouveau truc que j'ai compris avec les vis y a une heure
Bruce>je ne pense pas que tu as compris exactement ce que l'on cherche : on ne cherche pas a faire des plugins, mais a se substituer a winamp. On veut ETRE winamp pour pouvoir gérer, tout comme lui, les plugins, et non faire des plugins.
Marsh Posté le 21-01-2002 à 03:43:05
Bha oui ça j'avais pigé...
Mais dans ces liens il y as bien ça non ? Ou alors g surfé trop vite
Faudrais demander à un programmeur d'un soft qui fait déjà ça... Par exemple à BST qui as fait BSplayer qui le fait déjà... En plus il code en Delphi
Marsh Posté le 21-01-2002 à 07:48:44
Oui mais BST n'as pas refait tout le framework, il s'occupe seulement du DSP. Le plus compliqué c'est les vis, le reste c'etait fastoche
J'attend le resultat avec impatience
Marsh Posté le 21-01-2002 à 10:38:36
bruce>c'est exactement ce que j'ai fait, j'attend toujours sa réponse ... (j'ai son skinneur qui me dit qu'il l'a prévenu pourtant).
BlackSunSoft>bein le résultat est bof mais bon, j'ai toujours mon petit probleme de fenetre. Mais c'est en bonne voie, je m'y remet des ce soir !
Marsh Posté le 21-01-2002 à 13:20:35
Un probleme de fenetre ? Tiens je vais aller voir sur le forum de Winamp voir s'il y a du new
Marsh Posté le 21-01-2002 à 14:23:49
Vi, dans la strucutre de WinampVisModule, on voit qu'il veut l'hWnd parent, mais on ne peut pas donner celui de notre fenetre principale, car lors de l'arret du plugin, la fonction "Quit" est appelé, elle aura pour conséquence de delete l'hWnd qui lui est passé en paramettre dans la structure, et donc, notre fenetre. Il faut donc, "émuler" une fenetre winamp, de la meme classe ( "winamp 1.x". Pour ma part j'en fait une, la plus basique possible, sans bordure ou quoi que ce soit, qui servira de fenetre parente. Le probleme, c'est qu'a l'init, la fonction "Render" me renvoye 1. Conséquence : ma fenetre apparait puis disparait immédiattement. Voila mon petit probleme...
Marsh Posté le 24-01-2002 à 14:16:34
Coucou, i am not dead
C'est juste que je suis assez occupé ces temps ci ... Bon pour revenir au sujet de départ, le probleme de la fenetre est résolue, et j'ai, roulement de tambour, réussi a envoyer des donnés plus ou moins correctes !!
Le plugin bouge assez bien, ca suit la musique au poil mais il y a quelques soucis encore :
1 - ca va trop vite (non non, ca vient pas de mon code),
2 - par moment, le plugin ralentie, puis repart de plus belle, (fragmentation de la mémoire ? car le code est bourrée en fuite mémoire ,
Pis c'est tout en fait. Le truc, c'est que j'ai utilisé le double buffering : dans un callback, je fill un buffer de 2*576 de pcm data (signed short que je convertie en 16 bits mono puis en de 16 a 8 bits), et dans un timer, qui est réglé suivant le DelayMS, je render le tout. Vitesse assuré !
Bon bein maintenant, faut que je nettoye un peu le merdier parce que la ca fait un peu Tchernobyle
Note1 : il se pourra qu'en appuyant sur le bouton configure, ca plante. J'ai la flemme de voir ca pour le moment, je préfere me concentrer sur l'amélioration du rendu du plugin.
Note2 : si je me débrouille bien, tu devrais recevoir ca ce week end
Marsh Posté le 24-01-2002 à 22:55:55
Tu as du recevoir un petit mail normalement, si c'est pas le cas, prévient moi
Marsh Posté le 25-01-2002 à 09:56:08
Thanks, tu as utilisé le MaxlatencyMs pour le timer ?
Marsh Posté le 25-01-2002 à 18:51:47
nan, en utilisant delayMs, mais j'ai remarqué que delayMs et latencyMs ont presque toujours (toujours sur tout les plugins que j'ai vu) la meme valeur.
Marsh Posté le 26-01-2002 à 10:18:42
J'ai des blemes pour le convertir en Delphi, comment je vais convertir de 16 an 8 bits comme cnv16to8 ?
Marsh Posté le 26-01-2002 à 17:49:06
Ouhla ! Je programme pas en Delphi, je pourrais pas te dire, y a pas du bit shifting en Delphi ( shl, shr ...) ?
Marsh Posté le 26-01-2002 à 18:00:09
oui, shr et shl existent en delphi
z := x shr y;
z reçoit x décalé de y bits sur la droite
Marsh Posté le 28-01-2002 à 14:47:14
Comment on separe les deux canaux ? J'ai l'impression que c'es ça mon bleme
Marsh Posté le 30-01-2002 à 14:55:57
Bon ça marche mais le plugins va trop vite et fini avant la fin de la zic, tout en etant correct...
Marsh Posté le 30-01-2002 à 15:54:15
Pour la vitesse, si on met un Delay a 50 Ms, ca marche au poil, par contre, je suis pas allé jusqu'a la fin d'une zik, je voit ca se soir (pour les spectrum, j'ai fait un truc tout naz mais ca bouge plus ou moins bien ... work in progress)
Marsh Posté le 14-01-2002 à 08:22:39
J'aurais besoin d'aide sur ce coup là je bloque. J'arrive a initialiser le plugin in/out/vis mais je ne vois pas comment envoyer les infos au plugins vis.
A cette Url vous trouverez mon source basé sur le travail de Snaker.
http://www.divx-digest.net/blacksu [...] is_app.zip
---------------
PowerDivX NextGen 3.12 sur: http://www.powerdivx.com