summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRay <[email protected]>2017-05-10 19:34:57 +0200
committerRay <[email protected]>2017-05-10 19:34:57 +0200
commit16842233c92cec78bb3771c711269b43be33c241 (patch)
tree0dd400f3c910e4ceb289c481bf3c5c6cbb01b531
parent0880be638e94bafb49aaa7465973716938306145 (diff)
downloadraylib-16842233c92cec78bb3771c711269b43be33c241.tar.gz
raylib-16842233c92cec78bb3771c711269b43be33c241.zip
Review issue and added some comments
-rw-r--r--src/audio.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/audio.c b/src/audio.c
index 39befbbc..3005586f 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -801,20 +801,26 @@ void ResumeMusicStream(Music music)
}
// Stop music playing (close stream)
+// TODO: To clear a buffer, make sure they have been already processed!
void StopMusicStream(Music music)
{
alSourceStop(music->stream.source);
+ /*
// Clear stream buffers
+ // WARNING: Queued buffers must have been processed before unqueueing and reloaded with data!!!
void *pcm = calloc(AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, 1);
-
+
for (int i = 0; i < MAX_STREAM_BUFFERS; i++)
{
- UpdateAudioStream(music->stream, pcm, AUDIO_BUFFER_SIZE);
- //alBufferData(music->stream.buffers[i], music->stream.format, pcm, AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, music->stream.sampleRate);
+
+
+ //UpdateAudioStream(music->stream, pcm, AUDIO_BUFFER_SIZE); // Update one buffer at a time
+ alBufferData(music->stream.buffers[i], music->stream.format, pcm, AUDIO_BUFFER_SIZE*music->stream.sampleSize/8*music->stream.channels, music->stream.sampleRate);
}
free(pcm);
+ */
// Restart music context
switch (music->ctxType)
@@ -896,9 +902,9 @@ void UpdateMusicStream(Music music)
break;
}
}
-
- // This error is registered when UpdateAudioStream() fails
- if (alGetError() == AL_INVALID_VALUE) TraceLog(WARNING, "OpenAL: Error buffering data...");
+
+ // Free allocated pcm data
+ free(pcm);
// Reset audio stream for looping
if (!active)
@@ -918,8 +924,6 @@ void UpdateMusicStream(Music music)
// just make sure to play again on window restore
if (state != AL_PLAYING) PlayMusicStream(music);
}
-
- free(pcm);
}
}
@@ -1066,7 +1070,8 @@ void CloseAudioStream(AudioStream stream)
}
// Update audio stream buffers with data
-// NOTE: Only updates one buffer per call
+// NOTE 1: Only updates one buffer of the stream source: unqueue -> update -> queue
+// NOTE 2: To unqueue a buffer it needs to be processed: IsAudioBufferProcessed()
void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
{
ALuint buffer = 0;
@@ -1075,9 +1080,10 @@ void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
// Check if any buffer was available for unqueue
if (alGetError() != AL_INVALID_VALUE)
{
- alBufferData(buffer, stream.format, data, samplesCount*stream.channels*stream.sampleSize/8, stream.sampleRate);
+ alBufferData(buffer, stream.format, data, samplesCount*stream.sampleSize/8*stream.channels, stream.sampleRate);
alSourceQueueBuffers(stream.source, 1, &buffer);
}
+ else TraceLog(WARNING, "[AUD ID %i] Audio buffer not available for unqueuing", stream.source);
}
// Check if any audio stream buffers requires refill