mirror of
https://github.com/onyx-and-iris/voicemeeter-api-python.git
synced 2024-11-24 11:50:48 +00:00
add example events.
This commit is contained in:
parent
0548d82295
commit
d428694fcf
33
examples/events/README.md
Normal file
33
examples/events/README.md
Normal file
@ -0,0 +1,33 @@
|
||||
## About
|
||||
|
||||
This script demonstrates how to interact with the event thread/event object. It also demonstrates how to register event specific callbacks.
|
||||
|
||||
By default the interface does not broadcast any events. So even though our callbacks are registered, and the event thread has been initiated, we won't receive updates.
|
||||
|
||||
After five seconds the event object is used to subscribe to all events for a total of thirty seconds.
|
||||
|
||||
Remember that events can also be unsubscribed to with `vm.event.remove()`. Callbacks can also be deregistered using vm.observer.remove().
|
||||
|
||||
The same can be done without a context manager:
|
||||
|
||||
```python
|
||||
vm = voicemeeterlib.api(KIND_ID)
|
||||
vm.login()
|
||||
vm.observer.add(on_midi) # register an `on_midi` callback function
|
||||
vm.init_thread()
|
||||
vm.event.add("midi") # in this case we only subscribe to midi events.
|
||||
...
|
||||
vm.end_thread()
|
||||
vm.logout()
|
||||
```
|
||||
|
||||
Once initialized, the event thread will continously run until end_thread() is called. Even if all events are unsubscribed to.
|
||||
|
||||
## Use
|
||||
|
||||
Simply run the script and trigger events and you should see the output after 5 seconds. To trigger events do the following:
|
||||
|
||||
- change GUI parameters to trigger pdirty
|
||||
- press any macrobutton to trigger mdirty
|
||||
- play audio through any bus to trigger ldirty
|
||||
- any midi input to trigger midi
|
54
examples/events/__main__.py
Normal file
54
examples/events/__main__.py
Normal file
@ -0,0 +1,54 @@
|
||||
import json
|
||||
import logging
|
||||
import time
|
||||
from logging import config
|
||||
|
||||
import voicemeeterlib
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
class App:
|
||||
def __init__(self, vm):
|
||||
self.vm = vm
|
||||
# register the callbacks for each event
|
||||
self.vm.observer.add(
|
||||
[self.on_pdirty, self.on_mdirty, self.on_ldirty, self.on_midi]
|
||||
)
|
||||
|
||||
def __enter__(self):
|
||||
self.vm.init_thread()
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
self.vm.end_thread()
|
||||
|
||||
def on_pdirty(self):
|
||||
print("pdirty!")
|
||||
|
||||
def on_mdirty(self):
|
||||
print("mdirty!")
|
||||
|
||||
def on_ldirty(self):
|
||||
for bus in self.vm.bus:
|
||||
if bus.levels.isdirty:
|
||||
print(bus, bus.levels.all)
|
||||
|
||||
def on_midi(self):
|
||||
current = self.vm.midi.current
|
||||
print(f"Value of midi button {current} is {self.vm.midi.get(current)}")
|
||||
|
||||
|
||||
def main():
|
||||
KIND_ID = "banana"
|
||||
|
||||
with voicemeeterlib.api(KIND_ID) as vm:
|
||||
with App(vm) as app:
|
||||
for i in range(5, 0, -1):
|
||||
print(f"events start in {i} seconds")
|
||||
time.sleep(1)
|
||||
vm.event.add(["pdirty", "ldirty", "midi", "mdirty"])
|
||||
time.sleep(30)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user