package loop import "github.com/gopxl/beep" type loop struct { s beep.StreamSeekCloser remains int } func Loop(count int, s beep.StreamSeekCloser) beep.StreamSeekCloser { return &loop{ s: s, remains: count, } } func (l *loop) Stream(samples [][2]float64) (n int, ok bool) { if l.remains == 0 || l.s.Err() != nil { return 0, false } for len(samples) > 0 { sn, sok := l.s.Stream(samples) if !sok { if l.remains > 0 { l.remains-- } if l.remains == 0 { break } err := l.s.Seek(0) if err != nil { return n, true } continue } samples = samples[sn:] n += sn } return n, true } func (l *loop) Close() error { return l.s.Close() } func (l *loop) Len() int { return 0 } func (l *loop) Position() int { return 0 } func (l *loop) Seek(p int) error { return nil } func (l *loop) Err() error { return l.s.Err() }