From a690fbdeb5e1a39cba15619f62cbc857c7bed65a Mon Sep 17 00:00:00 2001 From: Craig Swank Date: Wed, 27 Jan 2021 17:21:33 -0700 Subject: [PATCH 1/3] Seek for flac --- flac/decode.go | 14 ++++++++++++-- go.mod | 2 +- go.sum | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/flac/decode.go b/flac/decode.go index a4a672a..6143b2d 100644 --- a/flac/decode.go +++ b/flac/decode.go @@ -23,7 +23,14 @@ func Decode(r io.Reader) (s beep.StreamSeekCloser, format beep.Format, err error } } }() - d.stream, err = flac.New(r) + + rs, seeker := r.(io.ReadSeeker) + if seeker { + d.stream, err = flac.NewSeek(rs) + } else { + d.stream, err = flac.New(r) + } + if err != nil { return nil, beep.Format{}, errors.Wrap(err, "flac") } @@ -138,8 +145,11 @@ func (d *decoder) Position() int { return d.pos } +// p represents flac sample num perhaps? func (d *decoder) Seek(p int) error { - return errors.New("flac.decoder.Seek: not yet implemented") + pos, err := d.stream.Seek(uint64(p)) + d.pos = int(pos) + return err } func (d *decoder) Close() error { diff --git a/go.mod b/go.mod index dbc3615..b6404dc 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,6 @@ require ( github.com/hajimehoshi/go-mp3 v0.3.0 github.com/hajimehoshi/oto v0.7.1 github.com/jfreymuth/oggvorbis v1.0.1 - github.com/mewkiz/flac v1.0.6 + github.com/mewkiz/flac v1.0.7 github.com/pkg/errors v0.9.1 ) diff --git a/go.sum b/go.sum index c572f2d..94cccd3 100644 --- a/go.sum +++ b/go.sum @@ -30,6 +30,8 @@ github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mewkiz/flac v1.0.6 h1:OnMwCWZPAnjDndjEzLynOZ71Y2U+/QYHoVI4JEKgKkk= github.com/mewkiz/flac v1.0.6/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= +github.com/mewkiz/flac v1.0.7 h1:uIXEjnuXqdRaZttmSFM5v5Ukp4U6orrZsnYGGR3yow8= +github.com/mewkiz/flac v1.0.7/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= github.com/mewkiz/pkg v0.0.0-20190919212034-518ade7978e2 h1:EyTNMdePWaoWsRSGQnXiSoQu0r6RS1eA557AwJhlzHU= github.com/mewkiz/pkg v0.0.0-20190919212034-518ade7978e2/go.mod h1:3E2FUC/qYUfM8+r9zAwpeHJzqRVVMIYnpzD/clwWxyA= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= From 00f18b202e955846c736cde7d5bc772ba94ae35a Mon Sep 17 00:00:00 2001 From: Craig Swank Date: Wed, 27 Jan 2021 17:53:40 -0700 Subject: [PATCH 2/3] only call Seek if ReadSeeker is passed in --- flac/decode.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/flac/decode.go b/flac/decode.go index 6143b2d..bd6893a 100644 --- a/flac/decode.go +++ b/flac/decode.go @@ -27,6 +27,7 @@ func Decode(r io.Reader) (s beep.StreamSeekCloser, format beep.Format, err error rs, seeker := r.(io.ReadSeeker) if seeker { d.stream, err = flac.NewSeek(rs) + d.seekEnabled = true } else { d.stream, err = flac.New(r) } @@ -43,11 +44,12 @@ func Decode(r io.Reader) (s beep.StreamSeekCloser, format beep.Format, err error } type decoder struct { - r io.Reader - stream *flac.Stream - buf [][2]float64 - pos int - err error + r io.Reader + stream *flac.Stream + buf [][2]float64 + pos int + err error + seekEnabled bool } func (d *decoder) Stream(samples [][2]float64) (n int, ok bool) { @@ -147,6 +149,10 @@ func (d *decoder) Position() int { // p represents flac sample num perhaps? func (d *decoder) Seek(p int) error { + if !d.seekEnabled { + return errors.New("flac.decoder.Seek: not enabled") + } + pos, err := d.stream.Seek(uint64(p)) d.pos = int(pos) return err From 108b03e6285c7729a686782db9c06c4ddada44e8 Mon Sep 17 00:00:00 2001 From: Craig Swank Date: Sun, 31 Jan 2021 12:54:30 -0700 Subject: [PATCH 3/3] go mod tidy --- go.sum | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.sum b/go.sum index 94cccd3..a001a2b 100644 --- a/go.sum +++ b/go.sum @@ -28,8 +28,6 @@ github.com/lucasb-eyer/go-colorful v1.0.2 h1:mCMFu6PgSozg9tDNMMK3g18oJBX7oYGrC09 github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mewkiz/flac v1.0.6 h1:OnMwCWZPAnjDndjEzLynOZ71Y2U+/QYHoVI4JEKgKkk= -github.com/mewkiz/flac v1.0.6/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= github.com/mewkiz/flac v1.0.7 h1:uIXEjnuXqdRaZttmSFM5v5Ukp4U6orrZsnYGGR3yow8= github.com/mewkiz/flac v1.0.7/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= github.com/mewkiz/pkg v0.0.0-20190919212034-518ade7978e2 h1:EyTNMdePWaoWsRSGQnXiSoQu0r6RS1eA557AwJhlzHU=