Après de nombreux essais infructueux, je sollicite votre aide pour jouer des sons dans un programme.
Voici ce que je voudrais :
- ce programme est une sorte de jeu
- le programme joue toutes les secondes des sons (fichiers .wav) d'une longueur de l'ordre de la seconde (c'est une voix qui prononce un mot).
- de temps en temps (si l'utilisateur clique mal) on joue un son indiquant l'erreur ("ding!")
voici les problèmes que je rencontre :
- il y a des craquements par-ci par-là, parfois des grésillements.
- il y a parfois de l'echo
Impossible d'avoir un son nickel, alors que tout le monde y arrive ! Je dois rater quelque chose.
Voici ce que j'ai essayé et l'état de mes connaissances :
- j'ouvre le device audio, en précisant : nombre de canaux, fréquence d'échantillonnage et taille des échantillons
- j'ouvre mes fichiers .wav just'avant de jouer le son, et je les balance vers le device audio. (dans un thread séparé je crois en général)
J'ai essayé en C, C++, python. Avec les bibliothèques SDL, SDL_mixer, tkSnack, ossdev, alsaaudio, sox.
Exemple de code avec la lib SDL et SDL_mixer :
au début :
Mix_OpenAudio(48000, AUDIO_S16SYS, 1, 2048);
et ensuite, périodiquement (pour simplifier j'ai ôté la gestion des erreurs) :
Mix_Chunk *sound = 0;
sound = Mix_LoadWAV(filename);
Mix_PlayChannel(-1, sound, 0); // -1 for any channel
J'ai aussi essayé d'ouvrir/fermer le device audio à chaque fois, mais ça ne change rien.
Merci.
# un scratch
Posté par goeb . Évalué à 1.
j'ai un peu mieux lu la doc SDL_mixer. je vais faire d'autres tests...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.