package main import ( "flag" "fmt" "log" "os" "os/signal" "syscall" "github.com/Sendspin/sendspin-go/pkg/sendspin" "rpi-sendspin/internal/pipewire" ) func main() { port := flag.Int("port", 8927, "listen port") name := flag.String("name", "Sendspin Server", "server name") source := flag.String("source", "", "PipeWire source node name") listSources := flag.Bool("list-sources", false, "list available PipeWire sources and exit") rate := flag.Int("rate", 48000, "capture sample rate") channels := flag.Int("channels", 2, "capture channels") flag.Parse() if *listSources { printSources() return } if *source == "" { sources, err := pipewire.ListSources() if err != nil { log.Fatalf("list sources: %v", err) } if len(sources) == 0 { log.Fatal("no PipeWire sources found; is PipeWire running?") } fmt.Println("Available PipeWire sources:") for i, s := range sources { fmt.Printf(" %d. %s\n", i+1, s) } fmt.Printf("\nSpecify a source with --source \n") fmt.Printf("Example: --source %s\n", sources[0].Name) os.Exit(1) } src := pipewire.NewSource(*source, *rate, *channels) log.Printf("capturing from %q at %d Hz %d ch", *source, *rate, *channels) server, err := sendspin.NewServer(sendspin.ServerConfig{ Port: *port, Name: *name, Source: src, }) if err != nil { log.Fatalf("create server: %v", err) } if err := server.Start(); err != nil { log.Fatalf("start server: %v", err) } log.Printf("server %q listening on :%d", *name, *port) sig := make(chan os.Signal, 1) signal.Notify(sig, os.Interrupt, syscall.SIGTERM) <-sig log.Println("stopping") server.Stop() src.Close() } func printSources() { sources, err := pipewire.ListSources() if err != nil { log.Fatalf("list sources: %v", err) } if len(sources) == 0 { fmt.Println("no PipeWire sources found") return } fmt.Println("Available PipeWire sources:") for _, s := range sources { fmt.Printf(" %s\n", s) } }