mirror of
https://github.com/onyx-and-iris/voicemeeter.git
synced 2024-11-15 17:40:51 +00:00
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
|
||
|
}
|