current state of player

This commit is contained in:
2025-03-24 14:24:51 -04:00
parent b43c479fc0
commit 1687d4e0a6
+23 -9
View File
@@ -6,13 +6,16 @@ import (
"os" "os"
"time" "time"
"github.com/gopxl/beep"
"github.com/gopxl/beep/mp3" "github.com/gopxl/beep/mp3"
"github.com/gopxl/beep/speaker" "github.com/gopxl/beep/speaker"
) )
type Player struct { type Player struct {
ctx context.Context ctx context.Context
state PlayerState state PlayerState
streamer beep.Streamer
format beep.Format
} }
type PlayerState int type PlayerState int
@@ -36,23 +39,34 @@ func (p *Player) ChangeState(desiredState PlayerState) error {
return nil return nil
} }
func (p *Player) Play() error { func (p *Player) Play(filePath string) error {
f, err := os.Open("test_data/music_library_test/03 anything.mp3") f, err := os.Open(filePath)
if err != nil { if err != nil {
return fmt.Errorf("Failed to open file %w", err) return fmt.Errorf("failed to open file %w", err)
}
if p.streamer == nil || p.format == nil {
} }
streamer, format, err := mp3.Decode(f) streamer, format, err := mp3.Decode(f)
if err != nil { if err != nil {
return fmt.Errorf("Failed to decode mp3 %w", err) return fmt.Errorf("failed to decode mp3 %w", err)
} }
defer streamer.Close() defer streamer.Close()
// initialize the speaker with the sample rate from the file
err = speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)) err = speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10))
if err != nil { if err != nil {
return fmt.Errorf("Failed to initialize speaker %w", err) return fmt.Errorf("failed to initialize speaker %w", err)
} }
speaker.Play(streamer)
select {} // hangs until song finishes playing
done := make(chan bool)
speaker.Play(beep.Seq(streamer, beep.Callback(func() {
done <- true
})))
<-done
return nil return nil
} }