internal void Process() { if (State == AudioClipState.Playing) { if (Source.State == AudioSourceState.Ended && AL.GetSourceState(DeviceSource) == ALSourceState.Stopped) { AL.SourceStop(DeviceSource); State = AudioClipState.Ended; if (Looping) { State = AudioClipState.Playing; int bufferCount = 0; AL.GetSource(DeviceSource, ALGetSourcei.BuffersQueued, out bufferCount); AL.SourceUnqueueBuffers((int)DeviceSource, bufferCount); Source.Reset(); RequeueBuffers(); AL.SourcePlay(DeviceSource); } } int buffersProcessed = 0; AL.GetSource(DeviceSource, ALGetSourcei.BuffersProcessed, out buffersProcessed); while (buffersProcessed > 0) { uint buffer = 0; AL.SourceUnqueueBuffers(DeviceSource, 1, ref buffer); if (Source.State == AudioSourceState.Ended) break; Source.FillBuffer(buffer); AL.SourceQueueBuffer((int)DeviceSource, (int)buffer); buffersProcessed--; } } }
public void Play() { AL.SourcePlay(DeviceSource); State = AudioClipState.Playing; }
public void Pause() { AL.SourcePause(DeviceSource); State = AudioClipState.Paused; }