68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package player
|
|
|
|
import "time"
|
|
|
|
// Engine is the interface used by the TUI model to control audio playback.
|
|
// It is satisfied by *Player and can be replaced with a mock for testing.
|
|
type Engine interface {
|
|
// Playback control
|
|
Play(path string, knownDuration time.Duration) error
|
|
PlayYTDL(pageURL string, knownDuration time.Duration) error
|
|
Preload(path string, knownDuration time.Duration) error
|
|
PreloadYTDL(pageURL string, knownDuration time.Duration) error
|
|
ClearPreload()
|
|
Stop()
|
|
Close()
|
|
TogglePause()
|
|
|
|
// Seeking
|
|
Seek(d time.Duration) error
|
|
SeekYTDL(d time.Duration) error
|
|
CancelSeekYTDL()
|
|
|
|
// State queries
|
|
IsPlaying() bool
|
|
IsPaused() bool
|
|
Drained() bool
|
|
HasPreload() bool
|
|
Seekable() bool
|
|
IsStreamSeek() bool
|
|
IsYTDLSeek() bool
|
|
GaplessAdvanced() bool
|
|
|
|
// Position and duration
|
|
Position() time.Duration
|
|
Duration() time.Duration
|
|
PositionAndDuration() (time.Duration, time.Duration)
|
|
|
|
// Volume
|
|
SetVolumeMin(db float64)
|
|
VolumeMin() float64
|
|
SetVolume(db float64)
|
|
Volume() float64
|
|
|
|
// Speed
|
|
SetSpeed(ratio float64)
|
|
Speed() float64
|
|
|
|
// Mono
|
|
ToggleMono()
|
|
Mono() bool
|
|
|
|
// EQ
|
|
SetEQBand(band int, dB float64)
|
|
EQBands() [10]float64
|
|
|
|
// Stream info
|
|
StreamErr() error
|
|
StreamTitle() string
|
|
StreamBytes() (downloaded, total int64)
|
|
|
|
// Audio samples for visualizer
|
|
SamplesInto(dst []float64) int
|
|
SampleRate() int
|
|
}
|
|
|
|
// Compile-time check that *Player satisfies Engine.
|
|
var _ Engine = (*Player)(nil)
|