diff --git a/cmd/bus.go b/cmd/bus.go index 6b50f22..0f66269 100644 --- a/cmd/bus.go +++ b/cmd/bus.go @@ -45,7 +45,7 @@ var busMuteCmd = &cobra.Command{ return } - err := client.SetBusMute(busNum, muted) + err := client.Bus.SetMute(busNum, muted) if err != nil { cmd.PrintErrln("Error setting bus mute status:", err) return @@ -79,7 +79,7 @@ For example: busIndex := mustConvToInt(args[0]) if len(args) == 1 { - level, err := client.BusFader(busIndex) + level, err := client.Bus.Fader(busIndex) if err != nil { cmd.PrintErrln("Error getting bus fader level:", err) return @@ -95,7 +95,7 @@ For example: level := mustConvToFloat64(args[1]) - err := client.SetBusFader(busIndex, level) + err := client.Bus.SetFader(busIndex, level) if err != nil { cmd.PrintErrln("Error setting bus fader level:", err) return @@ -139,7 +139,7 @@ For example: target = mustConvToFloat64(args[1]) } - currentFader, err := client.BusFader(busIndex) + currentFader, err := client.Bus.Fader(busIndex) if err != nil { cmd.PrintErrln("Error getting current bus fader level:", err) return @@ -156,7 +156,7 @@ For example: for currentFader > target { currentFader -= 1.0 - err := client.SetBusFader(busIndex, currentFader) + err := client.Bus.SetFader(busIndex, currentFader) if err != nil { cmd.PrintErrln("Error setting bus fader level:", err) return @@ -203,7 +203,7 @@ For example: target = mustConvToFloat64(args[1]) } - currentFader, err := client.BusFader(busIndex) + currentFader, err := client.Bus.Fader(busIndex) if err != nil { cmd.PrintErrln("Error getting current bus fader level:", err) return @@ -220,7 +220,7 @@ For example: for currentFader < target { currentFader += 1.0 - err := client.SetBusFader(busIndex, currentFader) + err := client.Bus.SetFader(busIndex, currentFader) if err != nil { cmd.PrintErrln("Error setting bus fader level:", err) return diff --git a/internal/xair/bus.go b/internal/xair/bus.go new file mode 100644 index 0000000..8ffe34f --- /dev/null +++ b/internal/xair/bus.go @@ -0,0 +1,66 @@ +package xair + +import "fmt" + +type Bus struct { + client Client +} + +func NewBus(c Client) *Bus { + return &Bus{ + client: c, + } +} + +// Mute requests the current mute status for a bus +func (b *Bus) Mute(bus int) (bool, error) { + formatter := b.client.addressMap["bus"] + address := fmt.Sprintf(formatter, bus) + "/mix/on" + err := b.client.SendMessage(address) + if err != nil { + return false, err + } + + resp := <-b.client.respChan + val, ok := resp.Arguments[0].(int32) + if !ok { + return false, fmt.Errorf("unexpected argument type for bus mute value") + } + return val == 0, nil +} + +// SetMute sets the mute status for a specific bus (1-based indexing) +func (b *Bus) SetMute(bus int, muted bool) error { + formatter := b.client.addressMap["bus"] + address := fmt.Sprintf(formatter, bus) + "/mix/on" + var value int32 + if !muted { + value = 1 + } + return b.client.SendMessage(address, value) +} + +// Fader requests the current fader level for a bus +func (b *Bus) Fader(bus int) (float64, error) { + formatter := b.client.addressMap["bus"] + address := fmt.Sprintf(formatter, bus) + "/mix/fader" + err := b.client.SendMessage(address) + if err != nil { + return 0, err + } + + resp := <-b.client.respChan + val, ok := resp.Arguments[0].(float32) + if !ok { + return 0, fmt.Errorf("unexpected argument type for bus fader value") + } + + return mustDbFrom(float64(val)), nil +} + +// SetFader sets the fader level for a specific bus (1-based indexing) +func (b *Bus) SetFader(bus int, level float64) error { + formatter := b.client.addressMap["bus"] + address := fmt.Sprintf(formatter, bus) + "/mix/fader" + return b.client.SendMessage(address, float32(mustDbInto(level))) +} diff --git a/internal/xair/client.go b/internal/xair/client.go index 18f0c56..b9b5acf 100644 --- a/internal/xair/client.go +++ b/internal/xair/client.go @@ -16,6 +16,7 @@ type parser interface { type Client struct { engine Strip *Strip + Bus *Bus } // NewClient creates a new XAirClient instance @@ -56,6 +57,7 @@ func NewClient(mixerIP string, mixerPort int, opts ...Option) (*Client, error) { engine: *e, } c.Strip = NewStrip(*c) + c.Bus = NewBus(*c) return c, nil } @@ -106,61 +108,6 @@ func (c *Client) RequestStatus() error { return c.SendMessage("/status") } -/* BUS METHODS */ - -// BusMute requests the current mute status for a bus -func (c *Client) BusMute(bus int) (bool, error) { - formatter := c.addressMap["bus"] - address := fmt.Sprintf(formatter, bus) + "/mix/on" - err := c.SendMessage(address) - if err != nil { - return false, err - } - - resp := <-c.respChan - val, ok := resp.Arguments[0].(int32) - if !ok { - return false, fmt.Errorf("unexpected argument type for bus mute value") - } - return val == 0, nil -} - -// SetBusMute sets the mute status for a specific bus (1-based indexing) -func (c *Client) SetBusMute(bus int, muted bool) error { - formatter := c.addressMap["bus"] - address := fmt.Sprintf(formatter, bus) + "/mix/on" - var value int32 - if !muted { - value = 1 - } - return c.SendMessage(address, value) -} - -// BusFader requests the current fader level for a bus -func (c *Client) BusFader(bus int) (float64, error) { - formatter := c.addressMap["bus"] - address := fmt.Sprintf(formatter, bus) + "/mix/fader" - err := c.SendMessage(address) - if err != nil { - return 0, err - } - - resp := <-c.respChan - val, ok := resp.Arguments[0].(float32) - if !ok { - return 0, fmt.Errorf("unexpected argument type for bus fader value") - } - - return mustDbFrom(float64(val)), nil -} - -// SetBusFader sets the fader level for a specific bus (1-based indexing) -func (c *Client) SetBusFader(bus int, level float64) error { - formatter := c.addressMap["bus"] - address := fmt.Sprintf(formatter, bus) + "/mix/fader" - return c.SendMessage(address, float32(mustDbInto(level))) -} - /* MAIN LR METHODS */ // MainLRFader requests the current main L/R fader level