MOTEUR DE SON UTILISANT FMOD (C++) (WAV-MIDI-MP3-ETC...)
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 2009
-
8 mai 2004 à 09:28
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008
-
11 déc. 2005 à 00:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
# //module
# case MODULE_TYPE_MUSIC:
# case MODULE_TYPE_SOUND:
# if(FMUSIC_PlaySong(module) == NULL)
# return FALSE;
# break;
à part ça, merci pr le code, je vois mieux comment fmod est hiérarchisé !
ryosaebafr2000
Messages postés1Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention16 juin 2005 16 juin 2005 à 14:19
salut
g telechargé la derniere version (3.74) de fmod mais apparement
la fonction "FSOUND_Stream_OpenFile" ne semble pas fonctionner car g le message d erreur suivi à la compilation :
" Undefined symbol '_FSOUND_Stream_OpenFile@12' referenced in "simplest.c". "
Pourtant, il ne pose aucun probleme pour lire les MODULES (s3m,mod,it,midi etc) avec la fonction "FMUSIC_LoadSong"
ce qui est bizarre c que dans la doc, la fonction FSOUND_Stream_OpenFile n'existe pas mais est remplacée par FSOUND_Stream_Open et que dans "fmod.h", c'est le prototype FSOUND_Stream_OpenFile qui apparait...
Quelqu'un peut il me venir en aide, PLEASE!!!
PS : si vous connaissez, je suis sous Labwindows CVI 7.0 (code en C pur)
benefy
Messages postés2Date d'inscriptionsamedi 19 mars 2005StatutMembreDernière intervention21 mars 2005 1 avril 2005 à 15:22
Juste une petite remarque à propos de la classe SoundEngine: elle reste limitée du fait qu'il n'est pas possible d'en instancier plusieurs, l'initialisation de FMOD ne pouvant pas se faire 2 fois de suite.
Par contre, connais-tu un moyen d'utiliser FMOD sur 2 périphériques son différents en même temps ?
Par exemple, jouer un son sur une carte son et en jouer un autre en même temps sur une deuxième carte son ?
alexis779
Messages postés13Date d'inscriptiondimanche 21 novembre 2004StatutMembreDernière intervention15 octobre 2005 2 déc. 2004 à 18:06
C'est du beau travail, mais j'y ai trouvé 2 petites coquilles :
Dans l'utilisation (paragraphe 3), il est écrit :
temp.Charger("grosMP3.mp3", TYPE_STREAM);
et plus bas :
temp.Charger("petitWAV.wav", TYPE_SAMPLE);
Mais il faut mettre STREAM_TYPE et SAMPLE_TYPE à la place de TYPE_STREAM et TYPE_SAMPLE, pour qu'elles soient en accord avec les déclarations des variables dans SoundEngine.h.
Voilà c'est tout.
Une dernière chose : le moteur est compatible avec la dernière version de FMod, c'est qui n'est pas toujours le cas des codes que l'on trouve actuellement :
On voit souvent fsound_stream_openfile à la place de fsound_stream_open.
Bravo.
xarier
Messages postés688Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention19 mai 2005 8 mai 2004 à 12:51
bien bien :) mais je pense qu'il faut ajouter la gestion de la frequence et la 3d et aussi la rapidité de lecture c ta besoin d'aide : je suis la :)
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 8 mai 2004 à 12:27
Oui c'est vrai c'est dans la lib du C.
Mais dans tous les cas je reste persuadé qu'il faut utiliser NULL si on veut que le code soit clair.
En fait, pour l'idée de Stroustrup, faudrait faire un
#ifdef NULL
#undef NULL
extern const int NULL = 0;
#endif
et dans un fichier *.cpp :
const int NULL = 0;
Personnellement, je ne vois pas trop ce qu'il y a de mal à utiliser le NULL de base...j'ai jamais eu de problème avec.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 8 mai 2004 à 11:33
ok, mais NULL n'est pas defini dans la lib standard du c++ mais dans celle du c
"In C++, a literal zero is most appropriate for use as a null pointer
constant" (cpptips)
et stroustrup dit : "If you feel you must define NULL, use const int NULL = 0;"
et pas #define NULL ((void *)0)
Funto66
Messages postés1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 8 mai 2004 à 11:08
Elle est sympa ta source ;)
djl >> là je suis pas d'accord, faut laisser NULL au lieu de 0, c'est plus explicite, ça revient au même et c'est défini dans la bibliothèque standard.
Par contre je suis d'accord pour remplacer les BOOL par des bool ^^
Aussi, j'ai pas trop regardé mais il me semble que l'on est obligés d'appeler les fonctions son.Liberer() avant un son.Charger() et qu'on doit aussi appeler engine.Desinitialiser().
C'est là que tu pourrais profiter de la puissance du C++ : il faudrait créer des destructeurs qui appelleraient ces méthodes, et ne pas être obligé de libérer un son avant d'en charger un autre : pour ça, la fonction Liberer() serait appelée dans Son::Charger(), seulement si un son était déjà chargé auparavant bien sûr ^^
Voilà, bonne prog.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 8 mai 2004 à 09:51
et change aussi qq truc pour la rendre plus c++: utilise bool plutot que BOOL, ne met pas void en parametre à une fonction sans parametre (ca concerne juste le c pour differencier prototype et declaration), remplace tes #define par une enum pour tes constante...
tu peux aussi utiliser 0 à la place de NULL
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 8 mai 2004 à 09:28
je trouve que ta source c'est une bonne idée, elle a un petit aspect utile et surtout elle permet de bien apprendre a se servir de FMOD !!!
mais un petit truc que tu pourrais faire, sur le site, dans la partie source, tu fait une sorte d'explication de ta source, je pense que ca serait bien si tu l'inserais dans ton zip...
voila sinon continue ta source, rend la plus puissance et continue a posté les mises a jour sur cppfrance...
11 déc. 2005 à 00:43
# //module (loop)
# case MODULE_TYPE_MUSIC:
# if(FMUSIC_PlaySong(module) == NULL)
# return FALSE;
# break;
#
# //module
# case MODULE_TYPE_SOUND:
# if(FMUSIC_PlaySong(module) == NULL)
# return FALSE;
# break;
par ça:
# //module
# case MODULE_TYPE_MUSIC:
# case MODULE_TYPE_SOUND:
# if(FMUSIC_PlaySong(module) == NULL)
# return FALSE;
# break;
à part ça, merci pr le code, je vois mieux comment fmod est hiérarchisé !
16 juin 2005 à 14:19
g telechargé la derniere version (3.74) de fmod mais apparement
la fonction "FSOUND_Stream_OpenFile" ne semble pas fonctionner car g le message d erreur suivi à la compilation :
" Undefined symbol '_FSOUND_Stream_OpenFile@12' referenced in "simplest.c". "
Pourtant, il ne pose aucun probleme pour lire les MODULES (s3m,mod,it,midi etc) avec la fonction "FMUSIC_LoadSong"
ce qui est bizarre c que dans la doc, la fonction FSOUND_Stream_OpenFile n'existe pas mais est remplacée par FSOUND_Stream_Open et que dans "fmod.h", c'est le prototype FSOUND_Stream_OpenFile qui apparait...
Quelqu'un peut il me venir en aide, PLEASE!!!
PS : si vous connaissez, je suis sous Labwindows CVI 7.0 (code en C pur)
1 avril 2005 à 15:22
Par contre, connais-tu un moyen d'utiliser FMOD sur 2 périphériques son différents en même temps ?
Par exemple, jouer un son sur une carte son et en jouer un autre en même temps sur une deuxième carte son ?
2 déc. 2004 à 18:06
Dans l'utilisation (paragraphe 3), il est écrit :
temp.Charger("grosMP3.mp3", TYPE_STREAM);
et plus bas :
temp.Charger("petitWAV.wav", TYPE_SAMPLE);
Mais il faut mettre STREAM_TYPE et SAMPLE_TYPE à la place de TYPE_STREAM et TYPE_SAMPLE, pour qu'elles soient en accord avec les déclarations des variables dans SoundEngine.h.
Voilà c'est tout.
Une dernière chose : le moteur est compatible avec la dernière version de FMod, c'est qui n'est pas toujours le cas des codes que l'on trouve actuellement :
On voit souvent fsound_stream_openfile à la place de fsound_stream_open.
Bravo.
8 mai 2004 à 12:51
8 mai 2004 à 12:27
Mais dans tous les cas je reste persuadé qu'il faut utiliser NULL si on veut que le code soit clair.
En fait, pour l'idée de Stroustrup, faudrait faire un
#ifdef NULL
#undef NULL
extern const int NULL = 0;
#endif
et dans un fichier *.cpp :
const int NULL = 0;
Personnellement, je ne vois pas trop ce qu'il y a de mal à utiliser le NULL de base...j'ai jamais eu de problème avec.
8 mai 2004 à 11:33
"In C++, a literal zero is most appropriate for use as a null pointer
constant" (cpptips)
et stroustrup dit : "If you feel you must define NULL, use const int NULL = 0;"
et pas #define NULL ((void *)0)
8 mai 2004 à 11:08
djl >> là je suis pas d'accord, faut laisser NULL au lieu de 0, c'est plus explicite, ça revient au même et c'est défini dans la bibliothèque standard.
Par contre je suis d'accord pour remplacer les BOOL par des bool ^^
Aussi, j'ai pas trop regardé mais il me semble que l'on est obligés d'appeler les fonctions son.Liberer() avant un son.Charger() et qu'on doit aussi appeler engine.Desinitialiser().
C'est là que tu pourrais profiter de la puissance du C++ : il faudrait créer des destructeurs qui appelleraient ces méthodes, et ne pas être obligé de libérer un son avant d'en charger un autre : pour ça, la fonction Liberer() serait appelée dans Son::Charger(), seulement si un son était déjà chargé auparavant bien sûr ^^
Voilà, bonne prog.
8 mai 2004 à 09:51
tu peux aussi utiliser 0 à la place de NULL
8 mai 2004 à 09:28
mais un petit truc que tu pourrais faire, sur le site, dans la partie source, tu fait une sorte d'explication de ta source, je pense que ca serait bien si tu l'inserais dans ton zip...
voila sinon continue ta source, rend la plus puissance et continue a posté les mises a jour sur cppfrance...