Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1731 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL && FMOD] Lire un mp3

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OpenGL && FMOD] Lire un mp3

n°1414065
nisalon_ca​je
Posté le 26-07-2006 à 18:57:43  profilanswer
 

Bonjour, je réalise un jeu en opengl et j'aimerais savoir comment jouer un son en mp3 ??
 
Merci d'avance
 
NC


Message édité par nisalon_caje le 02-08-2006 à 11:45:51
mood
Publicité
Posté le 26-07-2006 à 18:57:43  profilanswer
 

n°1414084
caddie
Posté le 26-07-2006 à 19:50:37  profilanswer
 

Rien à voir avec OpenGL.
Regarde du côté de Fmod

n°1414100
nisalon_ca​je
Posté le 26-07-2006 à 20:25:07  profilanswer
 

ok, où puis-je trouver un tutorial ?

n°1414107
_darkalt3_
Proctopathe
Posté le 26-07-2006 à 20:32:26  profilanswer
 

les samples livrés avec fmod contiennent absolument tout ce qu'il faut.

n°1415599
nisalon_ca​je
Posté le 28-07-2006 à 22:33:20  profilanswer
 

ok merci, cependant je viens de rencontrer un problème : j'ai le code suivant (issu de l'exemple : j'ai voulu lire un mp3)
 

Code :
  1. /*===============================================================================================
  2. SIMPLEST.EXE
  3. Copyright (c), Firelight Technologies Pty, Ltd, 1999,2000.
  4. This is the simplest way to play a song through FMOD.  It is basically Init, Load, Play!
  5. ===============================================================================================*/
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #if defined(WIN32) || defined(_WIN64) || defined(__WATCOMC__)
  9.     #include <windows.h>
  10.     #include <conio.h>
  11. #else
  12.     #include <FMOD/wincompat.h> // FMOD's Version
  13. #endif
  14. // Include FMOD
  15. #include <FMOD/fmod.h>
  16. #include <FMOD/fmod_errors.h>    /* optional */
  17. int main()
  18. {
  19.     FMUSIC_MODULE *mod = NULL;
  20.     if (FSOUND_GetVersion() < FMOD_VERSION)
  21.     {
  22.         printf("Error : You are using the wrong DLL version!  You should be using FMOD %.02f\n", FMOD_VERSION);
  23.         exit(1);
  24.     }
  25.    
  26.     /*
  27.         INITIALIZE
  28.     */
  29.     if (!FSOUND_Init(32000, 64, 0))
  30.     {
  31.         printf("%s\n", FMOD_ErrorString(FSOUND_GetError()));
  32.         exit(1);
  33.     }
  34.  
  35.     /*
  36.         LOAD SONG
  37.     */
  38.     mod = FSOUND_Stream_OpenFile("musique.mp3",FSOUND_LOOP_NORMAL, 0);
  39.    
  40.     FSOUND_Stream_Play(FSOUND_FREE, mod);
  41.     /*
  42.         UPDATE INTERFACE
  43.     */
  44.     getch();
  45.    /*
  46.         FREE SONG AND SHUT DOWN
  47.     */
  48.     FMUSIC_FreeSong(mod);
  49.     FSOUND_Close();
  50.     return 0;
  51. }


 
à la compilation, avec devc++, il m'indique : main.cpp `FSOUND_Stream_OpenFile' undeclared (first use this function)  
alors que j'ai inclu la librairie pourtant !!!
 
Pourquoi cette erreur, comment la résoudre ? Merci d'avance

n°1415670
karlkox
Posté le 29-07-2006 à 07:46:54  profilanswer
 

Tu l'as inclu avec '<>' il faut donc que les fichiers d'entête se trouvent dans ton $INCLUDE_PATH soit au niveau variable d'environnement soit au niveau répertoire include de ton projet.
Ou alors inclu les fichiers avec des quotes, les fichiers devant se trouver dans le répertoire courant.

n°1415750
nisalon_ca​je
Posté le 29-07-2006 à 14:54:07  profilanswer
 

