// Resume resumes a paused source. func (s *Source) Resume() { if s.isValid() && s.paused { pool.mutex.Lock() defer pool.mutex.Unlock() al.PlaySources(s.source) s.paused = false } }
// Play starts playing the source. func (s *Source) Play() bool { if s.IsPlaying() { return true } if s.IsPaused() { s.Resume() return true } //claim a source for ourselves and make sure it worked if !pool.claim(s) || !s.isValid() { return false } pool.mutex.Lock() defer pool.mutex.Unlock() if s.isStatic { s.source.SetBuffer(s.staticBuffer) } else { buffers := []al.Buffer{} for i := 0; i < MAX_BUFFERS; i++ { buffer := al.GenBuffers(1)[0] if s.stream(buffer) > 0 { buffers = append(buffers, buffer) } if s.decoder.IsFinished() { break } } if len(buffers) > 0 { s.source.QueueBuffers(buffers...) } } // This Source may now be associated with an OpenAL source that still has // the properties of another Source. Let's reset it to the settings // of the new one. s.reset() // Clear errors. al.Error() al.PlaySources(s.source) // alSourcePlay may fail if the system has reached its limit of simultaneous // playing sources. return al.Error() == al.NoError }