Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Bonjour.

Je ne suis pas nouveau sur ces forums, ayant déja un tout petit peu suivi la discussion autour d'un client IRC en Windev (tout a fait possible mais dur quand meme ;))

Il y a de ca quasiment une année, j'ai commencé un nouveau lecteur audio : Nameless Player. A la base cela devait etre un clone d'Amarok, mais j'ai vite eu envie de faire ce que je veux, et donc de priviligier le systeme de bibliothèque, donc un mélange Amarok + iTunes.

Ayant vite compris les limites des fonctions MCIxx j'ai donc décidé de recommencer, mais en me basant sur une implantation de BASS en classe open source (en Windev).

Due aux regles de distribution BASS (le projet ne doit pas etre payant) et que j'utilise une classe Open Source, vous l'aurez deviné, le projet sera lui mème Open Source (donc beaucoup de nettoyage de code a faire :p) du aussi au fait que je suis un partisan de ce mode de fonctionnement.

Si vous voulez un screenshot c'est par ici. (Oui, l'icone principale à une étrange ressemblance avec celle de WD 10 , ayant un eu un grand manque d'inspiration ^^')

Si vous voulez plus d'informations et des vidéos, ca se passe (forum Anglais) la.

Je suis meme allé jusqu'a faire une interface de mise a jour automatique des fichiers Hyper File pour ne pas avoir a fournir d'installeur a chaque mise à jour.
Si vous lisez ca,bravo vous avez presque tout lu ^^

Mon probleme est donc la :
Etant le seul sur ce projet, il y a certaines choses dont je n'arrive pas a venir a bout.

Il me faudrait un peu d'aide pour faire fonctionner un égaliseur je ne sais plus combien de bandes (8 ou 10 je crois) avec bass_fx , et je n'arrive pas a passer une structure correcte.
Quand je pourrais acceder a mon code, je posterais ici ce qui me pose problème.

Je cherche aussi a afficher une visualisation simple mais je n'arrive pas a traduire le code :( (je le posterais ici aussi)

Par contre, un des problemes les plus importants est que l'interface une fois passée en fenetre détourée est tres lente a se réafficher quand on passe la fenetre au premier plan, chose qui ne m'etais jamais arrivée auparavant.

Comme si cela ne suffisait pas, je dois refaire tout le systeme de bibliothèque car mon code (datant du premier mois de programattion de NL) souffre d'un gros manque de performance.

J'en profite pour signaler un bug de Windev : Si on change trop des jauges (en l'occurence les jauges de volume) avec un style Windows, elles devienderont noires, ainsi que toutes celles du programme, meme dans une genetre qui ne sera ouverte qu'apres ! Seul moyen de revenir a la normale, redémarrer le programme :/

PS : Si l'un d'autre vous a une idée pour faire des fenetres dites "layered" donc avec alpha-blending sous windev en conservant l'ihm faite sous l'éditeur, je suis preneur ;)

Merci d'avoir tout lu,
Dream_Team

Contribution le : 24/06/2007 18:26
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Projet très interressant et tenteront d'apporter notre aide à la hauteur de nos moyens.

Bravo.

Contribution le : 25/06/2007 12:40
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Developpeur WDF
Inscrit:
24/11/2003 10:38
De Dieppe
Post(s): 118
Je trouve aussi tout cela tres prometteur, malheureusement la musique reste un domaine auquel je n'ai pas touché en windev.

Si il y a moyen d'avoir un exe pour voir tout cela tourner je suis preneur.

Contribution le : 25/06/2007 14:10
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Y a t'il un moyen d'importer des descriptions de commandes ? Un peu a la maniere d'un composant.