j'ai essayé avec les 2 !!! et ça ne marche pas :'(
 
cependant, je ne pense pas que ce soit un problème de "localisation" des fichiers car devc++ m'aurait indiqué un message du genre : "fmod/fmod.h" not found

n°1415758
IrmatDen
Posté le 29-07-2006 à 15:12:20  profilanswer
 

D'après la doc de fmod 3.75 elle existe pas cette fonction. Le bon nom serait plutôt FSOUND_Stream_Open.
 
Sinon, juste comme ça, pourquoi ne pas avoir pris FMod Ex?

n°1415760
nisalon_ca​je
Posté le 29-07-2006 à 15:15:31  profilanswer
 

tout simplement parce que devc++ a un installateur de librairie automatique : il les télécharge et les installe tout seul comme un grand -> il n'y avait que fmod. J'aurais pu prendre Fmod ex mais j'aurais du l'installer manuellement.
 
Qu'y a til de plus avec fmodex ?

n°1415763
IrmatDen
Posté le 29-07-2006 à 15:19:54  profilanswer
 

Il est orienté objet mais à l'utilisation je ne sais pas. C'est surtout par curiosité comme j'ai vu que c'était la nouvelle évolution de FMod ;)
 
Sinon, cette fonction?

mood
Publicité
Posté le 29-07-2006 à 15:19:54  profilanswer
 

n°1415769
nisalon_ca​je
Posté le 29-07-2006 à 15:33:22  profilanswer
 

ca marche ... ou tout du moins ca compile : en effet, voici mon nouveau code :  

Code :
  1. /*===============================================================================================
  2. SIMPLEST.EXE
  3. Copyright (c), Firelight Technologies Pty, Ltd, 1999,2000.
  4. This is the simplest way to play a song through FMOD.  It is basically Init, Load, Play!
  5. ===============================================================================================*/
  6. #include <cstdlib>
  7. #include <iostream>
  8. #include "FMOD/fmod.h"
  9. using namespace std;
  10. int main()
  11. {
  12.     FSOUND_STREAM *musique = NULL;
  13.    /*
  14.         LOAD SONG
  15.     */
  16.     musique = FSOUND_Stream_Open("01.mp3",0,0,0);
  17.    
  18.     FSOUND_Stream_Play(FSOUND_FREE, musique);
  19.     FSOUND_SetVolume(FSOUND_ALL, 120);
  20.     /*
  21.         UPDATE INTERFACE
  22.     */
  23.     system("PAUSE" );
  24.    /*
  25.         FREE SONG AND SHUT DOWN
  26.     */
  27.     FSOUND_Stream_Close(musique);
  28.     FSOUND_Close();
  29.     return 0;
  30. }


 
Cependant, on entend aucun son ... :(

n°1415788
IrmatDen
Posté le 29-07-2006 à 16:03:20  profilanswer
 

Ca serait pas ta pause qui l'empêcherait de tourner?
Il vaudrait mieux que tu laisses le programme tourner tant que tu n'appuies pas sur une touche. Il y a un exemple dans l'archive FMod qui t'aiderait à y voir plus clair; jètes-y un oeil.

n°1415790
_darkalt3_
Proctopathe
Posté le 29-07-2006 à 16:11:11  profilanswer
 

logiquement t'as une boucle de callback pour progresser dans ton mp3, sinon effectivement t'entendra rien.


---------------
Töp of the plöp
n°1415830
nisalon_ca​je
Posté le 29-07-2006 à 19:47:41  profilanswer
 

je viens de regarder l'exemple dans l'archive de fmod, cependant, dans cet exemple, il n'est pas jouer un stream . De plus, je n'ai pas trouvé de boucle pour faire 'avancer' le programme, il y a juste une boucle qui rafraichit l'affichage tant qu'on n'a pas appuyé sur le claiver
 
Donc comment faire pour faire une

Citation :

boucle de callback


 
Merci :)

n°1415842
_darkalt3_
Proctopathe
Posté le 29-07-2006 à 20:20:49  profilanswer
 

c'est dans les samples ! Y'a pas qu'un exemple.


