petit problème avec les pointeurs

petit problème avec les pointeurs - C++ - Programmation

Marsh Posté le 17-08-2006 à 14:22:32    

bonjour
 
j'ai une fonction qui prend en compte plusieurs paramètres:
 

Code :
  1. setSoftwareFormat( FREQUENCY, FMOD_SOUND_FORMAT_PCM16, 0, 0, FMOD_DSP_RESAMPLER_LINEAR )


 
pas de problème pour FREQUENCY puisque il suffit de le remplacer par une valeur int, par contre ça se complique pour le suivant:
 
y'a plusieurs options possibles, on met
FMOD_SOUND_FORMAT_PCM16     pour des sons en 16 bits
FMOD_SOUND_FORMAT_PCM8       pour des sons 8 bits
 
 
dans mon programme on choisis entre 8 bits ou 16 bits simplement en tapant une valeur, on tape soit 8 soit 16 !
il faudrait que j'arrive à coller FMOD_SOUND_FORMAT_PCM à la valeur tapée !
il me semble que pour cela on utilise les pointeurs mais j'y arrive pas.
si quelqu'un pouvait me faire ça ça m'aiderais beaucoup. pour FMOD_DSP_RESAMPLER_ c'est différent, ça va mettre a la fin NOINTERP, LINEAR ou SPLINE suivant si on tape 0, 1 ou 2; mais si j'ai un exemple avec FMOD_SOUND_FORMAT_PCM je pense être capable de l'appliquer pour toutes les autres fonctions  ;)  
 
merci


Message édité par xphanoo le 17-08-2006 à 14:23:11
Reply

Marsh Posté le 17-08-2006 à 14:22:32   

Reply

Marsh Posté le 17-08-2006 à 14:27:15    

Non, les pointeurs n'ont rien à voir avec ca.
 
Tu saisis la chaine de caractères, tu la compares aux chaines "8" et "16", et selon le résultat (if/then/else) tu fais un setSoftwareFormat( FREQUENCY, FMOD_SOUND_FORMAT_PCM16, 0, 0, FMOD_DSP_RESAMPLER_LINEAR ) ou un setSoftwareFormat( FREQUENCY, FMOD_SOUND_FORMAT_PCM8, 0, 0, FMOD_DSP_RESAMPLER_LINEAR )


Message édité par _darkalt3_ le 17-08-2006 à 14:39:24

---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 14:59:32    