Mon systeme de plugins fonctionne avec un mode dll (windev ne peux malheureusement pas génerer de dll) et un mode wdl (je charge une bibliothèque et je lui attribue un GUID, ensuite je compile dynamiquement une ligne de code par exemple :"OuvreSoeur(<GUID>,<Handle de la fenetre principale)" et tout les dialogues se font par messages windows.

Or c'est un facon peu élégante de programmer des plugins est pas simple du tout (ecrasement des procédures -> faire attention a donner un nom unique a sa fenetre (genre WADSP(le nom du plugin)_08FAD pour etre tranquille)

Je ne sais pas me servir des composants mais il faudrait pouvoir faire comme des plugins dll classiques : j'apelle une fonction (dont j'imposerai le nom au programmeurs, comme NL_PluginInit() ou NL_PluginName() pour prendre so nom), ce qui me permetterai de me passer totalement des messages windows et donc avoir moins de lag (PostMessage n'est pas immédiat, quand on applique un effet sonore a chaque chanson, on entends la permiere seconde sans effet.)

Quelqu'un a-t-il une idée sur comment je pourrais m'y prendre ? (J'ai déja la base du systeme en classes)
Seule la compatibilité Windev me pose problème ici, car Windev ne peux malheureusement pas génerer des DLL.

Question annexe etant reliée a celle plus haut : Est-il possible d'importer des descripteurs de fonctions (equivalent d'un fichier .h en C/C++) avec juste le nom et les parametres pour ne pas avoir d'erreur de compilation a fin d'obtenir ce qu'il faut depuis le programme (lire directement la variable de la fenetre principale (possible vu que c'est un wdl) avec par exemple EnLecture = Main.Lecteur:LectureEnCours() m'ennuie) ?

Contribution le : 27/06/2007 14:24
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
salut, je repond juste pour cette partie:

PS : Si l'un d'autre vous a une idée pour faire des fenetres dites "layered" donc avec alpha-blending sous windev en conservant l'ihm faite sous l'éditeur, je suis preneur ;)

Il existe une DLL tres tres impressionnante pour les graphiques que l'on trouve sur le site de "ZAP Solution", elle est payante mais une version gratuite existe, je te conseille d'y jeter un coup d'oeil, tu va etre impressionné.

en gros ca gere les image, graphique, la 3D openGL, transparence, calque, les couleur AGRB, le ZORDER des oblets graphiques, bref, regarde les exemples qui se trouve sur le site, et tu verra par toi meme.

Contribution le : 28/06/2007 09:27
_________________
be aware
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Merci pour la réponse
J'ai déja utilisé cette DLL, mais malheureusement elle affiche toujours une petite fenetre comme quoi elle n'est pas enregistrée au debut du programme ...

Mais elle ne permet pas de faire des fenetres layered facilement, car selon MSDN, pour avoir une fenetre avec alpha blending, il faut intercepter le message WM_PAINT et repeindre toute la fenetre dans son code. Ainsi, on doit reprogrammer toute l'ihm, je perderai ainsi tout les avantages gagnés avec l'editeur d'ihm windev, plus je deverai refaire une grande partie de mon code.


Cette DLL m'a été utile quand meme pour afficher du texte et des images sur un fenetre entierement glass sous Vista. Je me suis apercu que l'on devait utiliser drawimagerotated (ou quelquechose comme ca) et que des qu'il se passait un peu quelquechose (sortie de l'ecran, une appli rebelle qui passe dessus) faisait disparaitre l'image. Don't obligatoire de la redessiner a chaque mouvement et tout, pas pratique :/

Merci quand meme ;)

EDIT : Pour l'externe c'etait simple : EXTERNE xD (cela ne marche pas avec les descripteurs de structures)

Pour changer la couleur d'un libellé c'est bien NomLibelle..Couleur=iRougeClair par exemple ?

Chez moi cela ne marche que comme ca :
TmpLibP est une Police=NomLibelle..Police
NomLibelle..Police=TmpLibP
NomLibelle..Couleur=iRougeClair

NomLibelle..Couleur=iRougeClair tout seul ne marche pas.

De plus, j'ai bougé dans le code des déclarations globales de la fenetre TmpLibP est une Police=NomLibelle..Police et NomLibelle..Police=TmpLibP

La procédure va etre appelée et le libellé va changer de couleur sans probleme mais une seule fois.

Au début de la procédure je rajoute NomLibelle..Police=TmpLibP et tout va comme sur des roulettes.

J'ai trouvé d'ou cela venait : de l'ombre floue. Sans cette ombre tout fonctionne normalement avec ..Couleur, sinon il faut utiliser la méthode plus haut. N'etant pas un inconvénient majeur je vais garder l'ombre flou parceque c'est quand meme joli ^^

Contribution le : 28/06/2007 10:39

Edité par Dream_Team sur 28/6/2007 10:58:59
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
Ok, je ne savais pas pour l'alpha, sinon la version 53P de WD11 (je ne sais pas pour les anterieurs, a verifier donc) permet de gerer la transparence des fenetres ET des champs indépendament, et non plus comme avant ou si la transparence de la fenetre changeait, celle des champs changeait également.

Contribution le : 28/06/2007 12:00
_________________
be aware
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Je savais que la transparence etait gérée pour les champs mais pas pour la fenetre aussi indépendamment, j'espere avoir le vrai equivalent d'une opacité car le fond transparent qu'offre windev ajoute un flou derriere qui est malheureusement décalé par rapport au reste de l'ecran (oO), je veux dire si on coupe une icone en 2 avec une fenetre transparente windev, ca sera décalé vers la droite et que des qu'on tape dans les hautes résolutions (1680x1050 ici) ca rame beaucoup, cela n'utilisant ni gdi+ ni le GPU, si seulement cela pouvait etre aussi bien que le nouveau caroussel en gdi+ :D

Je vais mettre a jour et voir ce que ca donne. Au passage l'opacité des champs ne marche pas comme prévu chez moi, ca marche de temps en temps, mais dans une machine virtuelle sans acceleration 3d ca ne fonctionne pas, j'ai donc peur pour ceux qui auront des vieux drivers video ou des puces graphiques de base.je vais essayer d'activer DirectX 8 dans la machine virtuelle et on verra bien.

Par contre au TDF tech, j'ai vu que la table entiere etait transparente, mais chez moi seules les lignes vides le sont :/ Une idée ?

Contribution le : 28/06/2007 15:33
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
29/06/2004 09:31
De Paris
Post(s): 40
Un equaliseur n'est pas très dur à faire avec Bass:

Déclare une classe du style

C_DSPEQ est une classe
	lBand est un entier
	lFreq est un entier
	fBandwidth est un réel sur 4 octets
	fQ est un réel sur 4 octets
	fCenter est un réel sur 4 octets
	fGain est un réel sur 4 octets
	lChannel est un entier
FIN


Ensuite active ou pas l'equaliseur ici pour une equaliseur 10 bandes:

PROCEDURE ActiveEQ(pbActiver, peStream, pePriorité=0)

SI peStream=0 ALORS
	:bEQisActive=pbActiver
	RENVOYER Vrai
FIN

SI pbActiver ALORS
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Set,peStream,CBASS::BASS_FX_DSPFX_PEAKEQ,pePriorité)
	:bEQisActive=Vrai
SINON
	API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_Remove, peStream, CBASS::BASS_FX_DSPFX_PEAKEQ)
	:bEQisActive=Faux
FIN

RENVOYER Vrai


Pour modifier les valeurs des bandes déclare 10 potar et dans le code de modification de chanque potar fait appel au code suivant :

gpBass:BASS_ChannelGetAttributes(geStream,&gpDSP:EQ:lFreq,Null,Null)

gpDSP:EQ:fQ=0
gpDSP:EQ:fBandwidth=1
gpDSP:EQ:lChannel=-1

