Merge pull request #12 from onyx-and-iris/dev

This commit is contained in:
Adem 2022-10-26 15:08:54 +03:00 committed by GitHub
commit 67fe16e97f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 117 additions and 24 deletions

View File

@ -0,0 +1,7 @@
from setuptools import setup
setup(
name="hotkeys",
description="hotkeys example",
install_requires=["obsws-python", "keyboard"],
)

16
examples/levels/README.md Normal file
View File

@ -0,0 +1,16 @@
## About
Prints POSTFADER level values for audio device `Desktop Audio`. If mute toggled prints mute state changed notification.
## Use
This example assumes the existence of a `config.toml`, placed next to `__main__.py`:
```toml
[connection]
host = "localhost"
port = 4455
password = "mystrongpass"
```
Press `<Enter>` to exit from the script.

View File

@ -0,0 +1,46 @@
from enum import IntEnum
from math import log
import obsws_python as obs
LEVELTYPE = IntEnum(
"LEVELTYPE",
"VU POSTFADER PREFADER",
start=0,
)
def on_input_mute_state_changed(data):
"""An input's mute state has changed."""
if data.input_name == DEVICE:
print(f"{DEVICE} mute toggled")
def on_input_volume_meters(data):
"""volume level update every 50 milliseconds"""
def fget(x):
return round(20 * log(x, 10), 1) if x > 0 else -200.0
for device in data.inputs:
name = device["inputName"]
if name == DEVICE and device["inputLevelsMul"]:
left, right = device["inputLevelsMul"]
print(
f"{name} [L: {fget(left[LEVELTYPE.POSTFADER])}, R: {fget(right[LEVELTYPE.POSTFADER])}]",
)
def main():
client = obs.EventClient(subs=(obs.Subs.LOW_VOLUME | obs.Subs.INPUTVOLUMEMETERS))
client.callback.register([on_input_volume_meters, on_input_mute_state_changed])
while cmd := input("<Enter> to exit>\n"):
if not cmd:
break
if __name__ == "__main__":
DEVICE = "Desktop Audio"
main()

View File

@ -1,4 +1,5 @@
from .enum import Subs
from .events import EventClient
from .reqs import ReqClient
__ALL__ = ["ReqClient", "EventClient"]
__ALL__ = ["ReqClient", "EventClient", "Subs"]

43
obsws_python/enum.py Normal file
View File

@ -0,0 +1,43 @@
from enum import IntFlag
class Subs(IntFlag):
GENERAL = 1 << 0
CONFIG = 1 << 1
SCENES = 1 << 2
INPUTS = 1 << 3
TRANSITIONS = 1 << 4
FILTERS = 1 << 5
OUTPUTS = 1 << 6
SCENEITEMS = 1 << 7
MEDIAINPUTS = 1 << 8
VENDORS = 1 << 9
UI = 1 << 10
LOW_VOLUME = (
GENERAL
| CONFIG
| SCENES
| INPUTS
| TRANSITIONS
| FILTERS
| OUTPUTS
| SCENEITEMS
| MEDIAINPUTS
| VENDORS
| UI
)
INPUTVOLUMEMETERS = 1 << 16
INPUTACTIVESTATECHANGED = 1 << 17
INPUTSHOWSTATECHANGED = 1 << 18
SCENEITEMTRANSFORMCHANGED = 1 << 19
HIGH_VOLUME = (
INPUTVOLUMEMETERS
| INPUTACTIVESTATECHANGED
| INPUTSHOWSTATECHANGED
| SCENEITEMTRANSFORMCHANGED
)
ALL = LOW_VOLUME | HIGH_VOLUME

View File

@ -1,11 +1,11 @@
import json
import logging
import time
from enum import IntEnum
from threading import Thread
from .baseclient import ObsClient
from .callback import Callback
from .enum import Subs
"""
A class to interact with obs-websocket events
@ -13,33 +13,13 @@ defined in official github repo
https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#events
"""
Subs = IntEnum(
"Subs",
"general config scenes inputs transitions filters outputs sceneitems mediainputs vendors ui",
start=0,
)
class EventClient:
logger = logging.getLogger("events.eventclient")
DELAY = 0.001
def __init__(self, **kwargs):
defaultkwargs = {
"subs": (
(1 << Subs.general)
| (1 << Subs.config)
| (1 << Subs.scenes)
| (1 << Subs.inputs)
| (1 << Subs.transitions)
| (1 << Subs.filters)
| (1 << Subs.outputs)
| (1 << Subs.sceneitems)
| (1 << Subs.mediainputs)
| (1 << Subs.vendors)
| (1 << Subs.ui)
)
}
defaultkwargs = {"subs": Subs.LOW_VOLUME}
kwargs = defaultkwargs | kwargs
self.base_client = ObsClient(**kwargs)
if self.base_client.authenticate():

View File

@ -5,7 +5,7 @@ from setuptools import find_packages, setup
HERE = pathlib.Path(__file__).parent
VERSION = "1.1.1"
VERSION = "1.2.0"
PACKAGE_NAME = "obsws-python"
AUTHOR = "Adem Atikturk"
AUTHOR_EMAIL = "aatikturk@gmail.com"