Bonjour,
Je souhaite être capable de régler le volume audio dans le logiciel Netgens [1] (un émulateur Megadrive).
Donc, j'utilise la fonction SDL_MixAudio.
J'ai juste à remplacer la fonction "memcpy" par la fonction "SDL_MixAudio" :
Mais quand je fais ça, l'audio que j'entends n'est pas correct.
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 $ svn diff src/gens/sdllayer/g_sdlsound.c Index: src/gens/sdllayer/g_sdlsound.c =================================================================== --- src/gens/sdllayer/g_sdlsound.c (revision 9) +++ src/gens/sdllayer/g_sdlsound.c (working copy) @@ -12,6 +12,7 @@ #include "pcm.h" #include "misc.h" // for Have_MMX flag #include "support.h" +#include "audio.h" /* for Audio_Volume */ int Seg_To_Buffer = 8; // for frame skip int Seg_L[882], Seg_R[882]; @@ -38,13 +39,16 @@ { if (audio_len < (int) len) { - memcpy (buffer, user, audio_len); + /*memcpy (buffer, user, audio_len);*/ + SDL_MixAudio(buffer, user, audio_len, Audio_Volume); audio_len = 0; return; } - memcpy (buffer, user, len); + /*memcpy (buffer, user, len);*/ + SDL_MixAudio(buffer, user, len, Audio_Volume); audio_len -= len; - memcpy (user, (unsigned char *) user + len, audio_len); + /*memcpy (user, (unsigned char *) user + len, audio_len);*/ + SDL_MixAudio(user, (unsigned char *) user + len, audio_len, Audio_Volume); }
J'ai lu [2] qui semble être un problème similaire.
La solution est d'initialiser correctement le buffer audio en utilisant la fonction memset.
Mais dans mon cas, le buffer semble être déjà correctement initialisé car la fonction memset est déjà utlisée quelque part dans ce fichier.
Quoi qu'il en soit, si j'utilise le fonction memset avant les appels à SDL_MixAudio, alors je n'entends rien :
Donc avez-vous une idée de comment je peux remplacer memcpy par SDL_MixAudio dans ce code pour être capable de régler le volume audio ? (et conserver un audio correct)
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 $ svn diff src/gens/sdllayer/g_sdlsound.c Index: src/gens/sdllayer/g_sdlsound.c =================================================================== --- src/gens/sdllayer/g_sdlsound.c (revision 9) +++ src/gens/sdllayer/g_sdlsound.c (working copy) @@ -12,6 +12,7 @@ #include "pcm.h" #include "misc.h" // for Have_MMX flag #include "support.h" +#include "audio.h" /* for Audio_Volume */ int Seg_To_Buffer = 8; // for frame skip int Seg_L[882], Seg_R[882]; @@ -38,13 +39,19 @@ { if (audio_len < (int) len) { - memcpy (buffer, user, audio_len); + /*memcpy (buffer, user, audio_len);*/ + memset(buffer, 0, audio_len); + SDL_MixAudio(buffer, user, audio_len, Audio_Volume); audio_len = 0; return; } - memcpy (buffer, user, len); + /*memcpy (buffer, user, len);*/ + memset(buffer, 0, len); + SDL_MixAudio(buffer, user, len, Audio_Volume); audio_len -= len; - memcpy (user, (unsigned char *) user + len, audio_len); + /*memcpy (user, (unsigned char *) user + len, audio_len);*/ + memset(user, 0, audio_len); + SDL_MixAudio(user, (unsigned char *) user + len, audio_len, Audio_Volume); }
Merci beaucoup.
PS : j'ai déjà posé cette question sur le mailing-list de SDL [3] et à l'auteur de Gens (l'émulateur original) [4] mais aucune réponse...
[1] http://sourceforge.net/projects/netgens/
[2] http://forums.libsdl.org/viewtopic.p...c0b7fa9f45db36
[3] http://lists.libsdl.org/pipermail/sd...ay/088327.html
[4] https://www.youtube.com/user/stefda
Partager