changeset 786:bc95f8a6d89c

Add audio sample size information into the engine structure.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 04 Aug 2013 11:31:53 +0300
parents dbf5772690a8
children e8153e8a948e
files dmengine.h dmsimple.c
diffstat 2 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/dmengine.h	Sat Aug 03 23:48:46 2013 +0300
+++ b/dmengine.h	Sun Aug 04 11:31:53 2013 +0300
@@ -258,6 +258,7 @@
     DMMutex *audioStreamMutex;
     Uint8 * audioStreamBuf;
     size_t audioStreamLen;      // Length in samples
+    int audioSampleSize;        // Size of one audio sample in bytes (incl. all channels)
 
     // No-sound audio simulation thread stuff
     SDL_Thread *audioSimThread;
--- a/dmsimple.c	Sat Aug 03 23:48:46 2013 +0300
+++ b/dmsimple.c	Sun Aug 04 11:31:53 2013 +0300
@@ -722,24 +722,22 @@
     engine.audioStatus      = SDL_AUDIO_STOPPED;
     engine.optAfmt.callback = engineAudioCallback;
     engine.audioStreamMutex = dmCreateMutex();
+
+    engine.audioSampleSize  = engine.optAfmt.channels;
+    switch (engine.optAfmt.format)
+    {
+        case AUDIO_S16SYS:
+        case AUDIO_U16SYS: engine.audioSampleSize *= 2; break;
+    }
     
     if (SDL_OpenAudio(&engine.optAfmt, NULL) < 0)
     {
-        int sampleSize;
-
         // We'll let this pass, as we want to support no-sound.
         dmError("Couldn't open SDL audio, falling back to no sound: %s\n", SDL_GetError());
 
         // Set up simulated audio thread
-        sampleSize = engine.optAfmt.channels;
-        switch (engine.optAfmt.format)
-        {
-            case AUDIO_S16SYS:
-            case AUDIO_U16SYS: sampleSize *= 2; break;
-        }
-
-        engine.audioSimDelay   = 1000 / 50;
-        engine.audioSimBufSize = (engine.optAfmt.freq / 50) * sampleSize;
+        engine.audioSimDelay   = 1000 / 45;
+        engine.audioSimBufSize = (engine.optAfmt.freq / 45) * engine.audioSampleSize;
         engine.audioSimBuf     = dmMalloc(engine.audioSimBufSize);
         engine.audioSimDone    = FALSE;
         engine.audioSimThread  = SDL_CreateThread(engineAudioThreadFunc, NULL);