aboutsummaryrefslogtreecommitdiff
path: root/src/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio.c')
-rw-r--r--src/audio.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/audio.c b/src/audio.c
index 7100a6c1..7b42b089 100644
--- a/src/audio.c
+++ b/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;
}
}