foxygit / doom Log in
commit cc93c797921f08d48ac8dfc64fefcf7725a84517
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Thu May 7 21:59:38 2009 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Thu May 7 21:59:38 2009 +0000

    Calculate SDL buffer size automatically based on sample rate.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 1511
---
 pcsound/pcsound_sdl.c | 7 ++++++-
 src/i_sdlsound.c      | 7 +++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/pcsound/pcsound_sdl.c b/pcsound/pcsound_sdl.c
index f862dfa7..546e6a36 100644
--- a/pcsound/pcsound_sdl.c
+++ b/pcsound/pcsound_sdl.c
@@ -32,6 +32,7 @@
 #include "pcsound.h"
 #include "pcsound_internal.h"

+#define SOUND_SLICE_TIME 100 /* ms */
 #define SQUARE_WAVE_AMP 0x2000

 // If true, we initialised SDL and have the responsibility to shut it
@@ -165,6 +166,8 @@ static void PCSound_SDL_Shutdown(void)

 static int PCSound_SDL_Init(pcsound_callback_func callback_func)
 {
+    int slicesize;
+
     // Check if SDL_mixer has been opened already
     // If not, we must initialise it now

@@ -176,7 +179,9 @@ static int PCSound_SDL_Init(pcsound_callback_func callback_func)
             return 0;
         }

-        if (Mix_OpenAudio(pcsound_sample_rate, AUDIO_S16SYS, 2, 1024) < 0)
+        slicesize = (SOUND_SLICE_TIME * pcsound_sample_rate) / 1000;
+
+        if (Mix_OpenAudio(pcsound_sample_rate, AUDIO_S16SYS, 2, slicesize) < 0)
         {
             fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError());

diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c
index f3af667e..34adf9de 100644
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -49,6 +49,7 @@
 #include "doomdef.h"

 #define LOW_PASS_FILTER
+#define SOUND_SLICE_TIME 100 /* ms */
 #define NUM_CHANNELS 16

 static boolean sound_initialised = false;
@@ -666,10 +667,10 @@ static void I_SDL_ShutdownSound(void)
     sound_initialised = false;
 }

-
 static boolean I_SDL_InitSound(void)
 {
     int i;
+    int slicesize;

     // No sounds yet

@@ -689,7 +690,9 @@ static boolean I_SDL_InitSound(void)
         return false;
     }

-    if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, 1024) < 0)
+    slicesize = (snd_samplerate * SOUND_SLICE_TIME) / 1000;
+
+    if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, slicesize) < 0)
     {
         fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError());
         return false;