6 Commits

Author SHA1 Message Date
onyx-and-iris
db7826dab6 reword in readme 2022-09-14 16:11:34 +01:00
onyx-and-iris
32780f11e4 changelog, readme updated to reflect changes
minor bump.
2022-09-14 16:05:49 +01:00
onyx-and-iris
8ca545b1c4 NewRemote now accepts delay param
getters clear dirty params sync enabled.

examples and tests updated
2022-09-14 16:05:15 +01:00
onyx-and-iris
a4b84f289e higher methods/functions now accept/return float64
update tests

update readme, changelog
2022-09-14 00:58:05 +01:00
onyx-and-iris
67cb8509b4 Update README.md 2022-09-07 22:32:37 +01:00
onyx-and-iris
e4de1d49cb upd go.mod for obs example 2022-09-07 21:10:42 +01:00
18 changed files with 149 additions and 142 deletions

View File

@@ -11,6 +11,18 @@ Before any major/minor/patch bump all unit tests will be run to verify they pass
- [x]
## [1.7.0] - 2022-09-14
### Added
- voicemeeter.NewRemote now accepts a delay int argument (milliseconds).
- vm.Sync() can now be used to force the dirty parameters to clear.
### Changed
- higher level methods/functions now accept/return float64
- tests updated to reflect changes.
## [1.5.0] - 2022-09-07
### Changed

View File

