Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP de visualisation spectrale du son

arg ecran noir

    18 août 2006 à 9:59:35

    lut!
    J'ai un problème sur ce TP parce que la musique passe mais l'ecran reste horriblement noir :colere2:
    J'ai vérifié avec la correction du TP mais je ne trouve pas le pb
    p-e vous aurrez plus de chance que moi!
    Place au code...

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <FMOD/fmod.h>

    void setPixel(SDL_Surface *surface, int x, int y, Uint32 pixel);

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL;
        SDL_Event event;
        int continuer = 1, actuel = 0, precedent = 0, i, j, hauteurBarre = 0;
        float *spectre = NULL;

        /* FSOUND */
       
        FSOUND_Init (44100, 32, 0);
        FSOUND_STREAM* musique = FSOUND_Stream_Open("bof.mp3", 0, 0, 0);
        if (musique == NULL)
        {
            fprintf(stderr, "Impossible d'ouvrir la musique");
            exit(EXIT_FAILURE);
        }
        FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 1);
        FSOUND_Stream_Play(FSOUND_FREE, musique);

        /* SDL */
        SDL_Init (SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode (512, 480, 32, SDL_SWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Visualisation spectrale du son", NULL);

        /* BOUCLES */
        while (continuer);
        {
            SDL_PollEvent (&event);

            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }

            // Temps
            actuel = SDL_GetTicks();
            if (actuel - precedent < 25)
            {
                SDL_Delay(25 - (actuel - precedent));
            }
            precedent = SDL_GetTicks();

            //On y go
            spectre = FSOUND_DSP_GetSpectrum();
            SDL_LockSurface(ecran);

            //effacement de l'écran
            SDL_FillRect (ecran, NULL, SDL_MapRGB (ecran->format, 59, 0, 0));

            //dessin du spectre
                for (i=0; i<512; i++)
                {
                    hauteurBarre = spectre[i] * 4 * 480;

                    if (hauteurBarre > 480)
                    hauteurBarre = 480;

                    for (j=480 - hauteurBarre; j<480; j++)
                    {
                        setPixel(ecran, i, j, SDL_MapRGB(ecran->format, 255 - (j / (480/255)), j / (480/255), 0));
                    }
                }
                SDL_UnlockSurface(ecran); //je débloque l'écran
                SDL_Flip (ecran);
            }

        //fin du programme
        FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 0);
        FSOUND_Stream_Close (musique);
        FSOUND_Close ();

        SDL_Quit ();

        return EXIT_SUCCESS;
    }

    //La fonction SetPixel
    void setPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
    {
        int bpp = surface->format->BytesPerPixel;

        Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

        switch(bpp) {
        case 1:
            *p = pixel;
            break;

        case 2:
            *(Uint16 *)p = pixel;
            break;

        case 3:
            if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
                p[0] = (pixel >> 16) & 0xff;
                p[1] = (pixel >> 8) & 0xff;
                p[2] = pixel & 0xff;
            } else {
                p[0] = pixel & 0xff;
                p[1] = (pixel >> 8) & 0xff;
                p[2] = (pixel >> 16) & 0xff;
            }
            break;

        case 4:
            *(Uint32 *)p = pixel;
            break;
        }
    }





    est-ce que ça en inspire quelques-uns?
    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2006 à 10:16:18

      Bah déjà, y'a aucun blit, donc c'est normal que ca n'affiche rien.
      • Partager sur Facebook
      • Partager sur Twitter

      TP de visualisation spectrale du son

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown