régler le volume - C++ - Programmation
Marsh Posté le 10-05-2004 à 11:26:35
merci d'avoir prendre mon sujet en considération,sachez que j'ai utilisé la fonction sndPlaySound pour jouer le son,et pour régler le volume j'ai utilisé un composant TrackBar de c++ builder.le programme est le suivant:
void __fastcall TPrincipale::TrackBar1Change(TObject*Sender)
{
int volume;
volume=TrackBar1->Position;
auxSetVolume(MCI_DEVTYPE_WAVEFORM_AUDIO,volume);
}
il m'a pas généré des erreurs,mais il m'a donné l'impression que cette fonction ne fait rien.merci
Marsh Posté le 12-05-2004 à 08:18:50
auxSetVolume(i,volume);
i doit etre compris entre 0 et n-1 inclus, ou n est le nombre périphériques audio sur la machine.
MCI_DEVTYPE_WAVEFORM_AUDIO vaut 522 .. alors a moins d'avoir 523 périphériques audio et de vouloir régler le volume du dernier...
Marsh Posté le 12-05-2004 à 13:42:13
bonjour ace17,comme vous avez dit j'ai pas choisi le bon parametre.j'ai changé carrement la fonction et je l'ai remplacé par la fonction waveOutSetVolume en utilisant encore la fonction MAKEWPARAM.et ça bien marché.je te donne le code ci-dessous peut être vous aurez besoin un jour ou vous le donnerez a ton toure a d'autres personnes intéressés.
//--------------
DWORD volume;
HWAVEOUT hwo;
volume =MAKEWPARAM(volume,TrackBar1->Position);
waveOutSetVolume(hwo, volume);
Marsh Posté le 12-05-2004 à 17:02:02
Oui, ca parait nécessaire, mais c'est pas ce que suggere le code!
D'ailleurs c'aurait été intéressant de voir comment
Marsh Posté le 12-05-2004 à 17:11:39
Ace17 a écrit : Oui, ca parait nécessaire, mais c'est pas ce que suggere le code! |
ca parait -> c'est
Il doit avoir du bol et ça c'est initialisé à 0...
Marsh Posté le 12-05-2004 à 17:18:18
je pense pas qu'elle ait du bol ... zero ca veut dire que le handle n'est pas valide
et quand je disais "ca parait nécessaire", c'était une facon de parler! Evidemment qu'il faut...
Marsh Posté le 12-05-2004 à 17:26:57
comme périphirique de sotrie j'utilise waveOut,par contre si vous avez des baffles intégrés la fontion waveOutSetVolume va pas influer sur le volume.
Marsh Posté le 12-05-2004 à 17:40:30
sachez que j'ai essayé la fonction auxSetVolume avec 0,1,2,3 en premier argument,mais tjs pas de résultat.
Marsh Posté le 12-05-2004 à 18:59:45
Ouais, mais la, tu disais pas que ca marchait avec waveOutSetVolume?
Marsh Posté le 15-05-2004 à 17:30:39
il existe aussi la foction waveInSetVolume.et dans ce cas il faut déclarer how comme etant un périphirique d'entré cad HWAVEIN.
------------------------------------------------------------
ce qui me gène dans mon programme est que à chaque fois je réduis le volume(à partir de mon programme),la balance de périphirique wave se déplace vers le coté droit,et le son devient mono.pour vérifier ça allez faire un double click dans l'icone de volume control de windows(phériphirique wave).
------------------------------------------------------------
j'aimerai bien travailer avec direct sound mais j'ai recontré un problème au niveau de lieur.
Marsh Posté le 15-05-2004 à 20:21:52
Un probleme au niveau de "lieur"???? Un probleme de linkage tu veux dire! C'est quoi l'erreur?
Marsh Posté le 16-05-2004 à 11:22:08
j'ai un problème avec diectsound en C++ builder,lors de la creation d'un object directsound avec la fonction DirectSoundCreate il nous génère le message suivant:
[Lieur Erreur] Unresolved external 'DirectSoundCreate' referenced from C:\DIRECTSOUND\DIRECTSOUND.OBJ
malgré que j'ai ajouté les deux fichiers d'entêtes:
#include <mmsystem.h>
#include "dsound.h"
svp aidez moi à le résoudre, merci à l'avance.
Marsh Posté le 16-05-2004 à 11:32:24
Ben c'est normal, il faut que tu linkes avec la librairie dsound.lib!
Ca n'a rien a voir avec les fichiers d'en tete ; Les fichiers d'en tete sont pris en compte uniquement a la compilation. Qu'est-ce que c'est un fichier d'en tete? C'est (en simplifié) juste une liste de définitions de types et de déclarations de fonctions. Les définitions de ces fonctions sont le plus souvent dans des librairies. C'est pendant le linkage que les appels des fonctions sont reliés à leurs définitions : si la définition n'est pas trouvée, tu as droit a un "unresolved external". Voici un exemple :
Code :
|
Ca, ca ne passe pas la compilation : function2 n'est meme pas déclarée.
Code :
|
Ca, ca passe la compilation, mais au linkage, le linker va chercher a savoir ce que function2 fait, ce qui n'est défini nulle part... d'ou le "unresolved external" résultant.
Code :
|
La ca marche!
Marsh Posté le 16-05-2004 à 11:40:18
Ace17 a écrit : Un probleme au niveau de "lieur"???? Un probleme de linkage tu veux dire! |
Un problème d'édition des liens
Marsh Posté le 16-05-2004 à 11:45:03
Ouais, exact le vrai terme c'est "édition de liens"... mais vu la facon dont s'exprime c++fan - je crois qu'elle utilise un (mauvais!) traducteur vers le francais - j'ai jugé sympa de pas trop s'éloigner de son vocabulaire
Marsh Posté le 16-05-2004 à 12:03:35
merci,c'est vrais ce que vous disez,mais dans mon cas le prototype,et la définition de la fonction DirectSoundCreate se trouve au niveau de fichier d'entete "dsound.h" ou j'ai pas le droit de le modifier.si c'etait ma propre fonction je procède de la manière que vous avez indiqué.meme j'ai trouvé un programme sur internet avec vc++ ,accompagné de son .exe,il marche bien,et lorsque je l'ai recompilé avec vc++6 il ma posé le meme pb.je pense que le problème est au niveau de la version de DirectX
Marsh Posté le 16-05-2004 à 12:54:14
Mmm c'est vrai que maintenant il doit falloir utiliser une fonction du style DirectSoundCreate8 ou dans le genre
Marsh Posté le 16-05-2004 à 14:08:55
pour le message de rady,un petit conflit est produit c'est une copine a moi,elle a oublié de se déconneter,donc le message était a moi.
//-----------------------------------------
pour la fonction DirectSoundCreate8,je l'ai déja utilisé
mais ca pas marché.il me faut le fichier d'entete adequat
Marsh Posté le 16-05-2004 à 16:16:05
Ouais, rady on avait reconnu.
Mets a jour ton SDK de DirectX en téléchargeant celui du 8.1 sur le site de Microsoft
Marsh Posté le 16-05-2004 à 18:25:18
ajoute
Code :
|
dans ton code.
Marsh Posté le 17-05-2004 à 13:05:29
HelloWorld a écrit :
|
je l'ai essayé,mais il m'a généré l'erreur suivante:
[Lieur Erreur fatale] Fatal: Unable to open file 'DSOUND.LIB'.
Marsh Posté le 17-05-2004 à 14:37:31
Ouai. J'aurais du checker au lieu de faire confiance à Ace17
Code :
|
Marsh Posté le 17-05-2004 à 14:55:11
"Faire confiance a Ace17" ???
Elle a écrit texto :
[Lieur Erreur] Unresolved external 'DirectSoundCreate' referenced from C:\DIRECTSOUND\DIRECTSOUND.OBJ
DirectSoundCreate il est défini dans winmm.lib maintenant?
Marsh Posté le 17-05-2004 à 17:35:16
Dsl. c'est lui le boulay alors
Marsh Posté le 17-05-2004 à 17:46:00
je l'essayé,le meme message précedent,pas de nouveau.
Marsh Posté le 17-05-2004 à 17:51:43
je cherche maintenant une fonction pour régler la balance de périphirique wave.
Marsh Posté le 17-05-2004 à 18:05:41
Un seul probleme a la fois!
Tu as manifestement un SDK hybride, puisque ca compile et que ca linke pas, alors que tu as inclus les bonnes librairies. Donc tu télécharges le SDK de DirectX 8+.
Marsh Posté le 18-05-2004 à 16:07:19
oubliez le direct sound,et aidez moi à régler la balance.
Marsh Posté le 18-05-2004 à 16:12:28
waveOutSetVolume(0, MAKELONG(volume_right, volume_left));
Marsh Posté le 22-05-2004 à 17:56:09
merci ace17,c'est vraie que cette fonction influe sur la balance.lorsque j'ai changé les arguments de cette fonction,le programme a produit la chose suivante:
lorsque je déminue la balance ,le volume devient maximum,et vise versa.pour eviter le pb de la balance,et pour qu'elle reste tjs au milieu
j'ai procédé comme suit:
waveOutSetVolume(0, MAKELONG(TrackBar->Position,
TrackBar->Position volume_left));
le volume change comme je désire sans que la balance change sa position.
Marsh Posté le 09-05-2004 à 17:51:46
bonjour,j'ai fait une application qui consiste a jouer un fichier son avec la fonction sndPlaySound ,et ça bien marché.maitenant je suis entraine de chercher une fonction pour régler le volume,sachant que j'ai utilisé la fontion auxSetVolume mais elle n'a pas influer sur le volume,aidez moi svp.
---------------
pour être un bon programmeur il faut affronter toutes les difficultés