mirror of
https://github.com/onyx-and-iris/voicemeeter.git
synced 2024-11-21 20:30:55 +00:00
event type added for toggline evet subscriptions.
level updates now disabled by default. each event updater runs in its own goroutine.
This commit is contained in:
parent
69476ffcd9
commit
3ea4aee863
74
publisher.go
74
publisher.go
@ -40,41 +40,97 @@ func (p *publisher) notify(subject string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type event struct {
|
||||||
|
pdirty bool
|
||||||
|
mdirty bool
|
||||||
|
midi bool
|
||||||
|
ldirty bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func newEvent() *event {
|
||||||
|
return &event{true, true, true, false}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *event) Add(ev string) {
|
||||||
|
switch ev {
|
||||||
|
case "pdirty":
|
||||||
|
e.pdirty = true
|
||||||
|
case "mdirty":
|
||||||
|
e.mdirty = true
|
||||||
|
case "midi":
|
||||||
|
e.midi = true
|
||||||
|
case "ldirty":
|
||||||
|
e.ldirty = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *event) Remove(ev string) {
|
||||||
|
switch ev {
|
||||||
|
case "pdirty":
|
||||||
|
e.pdirty = false
|
||||||
|
case "mdirty":
|
||||||
|
e.mdirty = false
|
||||||
|
case "midi":
|
||||||
|
e.midi = false
|
||||||
|
case "ldirty":
|
||||||
|
e.ldirty = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// pooler continuously polls the dirty paramters
|
// pooler continuously polls the dirty paramters
|
||||||
// it is expected to be run in a goroutine
|
// it is expected to be run in a goroutine
|
||||||
type pooler struct {
|
type pooler struct {
|
||||||
k *kind
|
k *kind
|
||||||
run bool
|
run bool
|
||||||
|
event *event
|
||||||
publisher
|
publisher
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPooler(k *kind) *pooler {
|
func newPooler(k *kind) *pooler {
|
||||||
p := &pooler{
|
p := &pooler{
|
||||||
k: k,
|
k: k,
|
||||||
run: true,
|
run: true,
|
||||||
|
event: newEvent(),
|
||||||
}
|
}
|
||||||
go p.runner()
|
go p.parameters()
|
||||||
|
go p.macrobuttons()
|
||||||
|
go p.midi()
|
||||||
go p.levels()
|
go p.levels()
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pooler) runner() {
|
func (p *pooler) parameters() {
|
||||||
for p.run {
|
for p.run {
|
||||||
if pdirty() {
|
if p.event.pdirty && pdirty() {
|
||||||
p.notify("pdirty")
|
p.notify("pdirty")
|
||||||
}
|
}
|
||||||
if mdirty() {
|
time.Sleep(33 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pooler) macrobuttons() {
|
||||||
|
for p.run {
|
||||||
|
if p.event.mdirty && mdirty() {
|
||||||
p.notify("mdirty")
|
p.notify("mdirty")
|
||||||
}
|
}
|
||||||
time.Sleep(33 * time.Millisecond)
|
time.Sleep(33 * time.Millisecond)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *pooler) midi() {
|
||||||
|
for p.run {
|
||||||
|
if getMidiMessage() {
|
||||||
|
p.notify("midi")
|
||||||
|
}
|
||||||
|
time.Sleep(33 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *pooler) levels() {
|
func (p *pooler) levels() {
|
||||||
_levelCache = newLevelCache(p.k)
|
_levelCache = newLevelCache(p.k)
|
||||||
|
|
||||||
for p.run {
|
for p.run {
|
||||||
if ldirty(p.k) {
|
if p.event.ldirty && ldirty(p.k) {
|
||||||
update(_levelCache.stripLevels, _levelCache.stripLevelsBuff, (2*p.k.PhysIn)+(8*p.k.VirtIn))
|
update(_levelCache.stripLevels, _levelCache.stripLevelsBuff, (2*p.k.PhysIn)+(8*p.k.VirtIn))
|
||||||
update(_levelCache.busLevels, _levelCache.busLevelsBuff, 8*p.k.NumBus())
|
update(_levelCache.busLevels, _levelCache.busLevelsBuff, 8*p.k.NumBus())
|
||||||
p.notify("ldirty")
|
p.notify("ldirty")
|
||||||
|
Loading…
Reference in New Issue
Block a user