Selaa lähdekoodia

Review issue and added some comments

Ray 8 vuotta sitten
vanhempi
commit
16842233c9
1 muutettua tiedostoa jossa 16 lisäystä ja 10 poistoa
  1. 16 10
      src/audio.c

+ 16 - 10
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