Aide SDL audio

Aide SDL audio - C - Programmation

Marsh Posté le 01-03-2019 à 09:37:04    

Bonjour,
 
J'ai un petit souci de compréhension, donc j'ai mis du son dans mon petit projet avec cette fonction :
 

Code :
  1. void playSound(char* path)
  2. {
  3.     SDL_AudioSpec wavSpec;
  4.     Uint32 wavLength;
  5.     Uint8 *wavBuffer;
  6.     SDL_LoadWAV(path, &wavSpec, &wavBuffer, &wavLength);
  7.     SDL_AudioDeviceID deviceId = SDL_OpenAudioDevice(NULL, 0, &wavSpec, NULL, 0);
  8.      SDL_QueueAudio(deviceId, wavBuffer, wavLength);
  9.     SDL_PauseAudioDevice(deviceId, 0);
  10.     if (SDL_GetQueuedAudioSize(deviceId) == 0) {
  11.      
  12.         SDL_CloseAudioDevice(deviceId);
  13.         SDL_FreeWAV(wavBuffer);
  14.     }
  15. }


 
que j'appelle à chaque fois que nécessaire. Mais le son va se jouer un certain nombre de fois ( par exemple le petit son du hover lorsqu’on passe sur un  bouton) puis après plus rien.
J'ai bien compris que lorsque le GetQueuedAudioSize = 0, plus rien ne sort, mais je pensais qu'en rappelant la fonction ça réinitialise mais rien du tout.
 Il y 'a quelque chose que j'ai pas compris, pouvez vous m’éclairer ?
 
ps : Pour info, je n'ai pas le droit à une autre lib.
Merci


Message édité par R-a-p-h2 le 01-03-2019 à 09:40:32
Reply

Marsh Posté le 01-03-2019 à 09:37:04   

Reply

Marsh Posté le 04-03-2019 à 12:16:19    

J'ai trouvé,
 
Si ça doit aider quelq'un :  
dans le  .h

Code :
  1. typedef struct son_s {
  2.     SDL_AudioSpec wavSpec;
  3.     Uint32 wavLength;
  4.     Uint8 *wavBuffer;
  5.     SDL_AudioDeviceID deviceId;
  6. }son_t;


 
Si plusieurs sons, vous faites un tableau de structure.
 
dans le .c
 

Code :
  1. void closeAudio(son_t* son)
  2. {
  3.     SDL_CloseAudioDevice(son->deviceId);
  4. }


 

Code :
  1. son_t* initAudio(char* path)
  2. {
  3.     son_t* son = malloc(sizeof(son_t));
  4.     if (!son) {
  5.         return NULL ;
  6.     }
  7.     SDL_LoadWAV(path, &son->wavSpec, &son->wavBuffer, &son->wavLength);
  8.     son->deviceId = SDL_OpenAudioDevice(NULL, 0, &son->wavSpec, NULL, 0);
  9.     return son;
  10. }


 

Code :
  1. void playSound(son_t* son)
  2. {
  3.     SDL_QueueAudio(son->deviceId, son->wavBuffer, son->wavLength);
  4.     SDL_PauseAudioDevice(son->deviceId, 0);
  5.    if (SDL_GetQueuedAudioSize(son->deviceId) == 0) {
  6.         SDL_FreeWAV(son->wavBuffer);
  7.     }
  8. }


 
voila voila.  
ps: si suggestion, je prends  
Bonne journée

Reply

Marsh Posté le 09-03-2019 à 15:03:53    

Utilise SDL_mixer !
https://www.libsdl.org/projects/SDL [...] frame.html
 
Initialisation:

Code :
  1. Mix_Init(MIX_INIT_MP3);
  2. Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024);
  3. Mix_Chunk lesonquitue = Mix_LoadWAV("lesonquitue.wav" );


 
Utilisation:

Code :
  1. Mix_PlayChannel(-1, lesonquitue, 0);


 
Nettoyage:

Code :
  1. Mix_FreeChunk(lesonquitue);
  2. Mix_CloseAudio();
  3. Mix_Quit();


 

Reply

Marsh Posté le 09-03-2019 à 16:29:57    

hey hey j'avais pas le droit à une autre lib ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed