audio: Refactoring: Remove Loop.pos

This commit is contained in:
Hajime Hoshi 2016-04-03 03:08:45 +09:00
parent 1ec786f83a
commit 911de8d196

View File

@ -21,7 +21,6 @@ import (
type Loop struct { type Loop struct {
stream ReadSeekCloser stream ReadSeekCloser
size int64 size int64
pos int64
} }
func NewLoop(stream ReadSeekCloser, size int64) ReadSeekCloser { func NewLoop(stream ReadSeekCloser, size int64) ReadSeekCloser {
@ -33,8 +32,6 @@ func NewLoop(stream ReadSeekCloser, size int64) ReadSeekCloser {
func (l *Loop) Read(b []byte) (int, error) { func (l *Loop) Read(b []byte) (int, error) {
n, err := l.stream.Read(b) n, err := l.stream.Read(b)
l.pos += int64(n)
l.pos %= l.size
if err == io.EOF { if err == io.EOF {
if _, err := l.Seek(0, 0); err != nil { if _, err := l.Seek(0, 0); err != nil {
return 0, err return 0, err
@ -50,7 +47,11 @@ func (l *Loop) Seek(offset int64, whence int) (int64, error) {
case 0: case 0:
next = offset next = offset
case 1: case 1:
next = int64(l.pos) + offset current, err := l.stream.Seek(0, 1)
if err != nil {
return 0, err
}
next = current + offset
case 2: case 2:
panic("audio: whence must be 0 or 1 for a loop stream") panic("audio: whence must be 0 or 1 for a loop stream")
} }
@ -59,8 +60,7 @@ func (l *Loop) Seek(offset int64, whence int) (int64, error) {
if err != nil { if err != nil {
return 0, err return 0, err
} }
l.pos = pos return pos, nil
return l.pos, nil
} }
func (l *Loop) Close() error { func (l *Loop) Close() error {