private void PlatformUpdateQueue() { // Get the completed buffers AL.GetSource(SourceId.Value, ALGetSourcei.BuffersProcessed, out int numBuffers); ALHelper.CheckError("Failed to get processed buffer count."); // Unqueue them if (numBuffers > 0) { AL.SourceUnqueueBuffers(SourceId.Value, numBuffers); ALHelper.CheckError("Failed to unqueue buffers."); lock (_queuedBuffers) { for (int i = 0; i < numBuffers; i++) { var buffer = _queuedBuffers.Dequeue(); ALBufferPool.Return(buffer); } } } // Raise the event for each removed buffer, if needed for (int i = 0; i < numBuffers; i++) { CheckBufferCount(); } }
private void PlatformStop() { AL.SourceStop(SourceId.Value); ALHelper.CheckError("Failed to stop the source."); // Remove all queued buffers AL.Source(SourceId.Value, ALSourcei.Buffer, 0); ALHelper.CheckError("Failed to unbind the buffer."); lock (_queuedBuffers) { while (_queuedBuffers.Count > 0) { var buffer = _queuedBuffers.Dequeue(); ALBufferPool.Return(buffer); } } }
private void PlatformDispose(bool disposing) { // SFXI disposal handles buffer detachment and source recycling base.Dispose(disposing); if (disposing) { lock (_queuedBuffers) { while (_queuedBuffers.Count > 0) { var buffer = _queuedBuffers.Dequeue(); ALBufferPool.Return(buffer); } } } DynamicSoundEffectInstanceManager.RemoveInstance(this); }