🎉 live server seems to be working now
This commit is contained in:
88
third_party/sendspin-go/examples/basic-player/main.go
vendored
Normal file
88
third_party/sendspin-go/examples/basic-player/main.go
vendored
Normal file
@@ -0,0 +1,88 @@
|
||||
// ABOUTME: Basic Sendspin player example
|
||||
// ABOUTME: Demonstrates how to connect to a server and play audio
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/Sendspin/sendspin-go/pkg/sendspin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
serverAddr := flag.String("server", "localhost:8927", "Sendspin server address")
|
||||
playerName := flag.String("name", "Basic Player", "Player name")
|
||||
volume := flag.Int("volume", 80, "Initial volume (0-100)")
|
||||
flag.Parse()
|
||||
|
||||
config := sendspin.PlayerConfig{
|
||||
ServerAddr: *serverAddr,
|
||||
PlayerName: *playerName,
|
||||
Volume: *volume,
|
||||
BufferMs: 500, // 500ms playback buffer
|
||||
DeviceInfo: sendspin.DeviceInfo{
|
||||
ProductName: "Sendspin Example Player",
|
||||
Manufacturer: "Sendspin",
|
||||
SoftwareVersion: "1.0.0",
|
||||
},
|
||||
OnMetadata: func(meta sendspin.Metadata) {
|
||||
log.Printf("Now playing: %s - %s (%s)", meta.Artist, meta.Title, meta.Album)
|
||||
},
|
||||
OnStateChange: func(state sendspin.PlayerState) {
|
||||
log.Printf("State changed: %s (volume: %d, muted: %v)", state.State, state.Volume, state.Muted)
|
||||
},
|
||||
OnError: func(err error) {
|
||||
log.Printf("Error: %v", err)
|
||||
},
|
||||
}
|
||||
|
||||
player, err := sendspin.NewPlayer(config)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create player: %v", err)
|
||||
}
|
||||
defer player.Close()
|
||||
|
||||
log.Printf("Connecting to %s...", *serverAddr)
|
||||
if err := player.Connect(); err != nil {
|
||||
log.Fatalf("Failed to connect: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("Connected! Starting playback...")
|
||||
|
||||
if err := player.Play(); err != nil {
|
||||
log.Fatalf("Failed to start playback: %v", err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
status := player.Status()
|
||||
stats := player.Stats()
|
||||
if status.Connected {
|
||||
log.Printf("Status: %s | %s %dHz %dch %dbit | Buffer: %dms | RTT: %dμs",
|
||||
status.State,
|
||||
status.Codec,
|
||||
status.SampleRate,
|
||||
status.Channels,
|
||||
status.BitDepth,
|
||||
stats.BufferDepth,
|
||||
stats.SyncRTT)
|
||||
}
|
||||
// Sleep for 5 seconds
|
||||
select {
|
||||
case <-make(chan struct{}):
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Wait for interrupt signal
|
||||
fmt.Println("\nPress Ctrl+C to stop playback")
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
<-sigChan
|
||||
|
||||
log.Printf("Shutting down...")
|
||||
}
|
||||
Reference in New Issue
Block a user