Browse Source

bool return for failed update

Joshua Reisenauer 9 years ago
parent
commit
790bc72806
3 changed files with 9 additions and 4 deletions
  1. 7 2
      src/audio.c
  2. 1 1
      src/audio.h
  3. 1 1
      src/raylib.h

+ 7 - 2
src/audio.c

@@ -256,6 +256,7 @@ void CloseAudioContext(AudioContext ctx)
             queued--;
         }
         
+        //delete source and buffers
         alDeleteSources(1, &context->alSource);
         alDeleteBuffers(2, context->alBuffer);
         mixChannelsActive_g[context->mixChannel] = NULL;
@@ -266,7 +267,8 @@ void CloseAudioContext(AudioContext ctx)
 
 // Pushes more audio data into context mix channel, if none are ever pushed then zeros are fed in
 // Call "UpdateAudioContext(ctx, NULL, 0)" every game tick if you want to pause the audio
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength)
+// Returns true if data was pushed onto queue, otherwise if queue is full then no data is added and false is returned
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength)
 {
     AudioContext_t *context = (AudioContext_t*)ctx;
     if (context && mixChannelsActive_g[context->mixChannel] == context)
@@ -274,7 +276,9 @@ void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength
         ALint processed = 0;
         ALuint buffer = 0;
         alGetSourcei(context->alSource, AL_BUFFERS_PROCESSED, &processed); // Get the number of already processed buffers (if any)
-
+        
+        if(!processed) return false;//nothing to process, queue is still full
+        
         if (!data || !dataLength)// play silence
             while (processed > 0)
             {
@@ -283,6 +287,7 @@ void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength
                 alSourceQueueBuffers(context->alSource, 1, &buffer);
                 processed--;
             }
+        return true;
     }
 }
 

+ 1 - 1
src/audio.h

@@ -88,7 +88,7 @@ bool IsAudioDeviceReady(void);                                  // True if call
 // all samples are floating point stereo by default
 AudioContext InitAudioContext(unsigned short sampleRate, unsigned char mixChannel);
 void CloseAudioContext(AudioContext ctx);                       // Frees audio context
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
 
 Sound LoadSound(char *fileName);                                // Load sound to memory
 Sound LoadSoundFromWave(Wave wave);                             // Load sound to memory from wave data

+ 1 - 1
src/raylib.h

@@ -874,7 +874,7 @@ bool IsAudioDeviceReady(void);                                  // True if call
 // all samples are floating point stereo by default
 AudioContext InitAudioContext(unsigned short sampleRate, unsigned char mixChannel);
 void CloseAudioContext(AudioContext ctx);                       // Frees audio context
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
 
 Sound LoadSound(char *fileName);                                // Load sound to memory
 Sound LoadSoundFromWave(Wave wave);                             // Load sound to memory from wave data