---------------
Töp of the plöp
n°1415939
nisalon_ca​je
Posté le 30-07-2006 à 13:18:22  profilanswer
 

ok merci, c'est bon ca marche !!!
 
enfin, ca lit le fichier cependant, un autre problème (encore un!!!) ressurgit :
 
en fait dans mon programme en opengl, j'utilisais un gluttimerfunc qui provoquer un rafraichissement de l'image toutes les 30 millisecondes. Depuis que j'ai mis les musiques, le taux d'utilisation de l'uc est passé de 20 % à 40% ce qui est génant quand on a des scènes assez chargées ou on avait auparavant une utilisation de 80-85 %
 
Est-ce normal ?
 
Si non, comment faire baisser ce % d'utilisation ??
 
Encore une fois, merci d'avance ;)

n°1416486
karlkox
Posté le 31-07-2006 à 12:12:21  profilanswer
 

Il faut que tu utilises FMOD en mode non temps réel (FSOUND_OUTPUT_NOSOUND_NONREALTIME) ainsi, tu updateras le mixer de FMOD dans ton timer. (FSOUND_Update)
Tout est dans la doc.

n°1416794
nisalon_ca​je
Posté le 31-07-2006 à 17:22:33  profilanswer
 

ok merci, mais pourquoi cela faisait-il augmenter démeusuremment l'utilisation de l'uc

n°1416950
karlkox
Posté le 31-07-2006 à 20:59:59  profilanswer
 

C'est un problème connu : OpenGL force FMOD à se mettre à jour plus rapidement que ce qu'il devrait faire, en théorie, il doit se mettre à jour pour chaque frame de ta scène d'où l'utilisation de ce mode non temps réel qui te permet de ne mettre à jour le mixer de fmod qu'à chaque frame et non tout le temps.

n°1416976
nisalon_ca​je
Posté le 31-07-2006 à 21:50:01  profilanswer
 

ok, juste c'est quoi la fonction pour fixer ce paramètre (désolé pas encore eu le temps de lire bien comme il faut la doc)

n°1417229
_darkalt3_
Proctopathe
Posté le 01-08-2006 à 10:04:34  profilanswer
 

nisalon_caje a écrit :

désolé pas encore eu le temps de lire bien comme il faut la doc


 
Et donc là tu perds du temps :sarcastic:
Lire la doc n'est jamais exactement une perte de temps, ni vraiment couteux, si tu y réfléchis bien ...


Message édité par _darkalt3_ le 01-08-2006 à 10:05:05
n°1417282
nisalon_ca​je
Posté le 01-08-2006 à 10:54:59  profilanswer
 

rebonjour a tous : j'ai fait un effort, j'ai commencé à lire la doc, tout du moins ce qui me concerne pour le moment :)
 
Bon ben j'ai trouvé comment faire, mais j'ai plus de son : mon code :  

Code :
  1. FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND_NONREALTIME);
  2.   FSOUND_Init(44100, 32, 0);
  3.  
  4.   musique1 = FSOUND_Stream_Open("data/sons/intro.mp3",FSOUND_NORMAL ,0,0);
  5.   FSOUND_SetVolume(FSOUND_ALL, 150);


Message édité par nisalon_caje le 01-08-2006 à 10:55:14
n°1417949
nisalon_ca​je
Posté le 02-08-2006 à 10:05:29  profilanswer
 

J'ai oublié de préciser que ceci était juste le code de mon initialisation, que je lance une fonction de lecture ensuite.
 
J'ai lu dans le manuel qu'il existait une fonction nommée FSOUND_Update() mais je n'ai aps compris à quoi elle servait vraiment, comment l'utiliser, et si c'était cette fonction qui faisait défaut ici.  
 
Voila merci de votre aide
 
NC

n°1417954
_darkalt3_
Proctopathe
Posté le 02-08-2006 à 10:11:01  profilanswer
 

(update ton titre de topic stp)
 
Y'a des samples dans livré avec la lib.
Dedans, y'a un exemple avec un programme qui ne fait que lire un mp3.
Pourquoi tu ne t'en inspires pas ?

n°1417974
nisalon_ca​je
Posté le 02-08-2006 à 10:32:05  profilanswer
 