gpDSP:EQ:lBand=0
gpDSP:EQ:fCenter=60
gpDSP:EQ:fGain=-EqualizerPotar1/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=1
gpDSP:EQ:fCenter=170
gpDSP:EQ:fGain=-EqualizerPotar2/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=2
gpDSP:EQ:fCenter=310
gpDSP:EQ:fGain=-EqualizerPotar3/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=3
gpDSP:EQ:fCenter=600
gpDSP:EQ:fGain=-EqualizerPotar4/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=4
gpDSP:EQ:fCenter=1000
gpDSP:EQ:fGain=-EqualizerPotar5/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=5
gpDSP:EQ:fCenter=3000
gpDSP:EQ:fGain=-EqualizerPotar6/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=6
gpDSP:EQ:fCenter=6000
gpDSP:EQ:fGain=-EqualizerPotar7/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=7
gpDSP:EQ:fCenter=12000
gpDSP:EQ:fGain=-EqualizerPotar8/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=8
gpDSP:EQ:fCenter=14000
gpDSP:EQ:fGain=-EqualizerPotar9/10
gpDSP:SetEQ(geStream)

gpDSP:EQ:lBand=9
gpDSP:EQ:fCenter=16000
gpDSP:EQ:fGain=-EqualizerPotar10/10
gpDSP:SetEQ(geStream)


Où SetEQ est de la forme:

SI peStream<>0 _ET_ API(CBass::BASS_FXDLL,CBass::_BASS_FX_DSP_SetParameters,peStream,CBass::BASS_FX_DSPFX_PEAKEQ,&:EQ) ALORS
	RENVOYER Vrai
FIN

RENVOYER Faux


Voila espérant que cela va t'éclairer sur la gestion d'un equaliseur avec BASS.

Philippe

Contribution le : 29/06/2007 09:49
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Merci, mes types etaitn bons mais j'envoyais une structure a la place d'une classe, il semble que c'est ca.

Contribution le : 29/06/2007 18:24
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Ah, j'oubliais, quelles sont les bornes mix et max du potar ?

Merci encore.

EDIT : Réglé :) Min 0 Max 30, formule : gDSP:EQ:fGain=-Equal5+15 par exemple ;)

Je posterai le code modifié (avec opérateurs d'indirection) pour facilement changer le nombre de barres.

Contribution le : 29/06/2007 19:23

Edité par Dream_Team sur 29/6/2007 19:41:57
Edité par Dream_Team sur 29/6/2007 19:42:45
Edité par Dream_Team sur 29/6/2007 19:51:10
Créer un fichier PDF de la contribution Imprimer


Re: Nameless Player
Stagiaire WDF
Inscrit:
27/09/2004 17:50
Post(s): 44
Je n'aime pas double poster (ou meme tripler) mais je n'ai pas le choix, pas moyen de réediter mon post :

J'ai un autre probleme avec mes plugins, depuis que j'ai refait, tout marche bien.

J'ai donc un tableau d'instances de classes ou j'inscris mes plugins.

chaque plugin a un fichier ini avec son id unique(guid) son repertoire, son nom, etc ...

Voila donc le code que j'utilise pour appeler l'initialisation de mon plugin :
ExécuteTraitement("NLPlugin_"+:GUID+"_Init",trtProcédure,:Param1,:Param2)

Donc si le plugin a un GUID WADSP, le WDL devera contenir NLPlugin_WADSP_Init() en procédure globale.

Jusque la aucun souci.

Mais voila, quand je décharge le plugin, je décharge la wdl et je détruit l'instance de classe (TableauSupprime). Avant (le plugin devait créer une fenetre qui etait appelée via la compilation dynamique) le plugin se rechargait sans problemes.
Maintenant Windev me jette en me disant juste qu'il est impossible de trouver la procédure NLPlugin_WADSP_Init. J'ai vérifié, ma WDL est bien rechargée ... Une idée ?
Dois-je charger les WDL de tous les plugins au démarrage et ensuite les utiliser sans les décharger ?

PS : J'ai essayé de compiler dynamiquement "NLPlugin_"+:GUID+"_Init()" mais cela ne marche qu'une seule fois. Il semble que seules les Fenetres peuvent etre rappelées apres avoir rechargé un WDL. EXTERNE NomDeLaProcédure est un échec aussi.

Contribution le : 29/06/2007 20:51
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2