@@ -19,20 +19,14 @@ For an outline of past/future changes refer to: [CHANGELOG](CHANGELOG.md)
## 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`
or add it to your `go.mod` file.
## `Use`
#### `main.go`
@@ -48,8 +42,7 @@ import (
)
func main() {
kindId := "banana"
vm, err := voicemeeter.NewRemote(kindId)
vm, err := voicemeeter.NewRemote("banana", 15)
if err != nil {
log.Fatal(err)
}
@@ -66,7 +59,9 @@ func main() {
}
```
## `kindId`
## `voicemeeter.NewRemote(<kindId>, <delay>)`
### `kindId`
Pass the kind of Voicemeeter as an argument. kindId may be:
@@ -74,6 +69,12 @@ Pass the kind of Voicemeeter as an argument. kindId may be:
- `banana`
- `potato`
### `delay`
Pass a delay in milliseconds to force the getters to wait for dirty parameters to clear.
Useful if not running callbacks.
## `Remote Type`
#### `vm.Strip`
@@ -160,6 +161,10 @@ returns True iff a GUI parameter has changed
returns True iff a macrobutton parameter has changed
#### `vm.Sync()`
Use this to force dirty parameters to clear after a delay in milliseconds.
## `Available commands`
### Strip
@@ -177,15 +182,15 @@ The following methods are available
- `GetLabel() string`
- `SetLabel(val string)`
- `GetGain() float64`
- `SetGain(val float32)` from -60.0 to 12.0
- `SetGain(val float64)` from -60.0 to 12.0
- `GetMc() bool`
- `SetMc(val bool)`
- `GetComp() float64`
- `SetComp(val float32)` from 0.0 to 10.0
- `SetComp(val float64)` from 0.0 to 10.0
- `GetGate() float64`
- `SetGate(val float32)` from 0.0 to 10.0
- `SetGate(val float64)` from 0.0 to 10.0
- `GetAudibility() float64`
- `SetAudibility(val float32)` from 0.0 to 10.0
- `SetAudibility(val float64)` from 0.0 to 10.0
- `GetA1() bool - GetA5() bool`
- `SetA1(val bool) - SetA5(val bool)`
@@ -204,7 +209,7 @@ vm.Strip[4].SetA1(true)
The following methods are available
- `Get() float64`
- `Set(val float32)`
- `Set(val float64)`
example:
@@ -218,9 +223,9 @@ vm.Strip[6].GainLayer()[3].Set(-13.6)
The following methods are available
- `PreFader() []float32`
- `PostFader() []float32`
- `PostMute() []float32`
- `PreFader() []float64`
- `PostFader() []float64`
- `PostMute() []float64`
example:
@@ -242,7 +247,7 @@ The following methods are available
- `GetLabel() string`
- `SetLabel(val string)`
- `GetGain() float64`
- `SetGain(val float32)` from -60.0 to 12.0
- `SetGain(val float64)` from -60.0 to 12.0
```go
vm.Bus[3].SetEq(true)
@@ -293,7 +298,7 @@ vm.Bus[4].Mode().SetCenterOnly(true)
The following methods are available
- `All() []float32`
- `All() []float64`
example:

31
base.go
View File

@@ -115,8 +115,8 @@ func mdirty() bool {
// ldirty returns true iff a level value has changed
func ldirty(k *kind) bool {
_levelCache.stripLevelsBuff = make([]float32, (2*k.PhysIn)+(8*k.VirtIn))
_levelCache.busLevelsBuff = make([]float32, 8*k.NumBus())
_levelCache.stripLevelsBuff = make([]float64, (2*k.PhysIn)+(8*k.VirtIn))
_levelCache.busLevelsBuff = make([]float64, 8*k.NumBus())
for i := 0; i < (2*k.PhysIn)+(8*k.VirtIn); i++ {
val, _ := getLevel(_levelCache.stripMode, i)
@@ -151,6 +151,11 @@ func getVMType() (string, error) {
// getParameterFloat gets the value of a float parameter
func getParameterFloat(name string) (float64, error) {
if vmsync {
time.Sleep(time.Duration(vmdelay) * time.Millisecond)
for pdirty() || mdirty() {
}
}
var value float32
b := append([]byte(name), 0)
res, _, _ := vmGetParamFloat.Call(
@@ -165,9 +170,9 @@ func getParameterFloat(name string) (float64, error) {
}
// setParameterFloat sets the value of a float parameter
func setParameterFloat(name string, value float32) error {
func setParameterFloat(name string, value float64) error {
b1 := append([]byte(name), 0)
b2 := math.Float32bits(value)
b2 := math.Float32bits(float32(value))
res, _, _ := vmSetParamFloat.Call(
uintptr(unsafe.Pointer(&b1[0])),
uintptr(b2),
@@ -181,6 +186,11 @@ func setParameterFloat(name string, value float32) error {
// getParameterString gets the value of a string parameter
func getParameterString(name string) (string, error) {
if vmsync {
time.Sleep(time.Duration(vmdelay) * time.Millisecond)
for pdirty() || mdirty() {
}
}
b1 := append([]byte(name), 0)
var b2 [512]byte
res, _, _ := vmGetParamString.Call(
@@ -224,7 +234,12 @@ func setParametersMulti(script string) error {
}
// getMacroStatus gets a macrobutton value
func getMacroStatus(id, mode int) (float32, error) {
func getMacroStatus(id, mode int) (float64, error) {
if vmsync {
time.Sleep(time.Duration(vmdelay) * time.Millisecond)
for pdirty() || mdirty() {
}
}
var state float32
res, _, _ := vmGetMacroStatus.Call(
uintptr(id),
@@ -235,7 +250,7 @@ func getMacroStatus(id, mode int) (float32, error) {
err := fmt.Errorf("VBVMR_MacroButton_GetStatus returned %d", res)
return 0, err
}
return state, nil
return float64(state), nil
}
// setMacroStatus sets a macrobutton value
@@ -297,8 +312,8 @@ func getDeviceDescription(i int, dir string) (string, uint64, string, error) {
}
// getLevel returns a single level value of type type_ for channel[i]
func getLevel(type_, i int) (float32, error) {
var val float32
func getLevel(type_, i int) (float64, error) {
var val float64
res, _, _ := vmGetLevelFloat.Call(
uintptr(type_),
uintptr(i),

12
bus.go
View File

@@ -17,7 +17,7 @@ type iBus interface {
GetLabel() string
SetLabel(val string)
GetGain() float64
SetGain(val float32)
SetGain(val float64)
Mode() iBusMode
Levels() *levels
FadeTo(target float32, time_ int)
@@ -77,7 +77,7 @@ func (b *bus) GetGain() float64 {
}
// SetGain sets the value of the Gain parameter
func (b *bus) SetGain(val float32) {
func (b *bus) SetGain(val float64) {
b.setter_float("Gain", val)
}
@@ -103,7 +103,7 @@ func (b *bus) FadeBy(change float32, time_ int) {
time.Sleep(time.Millisecond)
}
//physicalBus represents a single physical bus
// physicalBus represents a single physical bus
type physicalBus struct {
bus
}
@@ -122,7 +122,7 @@ func (p *physicalBus) String() string {
return fmt.Sprintf("PhysicalBus%d", p.index)
}
//virtualBus represents a single virtual bus
// virtualBus represents a single virtual bus
type virtualBus struct {
bus
}
@@ -305,8 +305,8 @@ func newBusLevels(i int, k *kind) levels {
}
// All returns the level values for a bus
func (l *levels) All() []float32 {
var levels []float32
func (l *levels) All() []float64 {
var levels []float64
for i := l.init; i < l.init+l.offset; i++ {
levels = append(levels, convertLevel(_levelCache.busLevels[i]))
}

View File

@@ -1,6 +1,6 @@
package voicemeeter
//command represents command (action) type parameters
// command represents command (action) type parameters
type command struct {
iRemote
}
@@ -32,7 +32,7 @@ func (c *command) Restart() {
// Lock locks or unlocks the Voiceemeter GUI
func (c *command) Lock(val bool) {
var value float32
var value float64
if val {
value = 1
} else {

View File

@@ -4,7 +4,7 @@ go 1.18
require (
github.com/andreykaipov/goobs v0.10.0
github.com/onyx-and-iris/voicemeeter-api-go v1.4.1
github.com/onyx-and-iris/voicemeeter-api-go v1.5.0
)
require (

View File

@@ -9,8 +9,8 @@ github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ=
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U=
github.com/onyx-and-iris/voicemeeter-api-go v1.4.1 h1:2vGaRGCPwN9PlWspbdkDelsfxWHHkZqxozkd6FOcl28=
github.com/onyx-and-iris/voicemeeter-api-go v1.4.1/go.mod h1:zAdBhHXQ9n37CUbLizbOPmAutyZI8Ncqeu5e9u1Fy14=
github.com/onyx-and-iris/voicemeeter-api-go v1.5.0 h1:KaMrqM9l62hPXspLY2oPBI/4dhmzEMfFwijnFWuG9bA=
github.com/onyx-and-iris/voicemeeter-api-go v1.5.0/go.mod h1:zAdBhHXQ9n37CUbLizbOPmAutyZI8Ncqeu5e9u1Fy14=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d h1:/m5NbqQelATgoSPVC2Z23sR4kVNokFwDDyWh/3rGY+I=

View File

@@ -44,7 +44,7 @@ func (o observer) OnUpdate(subject string) {
}
func main() {
vm, err := voicemeeter.NewRemote("potato")
vm, err := voicemeeter.NewRemote("potato", 0)
if err != nil {
log.Fatal(err)
}

View File

@@ -4,11 +4,10 @@ import (
"log"
"os"
"testing"
"time"
)
var (
vm, err = NewRemote("potato")
vm, err = NewRemote("potato", 30)
)
func TestMain(m *testing.M) {
@@ -21,9 +20,3 @@ func TestMain(m *testing.M) {
vm.Logout()
os.Exit(code)
}
func sync() {
time.Sleep(30 * time.Millisecond)
for vm.Pdirty() || vm.Mdirty() {
}
}

View File

@@ -35,7 +35,7 @@ func (ir *iRemote) setter_bool(p string, v bool) {
} else {
value = 0
}
err := setParameterFloat(param, float32(value))
err := setParameterFloat(param, float64(value))
if err != nil {
fmt.Println(err)
}
@@ -54,7 +54,7 @@ func (ir *iRemote) getter_int(p string) int {
// setter_int sets the value v of an int parameter p
func (ir *iRemote) setter_int(p string, v int) {
param := fmt.Sprintf("%s.%s", ir.identifier(), p)
err := setParameterFloat(param, float32(v))
err := setParameterFloat(param, float64(v))
if err != nil {
fmt.Println(err)
}
@@ -71,9 +71,9 @@ func (ir *iRemote) getter_float(p string) float64 {
}
// setter_float sets the value v of an int parameter p
func (ir *iRemote) setter_float(p string, v float32) {
func (ir *iRemote) setter_float(p string, v float64) {
param := fmt.Sprintf("%s.%s", ir.identifier(), p)
err := setParameterFloat(param, float32(v))
err := setParameterFloat(param, float64(v))
if err != nil {
fmt.Println(err)
}

View File

@@ -25,18 +25,18 @@ var _levelCache *levelCache
// levelCache defines level slices used by the pooler to track updates
type levelCache struct {
stripMode int
stripLevels []float32
busLevels []float32
stripLevelsBuff []float32
busLevelsBuff []float32
stripLevels []float64
busLevels []float64
stripLevelsBuff []float64
busLevelsBuff []float64
stripComp []bool
busComp []bool
}
// newLevelCache returns a levelCache struct address
func newLevelCache(k *kind) *levelCache {
stripLevels := make([]float32, (2*k.PhysIn)+(8*k.VirtIn))
busLevels := make([]float32, 8*k.NumBus())
stripLevels := make([]float64, (2*k.PhysIn)+(8*k.VirtIn))
busLevels := make([]float64, 8*k.NumBus())
stripComp := make([]bool, (2*k.PhysIn)+(8*k.VirtIn))
busComp := make([]bool, 8*k.NumBus())
if _levelCache == nil {

View File

@@ -2,6 +2,7 @@ package voicemeeter
import (
"fmt"
"time"
)
// A Remote type represents the API for a kind
@@ -74,6 +75,13 @@ func (r *Remote) Mdirty() bool {
return mdirty()
}
// Sync is a helper method that waits for dirty parameters to clear
func (r *Remote) Sync() {
time.Sleep(time.Duration(vmdelay) * time.Millisecond)
for r.Pdirty() || r.Mdirty() {
}
}
// Gets a float parameter value
func (r *Remote) GetFloat(name string) float64 {
val, err := getParameterFloat(name)
@@ -84,7 +92,7 @@ func (r *Remote) GetFloat(name string) float64 {
}
// Sets a float paramter value
func (r *Remote) SetFloat(name string, value float32) {
func (r *Remote) SetFloat(name string, value float64) {
setParameterFloat(name, value)
}
@@ -310,14 +318,25 @@ func (potb *potatoBuilder) Build() remoteBuilder {
makeMidi()
}
var (
vmsync bool
vmdelay int
)
// NewRemote returns a Remote type for a kind
// this is the interface entry point
func NewRemote(kindId string) (*Remote, error) {
func NewRemote(kindId string, delay int) (*Remote, error) {
_kind, ok := kindMap[kindId]
if !ok {
err := fmt.Errorf("unknown Voicemeeter kind '%s'", kindId)
return nil, err
}
if delay < 0 {
err := fmt.Errorf("invalid delay value. should be >= 0")
return nil, err
}
vmsync = delay > 0
vmdelay = delay
director := director{}
switch _kind.Name {

View File

@@ -8,7 +8,7 @@ import (
func TestGetBasicRemote(t *testing.T) {
//t.Skip("skipping test")
__rem, _ := NewRemote("basic")
__rem, _ := NewRemote("basic", 0)
t.Run("Should return a remote basic type", func(t *testing.T) {
assert.NotNil(t, __rem)
})
@@ -34,7 +34,7 @@ func TestGetBasicRemote(t *testing.T) {
func TestGetBananaRemote(t *testing.T) {
//t.Skip("skipping test")
__rem, _ := NewRemote("banana")
__rem, _ := NewRemote("banana", 0)
t.Run("Should return a remote banana type", func(t *testing.T) {
assert.NotNil(t, __rem)
})
@@ -60,7 +60,7 @@ func TestGetBananaRemote(t *testing.T) {
func TestGetPotatoRemote(t *testing.T) {
//t.Skip("skipping test")
__rem, _ := NewRemote("potato")
__rem, _ := NewRemote("potato", 0)
t.Run("Should return a remote basic type", func(t *testing.T) {
assert.NotNil(t, __rem)
})
@@ -88,7 +88,6 @@ func TestSetAndGetFloatParameter(t *testing.T) {
//t.Skip("skipping test")
var param = "strip[0].mute"
vm.SetFloat(param, 1)
sync()
t.Run("Should get a float parameter", func(t *testing.T) {
assert.Equal(t, float64(1), vm.GetFloat(param))
})
@@ -99,7 +98,6 @@ func TestSetAndGetStringParameter(t *testing.T) {
var param = "strip[0].label"
var val = "test0"
vm.SetString(param, val)
sync()
t.Run("Should get a string parameter", func(t *testing.T) {
assert.Equal(t, val, vm.GetString(param))
})

View File

@@ -19,20 +19,20 @@ type iStrip interface {
GetLabel() string
SetLabel(val string)
GetGain() float64
SetGain(val float32)
SetGain(val float64)
GetMc() bool
SetMc(val bool)
GetComp() float64
SetComp(val float32)
SetComp(val float64)
GetGate() float64
SetGate(val float32)
SetGate(val float64)
GetAudibility() float64
SetAudibility(val float32)
SetAudibility(val float64)
GainLayer() []gainLayer
Levels() *levels
FadeTo(target float32, time_ int)
FadeBy(change float32, time_ int)
AppGain(name string, gain float32)
FadeTo(target float64, time_ int)
FadeBy(change float64, time_ int)
AppGain(name string, gain float64)
AppMute(name string, val bool)
iOutputs
}
@@ -101,7 +101,7 @@ func (s *strip) GetGain() float64 {
}
// SetGain sets the value of the Gain parameter
func (s *strip) SetGain(val float32) {
func (s *strip) SetGain(val float64) {
s.setter_float("Gain", val)
}
@@ -116,18 +116,18 @@ func (s *strip) Levels() *levels {
}
// FadeTo sets the value of gain to target over at time interval of time_
func (s *strip) FadeTo(target float32, time_ int) {
func (s *strip) FadeTo(target float64, time_ int) {
s.setter_string("FadeTo", fmt.Sprintf("(\"%f\", %d)", target, time_))
time.Sleep(time.Millisecond)
}
// FadeBy adjusts the value of gain by change over a time interval of time_
func (s *strip) FadeBy(change float32, time_ int) {
func (s *strip) FadeBy(change float64, time_ int) {
s.setter_string("FadeBy", fmt.Sprintf("(\"%f\", %d)", change, time_))
time.Sleep(time.Millisecond)
}
//physicalStrip represents a single physical strip
// physicalStrip represents a single physical strip
type physicalStrip struct {
strip
}
@@ -155,7 +155,7 @@ func (p *physicalStrip) GetComp() float64 {
}
// SetComp sets the value of the Comp parameter
func (p *physicalStrip) SetComp(val float32) {
func (p *physicalStrip) SetComp(val float64) {
p.setter_float("Comp", val)
}
@@ -165,7 +165,7 @@ func (p *physicalStrip) GetGate() float64 {
}
// SetGate sets the value of the Gate parameter
func (p *physicalStrip) SetGate(val float32) {
func (p *physicalStrip) SetGate(val float64) {
p.setter_float("Gate", val)
}
@@ -175,7 +175,7 @@ func (p *physicalStrip) GetAudibility() float64 {
}
// SetAudibility sets the value of the Audibility parameter
func (p *physicalStrip) SetAudibility(val float32) {
func (p *physicalStrip) SetAudibility(val float64) {
p.setter_float("Audibility", val)
}
@@ -189,7 +189,7 @@ func (p *physicalStrip) SetMc(val bool) {
panic("invalid parameter MC for physicalStrip")
}
//virtualStrip represents a single virtual strip
// virtualStrip represents a single virtual strip
type virtualStrip struct {
strip
}
@@ -227,7 +227,7 @@ func (v *virtualStrip) GetComp() float64 {
}
// SetComp panics reason invalid parameter
func (v *virtualStrip) SetComp(val float32) {
func (v *virtualStrip) SetComp(val float64) {
panic("invalid parameter Comp for virtualStrip")
}
@@ -237,7 +237,7 @@ func (v *virtualStrip) GetGate() float64 {
}
// SetGate panics reason invalid parameter
func (v *virtualStrip) SetGate(val float32) {
func (v *virtualStrip) SetGate(val float64) {
panic("invalid parameter Gate for virtualStrip")
}
@@ -247,12 +247,12 @@ func (v *virtualStrip) GetAudibility() float64 {
}
// SetAudibility panics reason invalid parameter
func (v *virtualStrip) SetAudibility(val float32) {
func (v *virtualStrip) SetAudibility(val float64) {
panic("invalid parameter Audibility for virtualStrip")
}
// AppGain sets the gain in db by val for the app matching name.
func (v *strip) AppGain(name string, val float32) {
func (v *strip) AppGain(name string, val float64) {
v.setter_string("AppGain", fmt.Sprintf("(\"%s\", %f)", name, val))
}
@@ -264,7 +264,7 @@ func (v *strip) AppMute(name string, val bool) {
} else {
value = 0
}
v.setter_string("AppMute", fmt.Sprintf("(\"%s\", %f)", name, float32(value)))
v.setter_string("AppMute", fmt.Sprintf("(\"%s\", %f)", name, float64(value)))
}
// gainLayer represents the 8 gainlayers for a single strip
@@ -284,7 +284,7 @@ func (gl *gainLayer) Get() float64 {
}
// Set sets the gain value for a single gainlayer
func (gl *gainLayer) Set(val float32) {
func (gl *gainLayer) Set(val float64) {
gl.setter_float(fmt.Sprintf("gainlayer[%d]", gl.index), val)
}
@@ -303,9 +303,9 @@ func newStripLevels(i int, k *kind) levels {
}
// PreFader returns the level values for this strip, PREFADER mode
func (l *levels) PreFader() []float32 {
func (l *levels) PreFader() []float64 {
_levelCache.stripMode = 0
var levels []float32
var levels []float64
for i := l.init; i < l.init+l.offset; i++ {
levels = append(levels, convertLevel(_levelCache.stripLevels[i]))
}
@@ -313,9 +313,9 @@ func (l *levels) PreFader() []float32 {
}
// PostFader returns the level values for this strip, POSTFADER mode
func (l *levels) PostFader() []float32 {
func (l *levels) PostFader() []float64 {
_levelCache.stripMode = 1
var levels []float32
var levels []float64
for i := l.init; i < l.init+l.offset; i++ {
levels = append(levels, convertLevel(_levelCache.stripLevels[i]))
}
@@ -323,9 +323,9 @@ func (l *levels) PostFader() []float32 {
}
// PostMute returns the level values for this strip, POSTMUTE mode
func (l *levels) PostMute() []float32 {
func (l *levels) PostMute() []float64 {
_levelCache.stripMode = 2
var levels []float32
var levels []float64
for i := l.init; i < l.init+l.offset; i++ {
levels = append(levels, convertLevel(_levelCache.stripLevels[i]))
}

View File

@@ -2,31 +2,25 @@ package voicemeeter_test
import (
"log"
"os"
"testing"
"time"
"github.com/onyx-and-iris/voicemeeter-api-go"
)
var (
vm, err = voicemeeter.NewRemote("potato")
vm, err = voicemeeter.NewRemote("potato", 30)
)
func TestMain(m *testing.M) {
if err != nil {
log.Fatal(err)
}
err = vm.Login()
if err != nil {
log.Fatal(err)
}
defer vm.Logout()
vm.Login()
code := m.Run()
vm.Logout()
os.Exit(code)
}
func sync() {
time.Sleep(30 * time.Millisecond)
for vm.Pdirty() || vm.Mdirty() {
}
m.Run()
}

View File

@@ -9,13 +9,11 @@ import (
func TestStrip0Mute(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[0].SetMute(true)
sync()
t.Run("Should return true when SetMute(true)", func(t *testing.T) {
assert.True(t, vm.Strip[0].GetMute())
})
vm.Strip[0].SetMute(false)
sync()
t.Run("Should return false when SetMute(false)", func(t *testing.T) {
assert.False(t, vm.Strip[0].GetMute())
})
@@ -24,13 +22,11 @@ func TestStrip0Mute(t *testing.T) {
func TestStrip3A1(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[3].SetA1(true)
sync()
t.Run("Should return true when SetA1(true)", func(t *testing.T) {
assert.True(t, vm.Strip[3].GetA1())
})
vm.Strip[3].SetA1(false)
sync()
t.Run("Should return false when SetA1(false)", func(t *testing.T) {
assert.False(t, vm.Strip[3].GetA1())
})
@@ -39,13 +35,11 @@ func TestStrip3A1(t *testing.T) {
func TestStrip2Limit(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[2].SetLimit(-8)
sync()
t.Run("Should return -8 when SetLimit(-8)", func(t *testing.T) {
assert.Equal(t, vm.Strip[2].GetLimit(), -8)
})
vm.Strip[2].SetLimit(-32)
sync()
t.Run("Should return -32 when SetLimit(-8)", func(t *testing.T) {
assert.Equal(t, vm.Strip[2].GetLimit(), -32)
})
@@ -55,13 +49,11 @@ func TestStrip2Limit(t *testing.T) {
func TestStrip4Label(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[4].SetLabel("test0")
sync()
t.Run("Should return test0 when SetLimit('test0')", func(t *testing.T) {
assert.Equal(t, "test0", vm.Strip[4].GetLabel())
})
vm.Strip[4].SetLabel("test1")
sync()
t.Run("Should return test1 when SetLimit('test1')", func(t *testing.T) {
assert.Equal(t, "test1", vm.Strip[4].GetLabel())
})
@@ -70,13 +62,11 @@ func TestStrip4Label(t *testing.T) {
func TestStrip5Gain(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[4].SetGain(-20.8)
sync()
t.Run("Should return -20.8 when SetGain(-20.8)", func(t *testing.T) {
assert.Equal(t, vm.Strip[4].GetGain(), -20.8)
})
vm.Strip[4].SetGain(-3.6)
sync()
t.Run("Should return -3.6 when SetGain(-3.6)", func(t *testing.T) {
assert.Equal(t, vm.Strip[4].GetGain(), -3.6)
})
@@ -85,13 +75,11 @@ func TestStrip5Gain(t *testing.T) {
func TestStrip3Comp(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[4].SetComp(8.1)
sync()
t.Run("Should return 8.1 when SetGain(8.1)", func(t *testing.T) {
assert.Equal(t, vm.Strip[4].GetComp(), 8.1)
})
vm.Strip[4].SetComp(1.6)
sync()
t.Run("Should return 1.6 when SetGain(1.6)", func(t *testing.T) {
assert.Equal(t, vm.Strip[4].GetComp(), 1.6)
})
@@ -100,13 +88,11 @@ func TestStrip3Comp(t *testing.T) {
func TestStrip5Mc(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[5].SetMc(true)
sync()
t.Run("Should return true when SetMc(true)", func(t *testing.T) {
assert.True(t, vm.Strip[5].GetMc())
})
vm.Strip[5].SetMc(false)
sync()
t.Run("Should return false when SetMc(false)", func(t *testing.T) {
assert.False(t, vm.Strip[5].GetMc())
})
@@ -115,13 +101,11 @@ func TestStrip5Mc(t *testing.T) {
func TestStrip2GainLayer3(t *testing.T) {
//t.Skip("skipping test")
vm.Strip[2].GainLayer()[3].Set(-18.3)
sync()
t.Run("Should return -18.3 when SetMc(true)", func(t *testing.T) {
assert.Equal(t, vm.Strip[2].GainLayer()[3].Get(), -18.3)
})
vm.Strip[2].GainLayer()[3].Set(-25.6)
sync()
t.Run("Should return -25.6 when SetMc(true)", func(t *testing.T) {
assert.Equal(t, vm.Strip[2].GainLayer()[3].Get(), -25.6)
})
@@ -130,13 +114,11 @@ func TestStrip2GainLayer3(t *testing.T) {
func TestBus3Eq(t *testing.T) {
//t.Skip("skipping test")
vm.Bus[3].SetEq(true)
sync()
t.Run("Should return true when SetEq(true)", func(t *testing.T) {
assert.True(t, vm.Bus[3].GetEq())
})
vm.Bus[3].SetEq(false)
sync()
t.Run("Should return false when SetEq(false)", func(t *testing.T) {
assert.False(t, vm.Bus[3].GetEq())
})
@@ -145,13 +127,11 @@ func TestBus3Eq(t *testing.T) {
func TestBus4Label(t *testing.T) {
//t.Skip("skipping test")
vm.Bus[4].SetLabel("test0")
sync()
t.Run("Should return test0 when SetEq('test0')", func(t *testing.T) {
assert.Equal(t, "test0", vm.Bus[4].GetLabel())
})
vm.Bus[4].SetLabel("test1")
sync()
t.Run("Should return test1 when SetEq('test1')", func(t *testing.T) {
assert.Equal(t, "test1", vm.Bus[4].GetLabel())
})
@@ -160,7 +140,6 @@ func TestBus4Label(t *testing.T) {
func TestBus3ModeAmix(t *testing.T) {
//t.Skip("skipping test")
vm.Bus[3].Mode().SetAmix(true)
sync()
t.Run("Should return true when Mode().SetAmix(true)", func(t *testing.T) {
assert.True(t, vm.Bus[3].Mode().GetAmix())
})
@@ -169,13 +148,11 @@ func TestBus3ModeAmix(t *testing.T) {
func TestVbanInStream0On(t *testing.T) {
//t.Skip("skipping test")
vm.Vban.InStream[0].SetOn(true)
sync()
t.Run("Should return true when SetOn(true)", func(t *testing.T) {
assert.True(t, vm.Vban.InStream[0].GetOn())
})
vm.Vban.InStream[0].SetOn(false)
sync()
t.Run("Should return false when SetOn(false)", func(t *testing.T) {
assert.False(t, vm.Vban.InStream[0].GetOn())
})
@@ -184,13 +161,11 @@ func TestVbanInStream0On(t *testing.T) {
func TestVbanOutStream6On(t *testing.T) {
//t.Skip("skipping test")
vm.Vban.OutStream[6].SetOn(true)
sync()
t.Run("Should return true when SetOn(true)", func(t *testing.T) {
assert.True(t, vm.Vban.OutStream[6].GetOn())
})
vm.Vban.OutStream[6].SetOn(false)
sync()
t.Run("Should return false when SetOn(false)", func(t *testing.T) {
assert.False(t, vm.Vban.OutStream[6].GetOn())
})
@@ -199,13 +174,11 @@ func TestVbanOutStream6On(t *testing.T) {
func TestVbanOutStream3Name(t *testing.T) {
t.Skip("skipping test")
vm.Vban.OutStream[3].SetName("test0")
sync()
t.Run("Should return test0 when SetName('test0')", func(t *testing.T) {
assert.Equal(t, "test0", vm.Vban.OutStream[3].GetName())
})
vm.Vban.OutStream[3].SetName("test1")
sync()
t.Run("Should return test1 when SetName('test1')", func(t *testing.T) {
assert.Equal(t, "test1", vm.Vban.OutStream[3].GetName())
})
@@ -226,13 +199,11 @@ func TestVbanInStream4Bit(t *testing.T) {
func TestVbanOutStream4Bit(t *testing.T) {
//t.Skip("skipping test")
vm.Vban.OutStream[4].SetBit(16)
sync()
t.Run("Should return 16 when SetBit(16)", func(t *testing.T) {
assert.Equal(t, vm.Vban.OutStream[4].GetBit(), 16)
})
vm.Vban.OutStream[4].SetBit(24)
sync()
t.Run("Should return 24 when SetBit(24)", func(t *testing.T) {
assert.Equal(t, vm.Vban.OutStream[4].GetBit(), 24)
})

View File

@@ -13,7 +13,7 @@ func allTrue(s []bool, sz int) bool {
}
// update copies the contents of one float slice into another
func update(s1 []float32, s2 []float32, sz int) {
func update(s1 []float64, s2 []float64, sz int) {
for i := 0; i < sz; i++ {
s1[i] = s2[i]
}
@@ -26,10 +26,10 @@ func roundFloat(val float64, precision uint) float64 {
}
// convertLevel performs the necessary math for a channel level
func convertLevel(i float32) float32 {
func convertLevel(i float64) float64 {
if i > 0 {
val := 20 * math.Log10(float64(i))
return float32(roundFloat(float64(val), 1))
return float64(roundFloat(float64(val), 1))
}
return -200.0
}

View File

@@ -20,8 +20,8 @@ func TestAllTrue(t *testing.T) {
func TestUpdate(t *testing.T) {
//t.Skip("skipping test")
s1 := []float32{3.6, 8.7, 1.8, 18.2}
s2 := make([]float32, len(s1))
s1 := []float64{3.6, 8.7, 1.8, 18.2}
s2 := make([]float64, len(s1))
update(s2, s1, len(s1))
t.Run("Should return true", func(t *testing.T) {
assert.Equal(t, s1, s2)
@@ -32,10 +32,10 @@ func TestConvertLevel(t *testing.T) {
//t.Skip("skipping test")
res := convertLevel(0.02)
t.Run("Should be equal", func(t *testing.T) {
assert.Equal(t, float32(-34), res)
assert.Equal(t, float64(-34), res)
})
res = convertLevel(-0.02)
t.Run("Should be equal", func(t *testing.T) {
assert.Equal(t, float32(-200), res)
assert.Equal(t, float64(-200), res)
})
}