Heu ... pourquoi updater le titre de mon topic ???
 
Bon sinon, j'ai regardé les samples, mais le problème n'est pas là !! Le problème est que quand je lis ce mp3, l'uc utilisé est doublé. D'où l'utilisation de FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND_NONREALTIME); car d'après KarLKoX cela devrait fixer le problème, cependant, ca coupe totalement le son !

n°1418027
IrmatDen
Posté le 02-08-2006 à 11:26:37  profilanswer
 

Salut,
Il faut probablement le combiner avec un driver de sortie non?
Si tu n'appelles pas cette fonction, FMod utilises un driver par défaut. Si tu l'appelles, il faut tout lui préciser. Je ne sais pas si le driver et ce flag se combine en un seul appel, ou s'il faut le faire séparément (ça m'étonnerait m'enfin, bon, si le premier ne marche pas... ;) ).
A toi de voir.
 
Il faudrait que tu updates le titre de ton topic parce que ce n'est pas lié à GL, mais FMod, ce sera plus facile pour quelqu'un faisant une recherche sur cette lib plus tard de comprendre ton post.

n°1418040
nisalon_ca​je
Posté le 02-08-2006 à 11:47:38  profilanswer
 

Voila, j'ai updaté le titre de mon topic, mais cependant, pas la peine de poser les questions, puisque je n'en sais rien ;) Voila sinon, le faire séparemment, ben à vrai dire, je ne sais pas trop comment faire ... En tout cas, ce qui pourrait être bien, c'est de savoir si le code que j'ai mis ci dessus est correct, donc si l'erreur vient de l'idée ou de la forme, ce afin de savoir ce qu'il faut corriger :)
 
Voila encore merci d'avance ;)

n°1418678
IrmatDen
Posté le 03-08-2006 à 00:33:23  profilanswer
 

Ben, j'ai jamais vraiment joué avec FMod :/
 
Combiner ton appel avec un driver voulait dire quelque chose du genre:
FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND | FSOUND_OUTPUT_NOSOUND_NONREALTIME);
ça me paraît le choix le plus logique, mais s'il faut le faire séparément, ça serait quelque chose de ce type:
FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);
FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND_NONREALTIME);
 
Voilà, je sais pas quelle méthode marche; je mise tout sur la première, mais c'est toute l'aide que je peux t'apporter... :/

n°1427561
drayell
Posté le 18-08-2006 à 23:23:28  profilanswer
 

Il y a aussi SDL, SDL_mixer et SDL_audio il me semble. C'est plutôt par mal et cross-plateform
 
----------
http://website.bluesourcesproject.info/

n°1427565
bjone
Insert booze to continue
Posté le 18-08-2006 à 23:28:49  profilanswer
 

il vaux mieux prendre FMOD Ex: normalement FMOD normal va être abandonné, et FMOD Ex supporte des canaux virtuels très pratiques.

n°1427567
bjone
Insert booze to continue
Posté le 18-08-2006 à 23:30:14  profilanswer
 

drayell a écrit :

Il y a aussi SDL, SDL_mixer et SDL_audio il me semble. C'est plutôt par mal et cross-plateform
 
----------
http://website.bluesourcesproject.info/


 
non là franchement la partie audio de SDL n'a rien de vraiment interressant.
autant attaquer directement en OpenAL si tu veux un truc efficace et cross-platform.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [OpenGL && FMOD] Lire un mp3

 

Sujets relatifs
Lire un fichier contenant une matrice et le stocker dans un vecteurLire un fichier sur le client avant un upload
[RESOLU]Lire quelques valeurs sur une base Mysql d'un forum ipb[Opengl] coordonnées des textures...
[OpenGL] Charger une texture BMPimpossible d'intégré mon lecteur mp3 .swf sur un forum
[OpenGL] Filmer une application opengl[opengl]Pb: liberation mémoire textures [RESOLU]
WxWidgets/Opengl/Linuxlire a partir d'un fichier conf
Plus de sujets relatifs à : [OpenGL && FMOD] Lire un mp3


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR