Added volume controls
This commit is contained in:
@@ -2,24 +2,43 @@ package gomus
|
||||
|
||||
import (
|
||||
"github.com/faiface/beep"
|
||||
"github.com/faiface/beep/effects"
|
||||
"github.com/faiface/beep/speaker"
|
||||
)
|
||||
|
||||
const (
|
||||
base = 2
|
||||
minVolume = -5
|
||||
maxVolume = 1
|
||||
startVolume = -2
|
||||
)
|
||||
|
||||
type TrackPlayerEffects struct {
|
||||
volume float64
|
||||
}
|
||||
|
||||
func newTrackPlayerEffects() TrackPlayerEffects {
|
||||
return TrackPlayerEffects{volume: startVolume}
|
||||
}
|
||||
|
||||
type TrackPlayer struct {
|
||||
streamer *beep.StreamSeekCloser
|
||||
playerCtrl *beep.Ctrl
|
||||
playerVol *effects.Volume
|
||||
}
|
||||
|
||||
func (t *TrackPlayer) Play(streamer *beep.StreamSeekCloser) {
|
||||
func (t *TrackPlayer) Play(streamer *beep.StreamSeekCloser, trackEffects *TrackPlayerEffects) {
|
||||
if t.streamer != nil {
|
||||
t.Close()
|
||||
}
|
||||
|
||||
ctrl := &beep.Ctrl{Streamer: beep.Loop(-1, *streamer), Paused: false}
|
||||
speaker.Play(ctrl)
|
||||
volume := &effects.Volume{Streamer: ctrl, Base: base, Volume: trackEffects.volume, Silent: false}
|
||||
speaker.Play(volume)
|
||||
|
||||
t.playerCtrl = ctrl
|
||||
t.streamer = streamer
|
||||
t.playerCtrl = ctrl
|
||||
t.playerVol = volume
|
||||
}
|
||||
|
||||
func (t *TrackPlayer) TogglePause() bool {
|
||||
@@ -30,6 +49,12 @@ func (t *TrackPlayer) TogglePause() bool {
|
||||
return newState
|
||||
}
|
||||
|
||||
func (t *TrackPlayer) SetVolume(volume float64) {
|
||||
speaker.Lock()
|
||||
(*t.playerVol).Volume = volume
|
||||
speaker.Unlock()
|
||||
}
|
||||
|
||||
func (t *TrackPlayer) Close() {
|
||||
(*t.streamer).Close()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user