package main import ( "fmt" "github.com/xthexder/go-jack" ) var jackClient *jack.Client func initJack() { jackClient, _ = jack.ClientOpen(config.Jack.ClientName, jack.NoStartServer) if jackClient == nil { fmt.Println("Could not connect to jack server.") return } if code := jackClient.SetProcessCallback(processJackCb); code != 0 { fmt.Println("Failed to set process callback.") return } if code := jackClient.Activate(); code != 0 { fmt.Println("Failed to activate client:", jack.StrError(code)) return } } func stopJack() { jackClient.Close() } func registerJackPort(name string, channels uint8, flags uint64) []*jack.Port { if channels > 2 { fmt.Printf("WARN! Parameters of jack port %s changed: more than 2 channels not implemented, using 2 channels", name) channels = 2 } var i uint8 = 0 var ports []*jack.Port = []*jack.Port{} for i < channels { i++ portName := fmt.Sprintf("%s_%d", name, i) port := jackClient.PortRegister(portName, jack.DEFAULT_AUDIO_TYPE, flags, 0) if port == nil { fmt.Printf("WARN! Failed registering jack port %s\n", portName) continue } ports = append(ports, port) } return ports } func unregisterJackPort(ports []*jack.Port) { for _, p := range ports { ret := jackClient.PortUnregister(p) if ret != 0 { fmt.Printf("WARN! Failed unregistering jack port!\n") } } }