A Go Wrapper for Voicemeeter API
This package offers a Go interface for the Voicemeeter Remote C API.
For an outline of past/future changes refer to: CHANGELOG
Tested against
- Basic 1.0.8.4
- Banana 2.0.6.4
- Potato 3.0.2.4
Requirements
- Voicemeeter
- Go 1.18 or greater
Installation
GO.MOD
Add to your go.mod file:
require github.com/onyx-and-iris/voicemeeter-api-go vX.X.X
where vX.X.X is the version you require.
GO GET
Install voicemeeter-api-go package from your console to download the latest version.
go get github.com/onyx-and-iris/voicemeeter-api-go
Use
main.go
package main
import (
"fmt"
"log"
"github.com/onyx-and-iris/voicemeeter-api-go"
)
func main() {
kindId := "banana"
vm, err := voicemeeter.NewRemote(kindId)
if err != nil {
log.Fatal(err)
}
defer vm.Logout()
vm.Login()
vm.Strip[0].SetLabel("rode podmic")
vm.Strip[0].SetMute(true)
fmt.Printf("Strip 0 (%s) mute was set to %v\n", vm.Strip[0].GetLabel(), vm.Strip[0].GetMute())
}
kindId
Pass the kind of Voicemeeter as an argument. kindId may be:
basicbananapotato
Remote Type
vm.Strip
[]t_strip slice containing both physicalStrip and virtualStrip types
vm.Bus
[]t_bus slice containing both physicalBus and virtualBus types
vm.Button
[]button slice containing button types, one for each macrobutton
vm.Command
pointer to command type, represents action type functions
vm.Vban
pointer to vban type, containing both vbanInStream and vbanOutStream slices
vm.Device
pointer to device type, represents physical input/output hardware devices
vm.Recorder
pointer to recorder type, represents the recorder
vm.Midi
pointer to midi type, represents a connected midi device
vm.Type()
returns the type of Voicemeeter as a string
vm.Version()
returns the version of Voicemeeter as a string
vm.GetFloat(<param>)
gets a float parameter value
vm.SetFloat(<param>, <value>)
sets a float parameter value eg. vm.SetFloat("strip[0].mute", 1)
vm.GetString(<param>)
gets a string parameter value
vm.SetString(<param>, <value>)
sets a string parameter value eg. vm.SetString("strip[0].label", "podmic")
vm.SendText(<script>)
sets many parameters in script format eg. ("Strip[0].Mute=1;Bus[3].Gain=3.6")
vm.Register(o observer)
register an object as an observer
vm.Deregister(o observer)
deregister an object as an observer
vm.EventAdd(<event>)
adds an event to the pooler eg. vm.EventAdd("ldirty")
vm.EventRemove(<event>)
removes an event to the pooler eg. vm.EventRemove("pdirty")
vm.Pdirty()
returns True iff a GUI parameter has changed
vm.Mdirty()
returns True iff a macrobutton parameter has changed
Available commands
Strip
The following methods are available
GetMute() boolSetMute(val bool)GetMono() boolSetMono(val bool)GetSolo() boolSetSolo(val bool)GetLimit() intSetLimit(val int)from -40 to 12GetLabel() stringSetLabel(val string)GetGain() float64SetGain(val float32)from -60.0 to 12.0GetMc() boolSetMc(val bool)GetComp() float64SetComp(val float32)from 0.0 to 10.0GetGate() float64SetGate(val float32)from 0.0 to 10.0GetAudibility() float64SetAudibility(val float32)from 0.0 to 10.0GetA1() bool - GetA5() boolSetA1(val bool) - SetA5(val bool)
example:
vm.Strip[3].SetGain(3.7)
fmt.Println(vm.Strip[0].GetLabel())
vm.Strip[4].SetA1(true)
Gainlayers
vm.Strip[i].GainLayer()[j]
The following methods are available
Get() float64Set(val float32)
example:
vm.Strip[6].GainLayer()[3].Set(-13.6)
Levels
vm.Strip[i].Levels()
The following methods are available
PreFader() []float32PostFader() []float32PostMute() []float32
example:
fmt.Println(vm.Strip[5].Levels().PreFader())
Bus
The following methods are available
String() stringGetMute() boolSetMute(val bool)GetEq() boolSetEq(val bool)GetMono() boolSetMono(val bool)GetLabel() stringSetLabel(val string)GetGain() float64SetGain(val float32)from -60.0 to 12.0
vm.Bus[3].SetEq(true)
fmt.Println(vm.Bus[0].GetLabel())
Modes
vm.Bus[i].Mode()
The following methods are available
SetNormal(val bool)GetNormal() boolSetAmix(val bool)GetAmix() boolSetBmix(val bool)GetBmix() boolSetRepeat(val bool)GetRepeat() boolSetComposite(val bool)GetComposite() boolSetTvMix(val bool)GetTvMix() boolSetUpMix21(val bool)GetUpMix21() boolSetUpMix41(val bool)GetUpMix41() boolSetUpMix61(val bool)GetUpMix61() boolSetCenterOnly(val bool)GetCenterOnly() boolSetLfeOnly(val bool)GetLfeOnly() boolSetRearOnly(val bool)GetRearOnly() bool
example:
vm.Bus[3].Mode().SetAmix(true)
vm.Bus[4].Mode().SetCenterOnly(true)
Levels
vm.Bus[i].Levels()
The following methods are available
All() []float32
example:
fmt.Println(vm.Bus[1].Levels().All())
Button
The following methods are available
GetState() boolSetState(val bool)GetStateOnly() boolSetStateOnly(val bool)GetTrigger() boolSetTrigger(val bool)
example:
vm.Button[37].SetState(true)
fmt.Println(vm.Button[64].GetStateOnly())
Command
The following methods are available
Show()Show Voicemeeter GUI if it's hiddenHide()Hide Voicemeeter GUI if it's shownShutdown()Shuts down the GUIRestart()Restart the audio engineLock(val bool)Lock the Voicemeeter GUI
example:
vm.Command.Restart()
vm.Command.Show()
VBAN
vm.Vban.Enable()vm.Vban.Disable()Turn VBAN on or off
Instream | Outstream
vm.Vban.InStreamvm.Vban.OutStream
The following methods are available
GetOn() boolSetOn(val bool)GetName() stringSetName(val string)GetIp() stringSetIp(val string)GetPort() intSetPort(val int)from 1024 to 65535GetSr() intSetSr(val int)(11025, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000)GetChannel() intSetChannel(val int)from 1 to 8GetBit() intSetBit(val int)16 or 24GetQuality() intSetQuality(val int)from 0 to 4GetRoute() intSetRoute(val int)from 0 to 8
example:
# turn VBAN on
vm.Vban.Enable()
// turn on vban instream 0
vm.Vban.InStream[0].SetOn(true)
// set bit property for outstream 3 to 24
vm.Vban.OutStream[3].SetBit(24)
Device
The following methods are available
Ins()Outs()Input(val int)Output(val int)
example:
for i := 0; i < int(vm.Device.Ins()); i++ {
fmt.Println(vm.Device.Input(i))
}
Recorder
The following methods are available
Play()Stop()Pause()Replay()Record()Ff()Rew()
example:
vm.Recorder.Play()
vm.Recorder.Stop()
# Enable loop play
vm.Recorder.Loop(true)
# Disable recorder out channel B2
vm.Recorder.SetB2(false)
Midi
The following methods are available
Channel()returns the current midi channelCurrent()returns the most recently pressed midi buttonGet(<button>)returns the value in cache for the midi button
example:
var current = vm.Midi.Current()
var val = vm.Midi.Get(current)
Events
By default level updates are disabled. Any event may be enabled or disabled. The following events exist:
pdirtyparameter updatesmdirtymacrobutton updatesmidimidi updatesldirtylevel updates
example:
vm.EventAdd("ldirty")
vm.EventRemove("pdirty")
Run tests
To run all tests:
go test ./...