Bonjour,

J'ai essayer de compiler ce bout de code(que j'ai trouvé dans un tutoriel sur internet) mais lorsque le programme ce lance j'obtiens une erreur de segmentation. Voilà le code:

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
 
#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
   int continuer = 1;
   int o = 0;
   int p = 0;
   SDL_Init(SDL_INIT_VIDEO);
   SDL_Surface *ecran = NULL;
   ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
   SDL_Event event;
   SDL_WM_SetCaption("SDL_Mixer", NULL);
   SDL_Flip(ecran);
   if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) == -1) //Initialisation de l'API Mixer
   {
      printf("%s", Mix_GetError());
   }
   Mix_AllocateChannels(32); //Allouer 32 canaux
   Mix_Volume(1, MIX_MAX_VOLUME/2); //Mettre à mi-volume le post 
   Mix_Chunk *kick = Mix_LoadWAV("bd01.wav"); //Charger un wav dans un pointeur
   Mix_Chunk *snare = Mix_LoadWAV("snare.wav");
   Mix_VolumeChunk(kick, MIX_MAX_VOLUME/2); //Mettre un volume pour ce wav
   //Mix_VolumeChunk(snare, MIX_MAX_VOLUME);
 
   while(continuer)
   {
      SDL_WaitEvent(&event);
      switch(event.type)
      {
         case SDL_QUIT:
            continuer = 0;
            break;
         case SDL_KEYDOWN:
            switch (event.key.keysym.sym)
            {
               case SDLK_a:
                  Mix_PlayChannel(1, kick, 0);//Joue le son 1 sur le canal 1 ; le joue une fois (0 + 1)
                  break;
               case SDLK_z:
                  Mix_PlayChannel(2, snare, 0);//Joue le son 2 sur le canal 2 ; le joue 3 fois (2 + 1)
                  break;
            }
            break;
      }
   }
   Mix_FreeChunk(kick);//Libération du son 1
   Mix_FreeChunk(snare);
   Mix_CloseAudio(); //Fermeture de l'API
   SDL_Quit();
   return EXIT_SUCCESS;
}
J'utillise la commande suivante pour compiler:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
gcc main.c `sdl-config --cflags` -lSDL -lSDL_mixer -o main `sdl-config --libs`
Voilà ce que renvois gdb:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Thread 1 "main" received signal SIGSEGV, Segmentation fault.
0x00007ffff78f7d82 in Mix_VolumeChunk ()
   from /usr/lib/x86_64-linux-gnu/libSDL_mixer-1.2.so.0
Les librairies lidsdl-dev et lisdl-mixer-dev sont bien installée. Je vois pas ce qui peut ne pas marcher. D'autre ont eu ce problème, et ont pu régler le problème en ajoutant le fichier son dans la dossier ou se trouvait l'éxécutable, sauf que dans mon cas le fichiers audio est déjà dans le même dossier que exécutable. Je sais si celà est lié, mais je suis sur linux, Linux Mint 18.2 pour être précis.

EDIT: Problème résolus, j'utillisais un fichier mono et non pas un stéréo. J'ai remplacerle fichier par un fichier stéréo et tout fonctionne.