From 658192f83d7ba5bc6ab57d5a038aaf544b17395e Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Mon, 7 Jun 2021 03:20:39 +0900 Subject: [PATCH] audio/internal/readerdriver: Bug fix: A player must be the EOF state when the buffer is empty --- audio/internal/readerdriver/player_unix.go | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/audio/internal/readerdriver/player_unix.go b/audio/internal/readerdriver/player_unix.go index d0573f0f9..e2d1ac414 100644 --- a/audio/internal/readerdriver/player_unix.go +++ b/audio/internal/readerdriver/player_unix.go @@ -172,16 +172,21 @@ func (p *playerImpl) playImpl() { return } - buf := make([]byte, p.context.maxBufferSize()) - for len(p.buf) < p.context.maxBufferSize() { - n, err := p.src.Read(buf) - if err != nil && err != io.EOF { - p.setErrorImpl(err) - return - } - p.buf = append(p.buf, buf[:n]...) - if err == io.EOF { - break + if !p.eof { + buf := make([]byte, p.context.maxBufferSize()) + for len(p.buf) < p.context.maxBufferSize() { + n, err := p.src.Read(buf) + if err != nil && err != io.EOF { + p.setErrorImpl(err) + return + } + p.buf = append(p.buf, buf[:n]...) + if err == io.EOF { + if len(p.buf) == 0 { + p.eof = true + } + break + } } }