j'y avait pensé, mais le problème c'est que c'est pas le seul paramètre a prendre en compte, il y a aussi FMOD_DSP_RESAMPLER_ qui est dans la meme fonction !
ça ferait 2x3 comparaisons avec if ... et bien + si il y avait plus de paramètres. (imagine s'il y avait 4 paramètres avec chacun 8 "valeurs" possible... ça ferait 8x8x8x8 soit 4096 lignes de IF !  :pt1cable: )
il n'y a pas un moyen de mettre un paramètre "NULL" qui fait en sorte qu'on soit pas obligé de définir tous les paramètres d'une fonction ? (comme ça je pourrais d'abord faire 2 if pour FMOD_SOUND_FORMAT_PCM, et ensuite 3 autres pour FMOD_DSP_RESAMPLER_, en gros je définis pas tous les paramètres de la fonction en 1 seul coup mais en plusieurs fois. les 4096 lignes (c'est un exemple) seraient réduites à 16 ^^)


Message édité par xphanoo le 17-08-2006 à 15:03:06
Reply

Marsh Posté le 17-08-2006 à 15:05:23    

pas la peine de faire des if tu peux utiliser un "switch"  
 
autrement 2 fonctions bien faite qui font le traitement  
 
tu appelles la premiere pour PCM
tu appelles la seconde pour RESAMPLER
tu appelles ta fonction avec les parametres corrects

Reply

Marsh Posté le 17-08-2006 à 15:07:44    

non, pas de parametre a null.
 
Cela dit, dans ce cas, vérifie le type de FREQUENCY, FMOD_SOUND_FORMAT_PCM16 ou FMOD_DSP_RESAMPLER_LINEAR : ce devrait etre des entiers.
 
Dans ce cas, tu fais tes tests, et tu assignes les resultats à des variables, genre (pseudo code)
si (saisie = 8)
alors variablesoundformat = FMOD_SOUND_FORMAT_PCM8
sinon varaiblesoundformat = FMOD_SOUND_FORMAT_PCM16
etc.
 
Ensuite tu n'appelles qu'une fois setSoftwareFormat avec tes variables:
setSoftwareFormat( maVariableFrequence, maVariableSoundFormat, 0, 0, maVariableLinear )


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 15:09:48    

jbourdellon a écrit :

pas la peine de faire des if tu peux utiliser un "switch"  
 
autrement 2 fonctions bien faite qui font le traitement  
 
tu appelles la premiere pour PCM
tu appelles la seconde pour RESAMPLER
tu appelles ta fonction avec les parametres corrects


 
 
 
jbourdellon pourrais tu détailler stp ?
je pense que c'est un peu ce que je voulais faire au début, mais je comprends pas comment faire changer ce qui va arriver dans le setSoftwareFormat   (comment faire changer FMOD_SOUND_FORMAT_PCM16 pour qu'en fonction d'une autre valeur ça devienne FMOD_SOUND_FORMAT_PCM8 ou bien FMOD_SOUND_FORMAT_PCM24 ?)


Message édité par xphanoo le 17-08-2006 à 15:10:01
Reply

Marsh Posté le 17-08-2006 à 15:12:24    


_darkalt3_ a écrit :

non, pas de parametre a null.
 
Cela dit, dans ce cas, vérifie le type de FREQUENCY, FMOD_SOUND_FORMAT_PCM16 ou FMOD_DSP_RESAMPLER_LINEAR : ce devrait etre des entiers.
 
Dans ce cas, tu fais tes tests, et tu assignes les resultats à des variables, genre (pseudo code)
si (saisie = 8)
alors variablesoundformat = FMOD_SOUND_FORMAT_PCM8
sinon varaiblesoundformat = FMOD_SOUND_FORMAT_PCM16
etc.
 
Ensuite tu n'appelles qu'une fois setSoftwareFormat avec tes variables:
setSoftwareFormat( maVariableFrequence, maVariableSoundFormat, 0, 0, maVariableLinear )


 
ah ok je vais tester ça ! (cependant je prends toujours s'il y a une méthode qui permet de se passer des IF de partout, au cas ou j'aurais une fonction qui peut avoir plein de "changements" possible)


Message édité par xphanoo le 17-08-2006 à 15:12:32
Reply

Marsh Posté le 17-08-2006 à 15:18:43    

ben  
 
switch(VALEUR_POUR_PCM) {
       case(8) : variablesoundformat = FMOD_SOUND_FORMAT_PCM8;
       case(16) : variablesoundformat = FMOD_SOUND_FORMAT_PCM16;
       default : variablesoundformat = FMOD_SOUND_FORMAT_PCM16 OU 8
}
 
switch(VALEUR_POUR_RESAMPLER) {
       case xxxx:
       default : ATTRIBUTION D'UNE VALEUR PAR DEFAUT  
}
 
 
 
OU autre solution  
 
valeurpourpcm = fonctionPCM(valeurPCM);
valeurPourResampler = fonctionResampler(valeurResampler);
setSoftwareFormat( FREQUENCY, FMOD_SOUND_FORMAT_PCM16, 0, 0, FMOD_DSP_RESAMPLER_LINEAR )  
 

Reply

Marsh Posté le 17-08-2006 à 15:20:48    

Ca évite pas les tests de toutes façons.


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 15:24:52    

Code :
  1. int varformat;
  2. int varresampling;
  3. [...]
  4.   if (pReso = 8){ varformat = FMOD_SOUND_FORMAT_PCM8; }
  5.   if (pReso = 16){ varformat = FMOD_SOUND_FORMAT_PCM16; }
  6.   if (pReso = 24){ varformat = FMOD_SOUND_FORMAT_PCM24; }
  7.   if (pResample = 0){ varresampling = FMOD_DSP_RESAMPLER_NOINTERP; }
  8.   if (pResample = 1){ varresampling = FMOD_DSP_RESAMPLER_LINEAR; }
  9.   if (pResample = 2){ varresampling = FMOD_DSP_RESAMPLER_SPLINE; }
  10. result = system->setSoftwareFormat( pFrequ, varformat, 0, 0, varresampling );


 
bon j'ai essayé avec un peu tout (int, short, long, float, double, long double, char) et rien a faire... j'obtiens un message de ce style du compilateur :  impossible de convertir le paramètre 2 de 'int' en 'FMOD_SOUND_FORMAT'


Message édité par xphanoo le 17-08-2006 à 15:25:10
Reply

Marsh Posté le 17-08-2006 à 15:24:52   

Reply

Marsh Posté le 17-08-2006 à 15:29:07    

donne voir la declaration de tes variables

Reply

Marsh Posté le 17-08-2006 à 15:29:43    

T'as vérifié dans les entetes de FMOD (ou dans la doc) quelles étaient les types de FMOD_SOUND_* ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 15:41:37    

voila un extrait de la doc:
 
 
FMOD_SOUND_FORMAT
These definitions describe the native format of the hardware or software buffer that will be used.  
 
 
Enumeration
 
typedef enum {
  FMOD_SOUND_FORMAT_NONE,  
  FMOD_SOUND_FORMAT_PCM8,  
  FMOD_SOUND_FORMAT_PCM16,  
  FMOD_SOUND_FORMAT_PCM24,  
  FMOD_SOUND_FORMAT_PCM32,  
  FMOD_SOUND_FORMAT_PCMFLOAT,  
  FMOD_SOUND_FORMAT_GCADPCM,  
  FMOD_SOUND_FORMAT_IMAADPCM,  
  FMOD_SOUND_FORMAT_VAG,  
  FMOD_SOUND_FORMAT_XMA,  
  FMOD_SOUND_FORMAT_MPEG,  
  FMOD_SOUND_FORMAT_MAX
} FMOD_SOUND_FORMAT;
 
 
Values:
 
FMOD_SOUND_FORMAT_NONE
Unitialized / unknown.  
 
FMOD_SOUND_FORMAT_PCM8
8bit integer PCM data.  
 
FMOD_SOUND_FORMAT_PCM16
16bit integer PCM data.  
 
FMOD_SOUND_FORMAT_PCM24
24bit integer PCM data.  
 
FMOD_SOUND_FORMAT_PCM32
32bit integer PCM data.  
 
FMOD_SOUND_FORMAT_PCMFLOAT
32bit floating point PCM data.  
 
FMOD_SOUND_FORMAT_GCADPCM
Compressed GameCube DSP data.

 
etc...
 
typedef enum... je connais pas  :??:


Message édité par xphanoo le 17-08-2006 à 15:42:32
Reply

Marsh Posté le 17-08-2006 à 15:48:34    

le compilateur te le dit !
 

Code :
  1. FMOD_SOUND_FORMAT varformat;

Reply

Marsh Posté le 17-08-2006 à 15:51:31    

:ouch:  ça marche !
je pensais pas que les variables pouvaient avoir des types personnalisés
merci de votre aide  ;)

Reply

Marsh Posté le 17-08-2006 à 15:52:01    

[:grilled]


Message édité par _darkalt3_ le 17-08-2006 à 15:52:56

---------------
Töp of the plöp
Reply

Marsh Posté le 17-08-2006 à 21:49:33    

c'est quoi tous ces = dans les tests ?

Reply

Marsh Posté le 17-08-2006 à 22:22:14    

De toutes façons un  

Code :
  1. int maVariable = FMOD_SOUND_FORMAT_PCM16;


 
doit fonctionner.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed