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

  FORUM HardWare.fr
  Programmation
  C

  Aide SDL audio

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide SDL audio

n°2329828
R-a-p-h2
Posté le 01-03-2019 à 09:37:04  profilanswer
 

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
mood
Publicité
Posté le 01-03-2019 à 09:37:04  profilanswer
 

n°2329968
R-a-p-h2
Posté le 04-03-2019 à 12:16:19  profilanswer
 

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

n°2330225
404 Not Fo​und
Posté le 09-03-2019 à 15:03:53  profilanswer
 

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();


 

n°2330228
R-a-p-h2
Posté le 09-03-2019 à 16:29:57  profilanswer
 

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


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

  Aide SDL audio

 

Sujets relatifs
besoin d'aide Shell/bash svpImpossible de faire un slider besoin d'aide
Paralléliser les tris à l'aide de forkaide Spring boot /jquery /api
aide pointeur [résolu]Demande d'aide pour un proramme de verrouillage arduino
aide lua[Aide] Création jeu textuel
Aide récupérer les derniers status de chaque jobaide pour prg
Plus de sujets relatifs à : Aide SDL audio


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