mirror of
https://github.com/onyx-and-iris/xair-cli.git
synced 2026-03-02 18:19:12 +00:00
Compare commits
3 Commits
873ff87429
...
942d1b18bd
| Author | SHA1 | Date | |
|---|---|---|---|
| 942d1b18bd | |||
| 2e1c28c909 | |||
| cf470181a1 |
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// BusCmdGroup defines the commands related to controlling the buses of the X-Air device.
|
||||
@ -183,9 +181,13 @@ type BusEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks that the provided EQ band number is within the valid range (1-6).
|
||||
func (cmd *BusEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *BusEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6")
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ type CLI struct {
|
||||
Bus BusCmdGroup `help:"Control the buses." cmd:"" group:"Bus"`
|
||||
Headamp HeadampCmdGroup `help:"Control input gain and phantom power." cmd:"" group:"Headamp"`
|
||||
Snapshot SnapshotCmdGroup `help:"Save and load mixer states." cmd:"" group:"Snapshot"`
|
||||
Dca DCACmdGroup `help:"Control DCA groups." cmd:"" group:"DCA"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
67
cmd/x32-cli/dca.go
Normal file
67
cmd/x32-cli/dca.go
Normal file
@ -0,0 +1,67 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type DCACmdGroup struct {
|
||||
Index struct {
|
||||
Index int `arg:"" help:"The index of the DCA group (1-8)."`
|
||||
Mute DCAMuteCmd `help:"Get or set the mute status of the DCA group." cmd:""`
|
||||
Name DCANameCmd `help:"Get or set the name of the DCA group." cmd:""`
|
||||
} `arg:"" help:"Control a specific DCA group by its index."`
|
||||
}
|
||||
|
||||
// Validate checks if the provided index is within the valid range.
|
||||
func (cmd *DCACmdGroup) Validate() error {
|
||||
if cmd.Index.Index < 1 || cmd.Index.Index > 8 {
|
||||
return fmt.Errorf("DCA group index must be between 1 and 8, got %d", cmd.Index.Index)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DCAMuteCmd is the command to get or set the mute status of a DCA group.
|
||||
type DCAMuteCmd struct {
|
||||
State *string `arg:"" help:"Set the mute status of the DCA group." optional:"" enum:"true,false"`
|
||||
}
|
||||
|
||||
// Run executes the DCAMuteCmd command.
|
||||
func (cmd *DCAMuteCmd) Run(ctx *context, dca *DCACmdGroup) error {
|
||||
if cmd.State == nil {
|
||||
resp, err := ctx.Client.DCA.Mute(dca.Index.Index)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get DCA mute status: %w", err)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "DCA Group %d mute state: %t\n", dca.Index.Index, resp)
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := ctx.Client.DCA.SetMute(dca.Index.Index, *cmd.State == "true"); err != nil {
|
||||
return fmt.Errorf("failed to set DCA mute status: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DCANameCmd is the command to get or set the name of a DCA group.
|
||||
type DCANameCmd struct {
|
||||
Name *string `arg:"" help:"Set the name of the DCA group." optional:""`
|
||||
}
|
||||
|
||||
// Run executes the DCANameCmd command.
|
||||
func (cmd *DCANameCmd) Run(ctx *context, dca *DCACmdGroup) error {
|
||||
if cmd.Name == nil {
|
||||
resp, err := ctx.Client.DCA.Name(dca.Index.Index)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get DCA name: %w", err)
|
||||
}
|
||||
if resp == "" {
|
||||
resp = fmt.Sprintf("DCA %d", dca.Index.Index)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "DCA Group %d is named '%s'\n", dca.Index.Index, resp)
|
||||
return nil
|
||||
}
|
||||
if err := ctx.Client.DCA.SetName(dca.Index.Index, *cmd.Name); err != nil {
|
||||
return fmt.Errorf("failed to set DCA name: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// MainCmdGroup defines the command group for controlling the Main L/R output, including commands for mute state, fader level, and fade-in/fade-out times.
|
||||
@ -146,9 +144,13 @@ type MainEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is within the valid range (1-6) for the Main L/R output.
|
||||
func (cmd *MainEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *MainEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("invalid EQ band number: %d. Valid range is 1-6", cmd.Band.Band)
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// MainMonoCmdGroup defines the command group for controlling the Main Mono output, including commands for mute state, fader level, and fade-in/fade-out times.
|
||||
@ -146,9 +144,13 @@ type MainMonoEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is within the valid range (1-6) for the Main Mono output.
|
||||
func (cmd *MainMonoEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *MainMonoEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("invalid EQ band number: %d. Valid range is 1-6", cmd.Band.Band)
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// MatrixCmdGroup defines the command group for controlling the Matrix outputs, including commands for mute state, fader level, and fade-in/fade-out times.
|
||||
@ -22,9 +20,9 @@ type MatrixCmdGroup struct {
|
||||
} `help:"Commands for controlling individual Matrix outputs." arg:""`
|
||||
}
|
||||
|
||||
func (cmd *MatrixCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *MatrixCmdGroup) Validate() error {
|
||||
if cmd.Index.Index < 1 || cmd.Index.Index > 6 {
|
||||
return fmt.Errorf("invalid Matrix output index: %d. Valid range is 1-6", cmd.Index.Index)
|
||||
return fmt.Errorf("Matrix output index must be between 1 and 6, got %d", cmd.Index.Index)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -156,9 +154,13 @@ type MatrixEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is within the valid range (1-6) for the Matrix output.
|
||||
func (cmd *MatrixEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *MatrixEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("invalid EQ band number: %d. Valid range is 1-6", cmd.Band.Band)
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// StripCmdGroup defines the command group for controlling the strips of the mixer, including commands for getting and setting various parameters such as mute state, fader level, send levels, and EQ settings.
|
||||
@ -374,9 +372,13 @@ type StripEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is valid (between 1 and 4) and returns an error if it is not.
|
||||
func (cmd *StripEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *StripEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 4 {
|
||||
return fmt.Errorf("EQ band number must be between 1 and 4")
|
||||
return fmt.Errorf("EQ band number must be between 1 and 4, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// BusCmdGroup defines the commands related to controlling the buses of the X-Air device.
|
||||
@ -183,9 +181,14 @@ type BusEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks that the provided EQ band number is within the valid range (1-6).
|
||||
func (cmd *BusEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
// Only validates when a band number is actually specified (non-zero).
|
||||
func (cmd *BusEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6")
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -54,6 +54,7 @@ type CLI struct {
|
||||
Bus BusCmdGroup `help:"Control the buses." cmd:"" group:"Bus"`
|
||||
Headamp HeadampCmdGroup `help:"Control input gain and phantom power." cmd:"" group:"Headamp"`
|
||||
Snapshot SnapshotCmdGroup `help:"Save and load mixer states." cmd:"" group:"Snapshot"`
|
||||
Dca DCACmdGroup `help:"Control DCA groups." cmd:"" group:"DCA"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
68
cmd/xair-cli/dca.go
Normal file
68
cmd/xair-cli/dca.go
Normal file
@ -0,0 +1,68 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// DCACmdGroup is the command group for controlling DCA groups.
|
||||
type DCACmdGroup struct {
|
||||
Index struct {
|
||||
Index int `arg:"" help:"The index of the DCA group (1-4)."`
|
||||
Mute DCAMuteCmd `help:"Get or set the mute status of the DCA group." cmd:""`
|
||||
Name DCANameCmd `help:"Get or set the name of the DCA group." cmd:""`
|
||||
} `arg:"" help:"Control a specific DCA group by its index."`
|
||||
}
|
||||
|
||||
// Validate checks if the provided index is within the valid range.
|
||||
func (cmd *DCACmdGroup) Validate() error {
|
||||
if cmd.Index.Index < 1 || cmd.Index.Index > 4 {
|
||||
return fmt.Errorf("DCA group index must be between 1 and 4, got %d", cmd.Index.Index)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DCAMuteCmd is the command to get or set the mute status of a DCA group.
|
||||
type DCAMuteCmd struct {
|
||||
State *string `arg:"" help:"Set the mute status of the DCA group." optional:"" enum:"true,false"`
|
||||
}
|
||||
|
||||
// Run executes the DCAMuteCmd command.
|
||||
func (cmd *DCAMuteCmd) Run(ctx *context, dca *DCACmdGroup) error {
|
||||
if cmd.State == nil {
|
||||
resp, err := ctx.Client.DCA.Mute(dca.Index.Index)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get DCA mute status: %w", err)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "DCA Group %d mute state: %t\n", dca.Index.Index, resp)
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := ctx.Client.DCA.SetMute(dca.Index.Index, *cmd.State == "true"); err != nil {
|
||||
return fmt.Errorf("failed to set DCA mute status: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DCANameCmd is the command to get or set the name of a DCA group.
|
||||
type DCANameCmd struct {
|
||||
Name *string `arg:"" help:"Set the name of the DCA group." optional:""`
|
||||
}
|
||||
|
||||
// Run executes the DCANameCmd command.
|
||||
func (cmd *DCANameCmd) Run(ctx *context, dca *DCACmdGroup) error {
|
||||
if cmd.Name == nil {
|
||||
resp, err := ctx.Client.DCA.Name(dca.Index.Index)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get DCA name: %w", err)
|
||||
}
|
||||
if resp == "" {
|
||||
resp = fmt.Sprintf("DCA %d", dca.Index.Index)
|
||||
}
|
||||
fmt.Fprintf(ctx.Out, "DCA Group %d is named '%s'\n", dca.Index.Index, resp)
|
||||
return nil
|
||||
}
|
||||
if err := ctx.Client.DCA.SetName(dca.Index.Index, *cmd.Name); err != nil {
|
||||
return fmt.Errorf("failed to set DCA name: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// MainCmdGroup defines the command group for controlling the Main L/R output, including commands for mute state, fader level, and fade-in/fade-out times.
|
||||
@ -146,9 +144,13 @@ type MainEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is within the valid range (1-6) for the Main L/R output.
|
||||
func (cmd *MainEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *MainEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 6 {
|
||||
return fmt.Errorf("invalid EQ band number: %d. Valid range is 1-6", cmd.Band.Band)
|
||||
return fmt.Errorf("EQ band number must be between 1 and 6, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kong"
|
||||
)
|
||||
|
||||
// StripCmdGroup defines the command group for controlling the strips of the mixer, including commands for getting and setting various parameters such as mute state, fader level, send levels, and EQ settings.
|
||||
@ -374,9 +372,13 @@ type StripEqCmdGroup struct {
|
||||
}
|
||||
|
||||
// Validate checks if the provided EQ band number is valid (between 1 and 4) and returns an error if it is not.
|
||||
func (cmd *StripEqCmdGroup) Validate(ctx kong.Context) error {
|
||||
func (cmd *StripEqCmdGroup) Validate() error {
|
||||
if cmd.Band.Band == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if cmd.Band.Band < 1 || cmd.Band.Band > 4 {
|
||||
return fmt.Errorf("EQ band number must be between 1 and 4")
|
||||
return fmt.Errorf("EQ band number must be between 1 and 4, got %d", cmd.Band.Band)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3,9 +3,10 @@ package xair
|
||||
var xairAddressMap = map[string]string{
|
||||
"main": "/lr",
|
||||
"strip": "/ch/%02d",
|
||||
"bus": "/bus/%01d",
|
||||
"bus": "/bus/%d",
|
||||
"headamp": "/headamp/%02d",
|
||||
"snapshot": "/-snap",
|
||||
"dca": "/dca/%d",
|
||||
}
|
||||
|
||||
var x32AddressMap = map[string]string{
|
||||
@ -16,6 +17,7 @@ var x32AddressMap = map[string]string{
|
||||
"bus": "/bus/%02d",
|
||||
"headamp": "/headamp/%03d",
|
||||
"snapshot": "/-snap",
|
||||
"dca": "/dca/%d",
|
||||
}
|
||||
|
||||
func addressMapFromMixerKind(kind mixerKind) map[string]string {
|
||||
|
||||
@ -21,6 +21,7 @@ type XAirClient struct {
|
||||
Bus *Bus
|
||||
HeadAmp *HeadAmp
|
||||
Snapshot *Snapshot
|
||||
DCA *DCA
|
||||
}
|
||||
|
||||
// X32Client is a client for controlling X32 mixers
|
||||
@ -33,6 +34,7 @@ type X32Client struct {
|
||||
Bus *Bus
|
||||
HeadAmp *HeadAmp
|
||||
Snapshot *Snapshot
|
||||
DCA *DCA
|
||||
}
|
||||
|
||||
// NewX32Client creates a new X32Client instance with optional engine configuration
|
||||
@ -52,6 +54,7 @@ func NewX32Client(mixerIP string, mixerPort int, opts ...EngineOption) (*X32Clie
|
||||
c.Bus = newBus(&c.Client)
|
||||
c.HeadAmp = newHeadAmp(&c.Client)
|
||||
c.Snapshot = newSnapshot(&c.Client)
|
||||
c.DCA = newDCA(&c.Client)
|
||||
|
||||
return c, nil
|
||||
}
|
||||
@ -71,6 +74,7 @@ func NewXAirClient(mixerIP string, mixerPort int, opts ...EngineOption) (*XAirCl
|
||||
c.Bus = newBus(&c.Client)
|
||||
c.HeadAmp = newHeadAmp(&c.Client)
|
||||
c.Snapshot = newSnapshot(&c.Client)
|
||||
c.DCA = newDCA(&c.Client)
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
95
internal/xair/dca.go
Normal file
95
internal/xair/dca.go
Normal file
@ -0,0 +1,95 @@
|
||||
package xair
|
||||
|
||||
import "fmt"
|
||||
|
||||
type DCA struct {
|
||||
client *Client
|
||||
baseAddress string
|
||||
}
|
||||
|
||||
// newDCA creates a new DCA instance
|
||||
func newDCA(c *Client) *DCA {
|
||||
return &DCA{
|
||||
client: c,
|
||||
baseAddress: c.addressMap["dca"],
|
||||
}
|
||||
}
|
||||
|
||||
// Mute requests the current mute status for a DCA group
|
||||
func (d *DCA) Mute(group int) (bool, error) {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/on"
|
||||
err := d.client.SendMessage(address)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
msg, err := d.client.ReceiveMessage()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
val, ok := msg.Arguments[0].(int32)
|
||||
if !ok {
|
||||
return false, fmt.Errorf("unexpected argument type for DCA mute value")
|
||||
}
|
||||
return val == 0, nil
|
||||
}
|
||||
|
||||
// SetMute sets the mute status for a specific DCA group (1-based indexing)
|
||||
func (d *DCA) SetMute(group int, muted bool) error {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/on"
|
||||
var value int32
|
||||
if !muted {
|
||||
value = 1
|
||||
}
|
||||
return d.client.SendMessage(address, value)
|
||||
}
|
||||
|
||||
// Name requests the current name for a DCA group
|
||||
func (d *DCA) Name(group int) (string, error) {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/config/name"
|
||||
err := d.client.SendMessage(address)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
msg, err := d.client.ReceiveMessage()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
name, ok := msg.Arguments[0].(string)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("unexpected argument type for DCA name value")
|
||||
}
|
||||
return name, nil
|
||||
}
|
||||
|
||||
// SetName sets the name for a specific DCA group (1-based indexing)
|
||||
func (d *DCA) SetName(group int, name string) error {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/config/name"
|
||||
return d.client.SendMessage(address, name)
|
||||
}
|
||||
|
||||
// Color requests the current color for a DCA group
|
||||
func (d *DCA) Color(group int) (int32, error) {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/config/color"
|
||||
err := d.client.SendMessage(address)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
msg, err := d.client.ReceiveMessage()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
color, ok := msg.Arguments[0].(int32)
|
||||
if !ok {
|
||||
return 0, fmt.Errorf("unexpected argument type for DCA color value")
|
||||
}
|
||||
return color, nil
|
||||
}
|
||||
|
||||
// SetColor sets the color for a specific DCA group (1-based indexing)
|
||||
func (d *DCA) SetColor(group int, color int32) error {
|
||||
address := fmt.Sprintf(d.baseAddress, group) + "/config/color"
|
||||
return d.client.SendMessage(address, color)
|
||||
}
|
||||
@ -190,5 +190,9 @@ Snapshot
|
||||
snapshot <index> load Load a mixer state from a snapshot.
|
||||
snapshot <index> delete Delete a snapshot.
|
||||
|
||||
DCA
|
||||
dca <index> mute Get or set the mute status of the DCA group.
|
||||
dca <index> name Get or set the name of the DCA group.
|
||||
|
||||
Run "x32-cli <command> --help" for more information on a command.
|
||||
```
|
||||
|
||||
@ -122,5 +122,9 @@ Snapshot
|
||||
snapshot <index> load Load a mixer state from a snapshot.
|
||||
snapshot <index> delete Delete a snapshot.
|
||||
|
||||
DCA
|
||||
dca <index> mute Get or set the mute status of the DCA group.
|
||||
dca <index> name Get or set the name of the DCA group.
|
||||
|
||||
Run "xair-cli <command> --help" for more information on a command.
|
||||
```
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user