IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

FMOD Discussion :

FMOD Channel GetSpectrum


Sujet :

FMOD

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Points : 35
    Points
    35
    Par défaut FMOD Channel GetSpectrum
    Bonjour

    J'aimerai utilisé la fonction FMOD_Channel_GetSpectrum pour afficher une visualisation du spectre sonore comme le font la plupart des lecteur audio, cependant après avoir lu et relu la doc de FMOD à ce sujet je ne vois toujours pas où il peut bien y avoir une erreur..

    Je vous donne la partie de mon code qui nous intéressent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    FMOD_System_GetMasterChannelGroup(system, &allChannel);
    	FMOD_System_CreateSound(system, "musique.mp3", FMOD_SOFTWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_LOOP_NORMAL, 0, &musique);
    	FMOD_Sound_SetLoopCount(musique, -1);
    	FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, musique, 0, NULL);
    	FMOD_System_GetChannel(system, FMOD_CHANNEL_FREE, &channel);
     
    	ecran = SDL_SetVideoMode(1024, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    	SDL_WM_SetCaption("Lecteur Audio", NULL);
     
    	coordonee.y = coordonee.x = 0;
     
    	while (continuer)
    	{
    		tempsPrecedent = SDL_GetTicks ();
     
    		while(SDL_PollEvent(&myEvent))
    		{
    			switch(myEvent.type)
    			{
    				case SDL_QUIT: continuer = 0;
    					break;
     
    				case SDL_KEYDOWN:
    					switch(myEvent.key.keysym.sym)
    					{
    						case SDLK_ESCAPE: continuer = 0;
    							break;
     
    						case SDLK_SPACE: 
    							FMOD_ChannelGroup_GetPaused(allChannel, &pause);
    							FMOD_ChannelGroup_SetPaused(allChannel, !pause);
    							break;
    					}
    			}
    		}
     
    		FMOD_Channel_GetSpectrum(channel, frequenceMusique, NBFREQUENCE, 0,  FMOD_DSP_FFT_WINDOW_RECT);
     
    		for(iFrequence = 0; iFrequence < NBFREQUENCE; iFrequence ++)
    		{
    			fprintf(stderr,"%f\n", frequenceMusique[iFrequence]);
    		}
     
    		for( iFrequence = 0, coordonee.x = 0; iFrequence < NBFREQUENCE; iFrequence ++, coordonee.x ++ )
    		{
    			barreVerticale = SDL_CreateRGBSurface(SDL_HWSURFACE, 1, (frequenceMusique[iFrequence] * 400), 32, 0, 0, 0, 0);
    			SDL_FillRect(barreVerticale, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    			SDL_BlitSurface(barreVerticale, NULL, ecran, &coordonee);
    			SDL_Flip(ecran);
    		}
     
    		tempsActuel = SDL_GetTicks ();
     
    		if(tempsActuel - tempsPrecedent < 30)
    		{
    			SDL_Delay(30 - (tempsActuel - tempsPrecedent));
    		}
    Enfaite lorsque je regarde la variable barreVerticale->h je trouve un nombre négatif incompréhensible, j'ai donc enregistrer les valeurs du tableau frequenceMusique et lorsque je vais voir je trouve ceci:

    0.000000
    -107374176.000000
    -107374176.000000
    -107374176.000000
    -107374176.000000
    -107374176.000000
    -107374176.000000
    ...

    Et ainsi de suite.

    Et, mon canal à été déclarer comme ceci :
    FMOD_CHANNEL* channel;

    Et NBFREQUENCE correspond à 1024.

    Merci d'avance !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 887
    Points : 219 339
    Points
    219 339
    Billets dans le blog
    123
    Par défaut
    Bonjour,

    Je pense qu'il manque un appel à la méthode Update. Normalement, dans cette version, si je me rappelle bien, son nom est : FMOD_System_Update(). En effet, c'est cette fonction qui met à jour les données liées au son joué et notamment, rempli le spectrum des données adéquates.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Points : 35
    Points
    35
    Par défaut
    Bonjour et merci de la réponse, je débute avec FMOD et je ne connaissais pas cette fonction.. J'ai donc voulu l'intégrer à mon code mais je ne vois pas où je dois la placer enfaite :/

    J'ai essayer de la mettre au début du while (continuer), au début du for, juste après le ou juste avant getSpectrum, mais ça me donne toujours la même erreur :/

    J'ai été voir dans la doc et je ne vois rien qui puisse m'éclairer :/

    Merci d'avance :/

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 887
    Points : 219 339
    Points
    219 339
    Billets dans le blog
    123
    Par défaut
    Il faut l'appeler dans la boucle (dans le plus grand while).
    Normalement, cela suffit.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 48
    Points : 35
    Points
    35
    Par défaut
    Si c'est quelques choses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (continuer)
    	{
    		tempsPrecedent = SDL_GetTicks ();
    		FMOD_System_Update(system);
     
    		while(SDL_PollEvent(&myEvent))
    		{
    Je retombe sur la même erreur avec les même chiffre négatif :/

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 887
    Points : 219 339
    Points
    219 339
    Billets dans le blog
    123
    Par défaut
    Je regardais le code d'une de mes vieilles applications et je me demandais si la cause n'était pas l'utilisation de FMOD_System_CreateSound() au lieu de FMOD_System_CreateStream. Car, il se peut que le GetSpectrum ne fasse que fonctionner sur les streams (musique) et non les "sons" (sons courts).

Discussions similaires

  1. [FMOD] Erreur de "channel" réutilisé
    Par Clad3 dans le forum C++
    Réponses: 0
    Dernier message: 30/10/2008, 15h01
  2. [GTK/FMOD] Erreur entre les deux
    Par titor dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 28/12/2005, 20h23
  3. Réponses: 14
    Dernier message: 10/11/2005, 17h19
  4. [JDBC] [Oracle] Erreur : End of TNS data channel
    Par loicmillion dans le forum JDBC
    Réponses: 2
    Dernier message: 01/02/2005, 14h27
  5. FMod et DirectSound
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 13/07/2004, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo