mirror of
https://github.com/onyx-and-iris/voicemeeter.git
synced 2026-04-18 13:33:30 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ea6a41bf4f | |||
| 30cacfac91 | |||
|
|
2364ea13aa | ||
| d7aa02e516 | |||
|
|
b4f0fa4449 | ||
| 21d61d30e6 | |||
|
|
7b71086d7e | ||
| 943a921889 | |||
|
|
2f07a93c4e | ||
| dfe3cf5771 | |||
|
|
e8dc89b4f6 | ||
| 0bfc1e62ba | |||
| 6211531f87 | |||
| c9eaa76f62 | |||
| 1b9d633217 | |||
| 359c2d61b5 | |||
| e586478729 |
12
CHANGELOG.md
12
CHANGELOG.md
@@ -9,15 +9,23 @@ Before any major/minor/patch bump all unit tests will be run to verify they pass
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- [x]
|
||||
- [x]
|
||||
|
||||
## [2.1.1] - 2026-04-12
|
||||
|
||||
### Added
|
||||
|
||||
- {Bus}.Sel()/{Bus}.SetSel() and {Bus}.Monitor()/{Bus}.SetMonitor(). [PR #9](https://github.com/onyx-and-iris/voicemeeter/pull/9)
|
||||
|
||||
|
||||
## [2.1.0] - 2024-07-01
|
||||
|
||||
### Added
|
||||
|
||||
- Added a configurable timeout in seconds (defaults to 2).
|
||||
- Added a configurable login timeout in seconds (defaults to 2).
|
||||
- Option function added for overriding the type of Voicemeeter GUI runVoicemeeter() will launch.
|
||||
- Explanation of Option functions added to README.
|
||||
- {Recorder}.Gain. [PR #4](https://github.com/onyx-and-iris/voicemeeter/pull/4)
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
16
README.md
16
README.md
@@ -81,18 +81,18 @@ Pass a delay in milliseconds to force the getters to wait for dirty parameters t
|
||||
|
||||
Useful if not listening for event updates.
|
||||
|
||||
### `voicemeeter.WithTimeout(timeout int)`
|
||||
|
||||
Set a login timeout, defaults to 2 seconds. For example to set it to 1s:
|
||||
|
||||
`voicemeeter.NewRemote("banana", 20, voicemeeter.WithTimeout(1))`
|
||||
|
||||
### `voicemeeter.WithBits(bits int)`
|
||||
|
||||
Override the type of Voicemeeter GUI to launch on 64 bit systems. For example, to force 32 bit GUI:
|
||||
|
||||
`voicemeeter.NewRemote("banana", 20, voicemeeter.WithBits(32))`
|
||||
|
||||
### `voicemeeter.WithBits(timeout int)`
|
||||
|
||||
Set a login timeout, defaults to 2 seconds. For example to set it to 1s:
|
||||
|
||||
`voicemeeter.NewRemote("banana", 20, voicemeeter.WithBits(1))`
|
||||
|
||||
## `Remote Type`
|
||||
|
||||
#### `vm.Strip`
|
||||
@@ -336,6 +336,10 @@ The following methods are available
|
||||
- `SetMute(val bool)`
|
||||
- `Mono() bool`
|
||||
- `SetMono(val bool)`
|
||||
- `Sel() bool`
|
||||
- `SetSel(val bool)`
|
||||
- `Monitor() bool`
|
||||
- `SetMonitor(val bool)`
|
||||
- `Label() string`
|
||||
- `SetLabel(val string)`
|
||||
- `Gain() float64`
|
||||
|
||||
24
bus.go
24
bus.go
@@ -12,6 +12,10 @@ type iBus interface {
|
||||
SetMute(val bool)
|
||||
Mono() bool
|
||||
SetMono(val bool)
|
||||
Sel() bool
|
||||
SetSel(val bool)
|
||||
Monitor() bool
|
||||
SetMonitor(val bool)
|
||||
Label() string
|
||||
SetLabel(val string)
|
||||
Gain() float64
|
||||
@@ -51,6 +55,26 @@ func (b *bus) SetMono(val bool) {
|
||||
b.setter_bool("Mono", val)
|
||||
}
|
||||
|
||||
// Sel returns the value of the Sel parameter
|
||||
func (b *bus) Sel() bool {
|
||||
return b.getter_bool("Sel")
|
||||
}
|
||||
|
||||
// SetSel sets the alue of the Sel parameter
|
||||
func (b *bus) SetSel(val bool) {
|
||||
b.setter_bool("Sel", val)
|
||||
}
|
||||
|
||||
// Monitor returns the value of the Monitor parameter
|
||||
func (b *bus) Monitor() bool {
|
||||
return b.getter_bool("Monitor")
|
||||
}
|
||||
|
||||
// SetMonitor sets the alue of the Monitor parameter
|
||||
func (b *bus) SetMonitor(val bool) {
|
||||
b.setter_bool("Monitor", val)
|
||||
}
|
||||
|
||||
// Label returns the value of the MC parameter
|
||||
func (b *bus) Label() string {
|
||||
return b.getter_string("Label")
|
||||
|
||||
@@ -5,7 +5,7 @@ go 1.19
|
||||
require (
|
||||
github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203
|
||||
github.com/onyx-and-iris/voicemeeter/v2 v2.0.0
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/sirupsen/logrus v1.9.1
|
||||
)
|
||||
|
||||
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||
|
||||
@@ -7,8 +7,8 @@ github.com/onyx-and-iris/voicemeeter/v2 v2.0.0 h1:AXem+OMeKDuJd2KoLpzHEU70Rx2057
|
||||
github.com/onyx-and-iris/voicemeeter/v2 v2.0.0/go.mod h1:ULRO0N2Wg7Ymj7CEg4TI7CJobx9yVEZ5Lbh7oWi7woA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ=
|
||||
github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
|
||||
|
||||
@@ -6,11 +6,11 @@ require (
|
||||
github.com/BurntSushi/toml v1.2.0
|
||||
github.com/andreykaipov/goobs v0.10.0
|
||||
github.com/onyx-and-iris/voicemeeter/v2 v2.0.0
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/sirupsen/logrus v1.9.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/buger/jsonparser v1.1.1 // indirect
|
||||
github.com/buger/jsonparser v1.1.2 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/hashicorp/logutils v1.0.0 // indirect
|
||||
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect
|
||||
|
||||
@@ -2,8 +2,8 @@ github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0
|
||||
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/andreykaipov/goobs v0.10.0 h1:wa4CxbYu/NqwUmx5E4/baDqYRYEmfHwg2T23RAg3jlU=
|
||||
github.com/andreykaipov/goobs v0.10.0/go.mod h1:EqG73Uu/4npyhXIWWszgRelNkEeIz+d0slUT6NKWYs4=
|
||||
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
|
||||
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
|
||||
github.com/buger/jsonparser v1.1.2 h1:frqHqw7otoVbk5M8LlE/L7HTnIq2v9RX6EJ48i9AxJk=
|
||||
github.com/buger/jsonparser v1.1.2/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -17,8 +17,8 @@ github.com/onyx-and-iris/voicemeeter/v2 v2.0.0 h1:AXem+OMeKDuJd2KoLpzHEU70Rx2057
|
||||
github.com/onyx-and-iris/voicemeeter/v2 v2.0.0/go.mod h1:ULRO0N2Wg7Ymj7CEg4TI7CJobx9yVEZ5Lbh7oWi7woA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ=
|
||||
github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## About
|
||||
|
||||
A simple voicemeeter-cli program. Offers ability to toggle, get and set parameters.
|
||||
A Voicemeeter CLI, offers ability to toggle, get and set parameters.
|
||||
|
||||
## Install
|
||||
|
||||
@@ -8,28 +8,32 @@ First build and install it with `go install` (skip this step if using binary fro
|
||||
|
||||
## Use
|
||||
|
||||
Toggle with `!` prefix, get by excluding `=` and set by including `=`. Mix and match arguments.
|
||||
Commands that begin with `!` will toggle a parameter, commands that contain `=` will set a parameter, all other commands will get a value.
|
||||
|
||||
You may pass the following optional flags:
|
||||
|
||||
- -v: (-verbose) to toggle console output.
|
||||
- -i: (-interactive) to toggle interactive mode.
|
||||
- -k: (-kind) to set the kind of Voicemeeter. Defaults to banana.
|
||||
- -d: (-delay) to set a delay on the getters. Defaults to 20ms.
|
||||
- -h: Print the help message
|
||||
- -i: Enable interactive mode
|
||||
- -k: The kind of Voicemeeter GUI to launch, defaults to Banana
|
||||
- -l: Log level (0 up to 6), defaults to 3, Warn Level
|
||||
- -d: Set the delay between commands, defaults to 20ms
|
||||
- -v: Enable extra console output (toggle and set messages).
|
||||
|
||||
for example:
|
||||
|
||||
`vm-cli.exe -v -k=potato -d=25 strip[0].mute=0 strip[0].mute !strip[0].mute strip[0].mute bus[0].gain=-8.8 command.lock=1`
|
||||
`vm-cli.exe -v -l=4 -k=potato strip[0].mute=0 strip[0].mute !strip[0].mute strip[0].mute bus[0].gain=-8.8 command.lock=1`
|
||||
|
||||
Expected output:
|
||||
|
||||
```
|
||||
Running command strip[0].mute=0
|
||||
Value of strip[0].mute is: 0
|
||||
time="<timestamp>" level=info msg="Logged into Voicemeeter Potato v3.1.1.1"
|
||||
Setting strip[0].mute=0
|
||||
strip[0].mute: 0.00
|
||||
Toggling strip[0].mute
|
||||
Value of strip[0].mute is: 1
|
||||
Running command bus[0].gain=-8.8
|
||||
Running command command.lock=1
|
||||
strip[0].mute: 1.00
|
||||
Setting bus[0].gain=-8.8
|
||||
Setting command.lock=1
|
||||
time="<timestamp>" level=info msg="Logged out of Voicemeeter Potato"
|
||||
```
|
||||
|
||||
If running in interactive mode enter `q`, `quit` or `<Enter>` to exit.
|
||||
If running in interactive mode enter `Q`, to exit.
|
||||
|
||||
@@ -4,26 +4,36 @@ import (
|
||||
"bufio"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/onyx-and-iris/voicemeeter/v2"
|
||||
)
|
||||
|
||||
type (
|
||||
verbosePrinter struct {
|
||||
verbose bool
|
||||
}
|
||||
const (
|
||||
FLOAT = iota
|
||||
STRING
|
||||
)
|
||||
|
||||
type result struct {
|
||||
kind int
|
||||
stringParam string
|
||||
floatParam float64
|
||||
}
|
||||
|
||||
type verbosePrinter struct {
|
||||
verbose bool
|
||||
}
|
||||
|
||||
func newVerbosePrinter() *verbosePrinter {
|
||||
return &verbosePrinter{}
|
||||
}
|
||||
|
||||
func (v *verbosePrinter) printf(format string, a ...interface{}) {
|
||||
if v.verbose {
|
||||
fmt.Printf(format+"\n", a...)
|
||||
fmt.Printf(format, a...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,28 +50,68 @@ func main() {
|
||||
kind string
|
||||
delay int
|
||||
interactive bool
|
||||
loglevel int
|
||||
help bool
|
||||
)
|
||||
|
||||
flag.Usage = usage
|
||||
|
||||
flag.BoolVar(&help, "help", false, "print the help message")
|
||||
flag.BoolVar(&help, "h", false, "print the help message (shorthand)")
|
||||
flag.StringVar(&kind, "kind", "banana", "kind of voicemeeter")
|
||||
flag.StringVar(&kind, "k", "banana", "kind of voicemeeter (shorthand)")
|
||||
flag.IntVar(&delay, "delay", 20, "delay between commands")
|
||||
flag.IntVar(&delay, "d", 20, "delay between commands (shorthand)")
|
||||
flag.BoolVar(&vPrinter.verbose, "verbose", false, "toggle console output")
|
||||
flag.BoolVar(&vPrinter.verbose, "v", false, "toggle console output (shorthand)")
|
||||
flag.BoolVar(&interactive, "interactive", false, "toggle interactive mode")
|
||||
flag.BoolVar(&interactive, "i", false, "toggle interactive mode (shorthand)")
|
||||
flag.IntVar(&loglevel, "loglevel", int(log.WarnLevel), "set the log level")
|
||||
flag.IntVar(&loglevel, "l", int(log.WarnLevel), "set the log level (shorthand)")
|
||||
flag.BoolVar(&vPrinter.verbose, "verbose", false, "enable extra console output (toggle and set messages)")
|
||||
flag.BoolVar(&vPrinter.verbose, "v", false, "enable extra console output (toggle and set messages) (shorthand)")
|
||||
flag.Parse()
|
||||
|
||||
if help {
|
||||
flag.Usage()
|
||||
return
|
||||
}
|
||||
|
||||
if loglevel >= int(log.PanicLevel) && loglevel <= int(log.TraceLevel) {
|
||||
log.SetLevel(log.Level(loglevel))
|
||||
}
|
||||
|
||||
vm, err := vmConnect(kind, delay)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer vm.Logout()
|
||||
|
||||
err = runCommands(vm, interactive)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
if interactive {
|
||||
interactiveMode(vm)
|
||||
return
|
||||
}
|
||||
|
||||
args := flag.Args()
|
||||
if len(args) == 0 {
|
||||
flag.Usage()
|
||||
return
|
||||
}
|
||||
|
||||
for _, arg := range args {
|
||||
if err := parse(vm, arg); err != nil {
|
||||
log.Error(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Println("usage: ./vm-cli.exe [-h] [-i] [-k] [-l] [-d] [-v]\n" +
|
||||
"Where:\n" +
|
||||
"\th: Print the help message\n" +
|
||||
"\ti: Enable interactive mode\n" +
|
||||
"\tk: The kind of Voicemeeter GUI to launch, defaults to Banana\n" +
|
||||
"\tl: Log level 0 up to 6, (defaults to 3, Warn Level)\n" +
|
||||
"\td: Set the delay between commands (defaults to 20ms)\n" +
|
||||
"\tv: Enable extra console output (toggle and set messages).")
|
||||
}
|
||||
|
||||
func vmConnect(kind string, delay int) (*voicemeeter.Remote, error) {
|
||||
@@ -78,38 +128,23 @@ func vmConnect(kind string, delay int) (*voicemeeter.Remote, error) {
|
||||
return vm, nil
|
||||
}
|
||||
|
||||
func runCommands(vm *voicemeeter.Remote, interactive bool) error {
|
||||
if interactive {
|
||||
return interactiveMode(vm)
|
||||
}
|
||||
args := flag.Args()
|
||||
if len(args) == 0 {
|
||||
err := fmt.Errorf("must provide some commands to run")
|
||||
return err
|
||||
}
|
||||
for _, arg := range args {
|
||||
err := parse(vm, arg)
|
||||
if err != nil {
|
||||
vPrinter.printf(err.Error())
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func interactiveMode(vm *voicemeeter.Remote) error {
|
||||
vPrinter.printf("running in interactive mode... waiting for input")
|
||||
fmt.Println("Interactive mode enabled. Enter 'Q' to exit.")
|
||||
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
fmt.Printf(">> ")
|
||||
for scanner.Scan() {
|
||||
input := scanner.Text()
|
||||
if input == "q" || input == "quit" || input == "" {
|
||||
return nil
|
||||
if strings.ToUpper(input) == "Q" {
|
||||
break
|
||||
}
|
||||
|
||||
for _, cmd := range strings.Split(input, " ") {
|
||||
err := parse(vm, cmd)
|
||||
if err != nil {
|
||||
vPrinter.printf(err.Error())
|
||||
if err := parse(vm, cmd); err != nil {
|
||||
log.Error(err.Error())
|
||||
}
|
||||
}
|
||||
fmt.Printf(">> ")
|
||||
}
|
||||
if scanner.Err() != nil {
|
||||
return scanner.Err()
|
||||
@@ -119,58 +154,60 @@ func interactiveMode(vm *voicemeeter.Remote) error {
|
||||
|
||||
func parse(vm *voicemeeter.Remote, cmd string) error {
|
||||
if cmd[0] == '!' {
|
||||
err := toggleCmd(vm, cmd[1:])
|
||||
if err != nil {
|
||||
if err := toggleCmd(vm, cmd[1:]); err != nil {
|
||||
return err
|
||||
}
|
||||
} else if strings.Contains(cmd, "=") {
|
||||
if err := setCmd(vm, cmd); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if strings.Contains(cmd, "=") {
|
||||
err := setCmd(vm, cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err := getCmd(vm, cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
r := result{kind: FLOAT}
|
||||
if err := getCmd(vm, cmd, &r); err != nil {
|
||||
return err
|
||||
}
|
||||
switch r.kind {
|
||||
case FLOAT:
|
||||
fmt.Printf("%s: %.2f\n", cmd, r.floatParam)
|
||||
case STRING:
|
||||
fmt.Printf("%s: %s\n", cmd, r.stringParam)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func toggleCmd(vm *voicemeeter.Remote, cmd string) error {
|
||||
val, err := vm.GetFloat(cmd)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to toggle %s", cmd)
|
||||
r := result{kind: FLOAT}
|
||||
if err := getCmd(vm, cmd, &r); err != nil {
|
||||
return err
|
||||
}
|
||||
vm.SetFloat(cmd, 1-val)
|
||||
vPrinter.printf("Toggling %s", cmd)
|
||||
if r.kind == FLOAT && (r.floatParam == 0 || r.floatParam == 1) {
|
||||
vPrinter.printf("Toggling %s\n", cmd)
|
||||
vm.SetFloat(cmd, 1-r.floatParam)
|
||||
} else {
|
||||
log.Warnf("%s does not appear to be a boolean parameter", cmd)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func setCmd(vm *voicemeeter.Remote, cmd string) error {
|
||||
vPrinter.printf("Running command %s", cmd)
|
||||
err := vm.SendText(cmd)
|
||||
if err != nil {
|
||||
if err := vm.SendText(cmd); err != nil {
|
||||
err = fmt.Errorf("unable to set %s", cmd)
|
||||
return err
|
||||
}
|
||||
vPrinter.printf("Setting %s\n", cmd)
|
||||
return nil
|
||||
}
|
||||
|
||||
func getCmd(vm *voicemeeter.Remote, cmd string, r *result) error {
|
||||
if val, err := vm.GetFloat(cmd); err == nil {
|
||||
r.floatParam = val
|
||||
} else if val, err := vm.GetString(cmd); err == nil {
|
||||
r.kind = STRING
|
||||
r.stringParam = val
|
||||
} else {
|
||||
err := fmt.Errorf("unknown parameter '%s'", cmd)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getCmd(vm *voicemeeter.Remote, cmd string) error {
|
||||
valF, err := vm.GetFloat(cmd)
|
||||
if err != nil {
|
||||
valS, err := vm.GetString(cmd)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("unable to get %s", cmd)
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Value of %s is: %s", cmd, valS)
|
||||
} else {
|
||||
fmt.Printf("Value of %s is: %v", cmd, valF)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module github.com/onyx-and-iris/voicemeeter/v2
|
||||
go 1.18
|
||||
|
||||
require (
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/sirupsen/logrus v1.9.1
|
||||
github.com/stretchr/testify v1.8.0
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8
|
||||
)
|
||||
|
||||
4
go.sum
4
go.sum
@@ -3,8 +3,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/sirupsen/logrus v1.9.1 h1:Ou41VVR3nMWWmTiEUnj0OlsgOSCUFgsPAOl6jRIcVtQ=
|
||||
github.com/sirupsen/logrus v1.9.1/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
|
||||
Reference in New Issue
Block a user