audio: Bug fix: Do not create players every call of IsReady

Close #1709
This commit is contained in:
Hajime Hoshi 2021-07-10 19:21:27 +09:00
parent 6d0ffeb7d8
commit 4b7064ac58

View File

@ -71,6 +71,7 @@ type Context struct {
sampleRate int
err error
ready bool
readyOnce sync.Once
players map[playerImpl]struct{}
@ -255,7 +256,9 @@ func (c *Context) IsReady() bool {
return r
}
c.readyOnce.Do(func() {
// Create another goroutine since (*Player).Play can lock the context's mutex.
// TODO: Is this needed for reader players?
go func() {
// The audio context is never ready unless there is a player. This is
// problematic when a user tries to play audio after the context is ready.
@ -264,6 +267,7 @@ func (c *Context) IsReady() bool {
p := NewPlayerFromBytes(c, make([]byte, bufferSize()*2))
p.Play()
}()
})
return r
}