mirror of
https://github.com/onyx-and-iris/voicemeeter.git
synced 2024-11-15 17:40:51 +00:00
70d69f5599
example in readme updated. level pooler implemented, runs in its own goroutine. Remote type now exported observers example updated.
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package voicemeeter
|
|
|
|
import "math"
|
|
|
|
// levels
|
|
type levels struct {
|
|
iRemote
|
|
k *kind
|
|
init int
|
|
offset int
|
|
id string
|
|
}
|
|
|
|
func (l *levels) convertLevel(i float32) float32 {
|
|
if i > 0 {
|
|
val := 20 * math.Log10(float64(i))
|
|
return float32(roundFloat(float64(val), 1))
|
|
}
|
|
return -200.0
|
|
}
|
|
|
|
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
|
|
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())
|
|
stripComp := make([]bool, (2*k.physIn)+(8*k.virtIn))
|
|
busComp := make([]bool, 8*k.numBus())
|
|
if _levelCache == nil {
|
|
_levelCache = &levelCache{stripMode: 0, stripLevels: stripLevels, busLevels: busLevels, stripComp: stripComp, busComp: busComp}
|
|
}
|
|
return _levelCache
|
|
}
|