From 52682a5c2e7dad82b9a7970b20cce2f03d0968f5 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Wed, 7 Feb 2024 23:00:51 +0900 Subject: [PATCH 1/2] [WIP/TEST] Add OSCQuery --- models/osc/osc_tools.py | 30 ++++++++++++++++++++++++------ requirements.txt | 3 ++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/models/osc/osc_tools.py b/models/osc/osc_tools.py index 80f2b785..0d869375 100644 --- a/models/osc/osc_tools.py +++ b/models/osc/osc_tools.py @@ -3,6 +3,8 @@ from pythonosc import osc_message_builder from pythonosc import udp_client from pythonosc import dispatcher from pythonosc import osc_server +from tinyoscquery.queryservice import OSCQueryService +from tinyoscquery.utility import get_open_udp_port, get_open_tcp_port # send OSC message typing def sendTyping(flag=False, ip_address="127.0.0.1", port=9000): @@ -45,12 +47,28 @@ def sendChangeVoice(ip_address="127.0.0.1", port=9000): sendInputVoice(flag=0, ip_address=ip_address, port=port) sleep(0.05) -def receiveOscParameters(target, filter="/*", ip_address="127.0.0.1", port=9001): - _dispatcher = dispatcher.Dispatcher() - _dispatcher.map(filter, target) - server = osc_server.ThreadingOSCUDPServer((ip_address, port), _dispatcher) +# def receiveOscParameters(target, filter="/*", ip_address="127.0.0.1", port=9001): +# _dispatcher = dispatcher.Dispatcher() +# _dispatcher.map(filter, target) +# server = osc_server.ThreadingOSCUDPServer((ip_address, port), _dispatcher) return server +def receiveOscParameters(target, filter="/avatar/parameters/*", ip_address="127.0.0.1", title="VRCT"): + osc_port = get_open_udp_port() + http_port = get_open_tcp_port() + osc_dispatcher = dispatcher.Dispatcher() + osc_dispatcher.map(filter, target) + osc_udp_server = osc_server.ThreadingOSCUDPServer((ip_address, osc_port), osc_dispatcher) + osc_client = OSCQueryService(title, http_port, osc_port) + osc_client.advertise_endpoint(filter) + return osc_udp_server, osc_client + if __name__ == "__main__": - sendChangeVoice() - sendChangeVoice() \ No newline at end of file + import threading + + def print_handler(address, *args): + print(f"{address}: {args}") + + server, client = receiveOscParameters(print_handler, filter="/input/*") + server_thread = threading.Thread(target=server.serve_forever) + server_thread.start() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index b6e14d85..f0c80d3b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,5 @@ CTkToolTip == 0.8 pyinstaller==6.2.0 transformers[torch] sentencepiece==0.1.99 -ctranslate2==3.21.0 \ No newline at end of file +ctranslate2==3.21.0 +tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2 \ No newline at end of file From fe1054212b8ce712bcefdfc3075c7e525f567587 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Thu, 8 Feb 2024 22:58:22 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=91=8D[Update]=20Model=20:=20OSCQuery?= =?UTF-8?q?=20Receive=E5=87=A6=E7=90=86=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 辞書型をインプットにコールバックで動作するように設定 --- models/osc/osc_tools.py | 43 +++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/models/osc/osc_tools.py b/models/osc/osc_tools.py index 0d869375..51608f66 100644 --- a/models/osc/osc_tools.py +++ b/models/osc/osc_tools.py @@ -1,4 +1,5 @@ from time import sleep +import threading from pythonosc import osc_message_builder from pythonosc import udp_client from pythonosc import dispatcher @@ -47,28 +48,40 @@ def sendChangeVoice(ip_address="127.0.0.1", port=9000): sendInputVoice(flag=0, ip_address=ip_address, port=port) sleep(0.05) -# def receiveOscParameters(target, filter="/*", ip_address="127.0.0.1", port=9001): -# _dispatcher = dispatcher.Dispatcher() -# _dispatcher.map(filter, target) -# server = osc_server.ThreadingOSCUDPServer((ip_address, port), _dispatcher) - return server -def receiveOscParameters(target, filter="/avatar/parameters/*", ip_address="127.0.0.1", title="VRCT"): +def receiveOscParameters(dict_filter_and_target, ip_address="127.0.0.1", title="VRCT"): osc_port = get_open_udp_port() http_port = get_open_tcp_port() osc_dispatcher = dispatcher.Dispatcher() - osc_dispatcher.map(filter, target) + for filter, target in dict_filter_and_target.items(): + osc_dispatcher.map(filter, target) + osc_udp_server = osc_server.ThreadingOSCUDPServer((ip_address, osc_port), osc_dispatcher) + threading.Thread(target=osc_udp_server.serve_forever, daemon = True).start() + osc_client = OSCQueryService(title, http_port, osc_port) - osc_client.advertise_endpoint(filter) - return osc_udp_server, osc_client + for filter, target in dict_filter_and_target.items(): + osc_client.advertise_endpoint(filter) if __name__ == "__main__": - import threading + osc_parameter_prefix = "/avatar/parameters/" + osc_avatar_change_path = "/avatar/change" + param_MuteSelf = "MuteSelf" + param_Voice = "Voice" - def print_handler(address, *args): - print(f"{address}: {args}") + def print_handler_all(address, *args): + print(f"all {address}: {args}") - server, client = receiveOscParameters(print_handler, filter="/input/*") - server_thread = threading.Thread(target=server.serve_forever) - server_thread.start() \ No newline at end of file + def print_handler_muteself(address, *args): + print(f"muteself {address}: {args}") + + def print_handler_voice(address, *args): + print(f"voice {address}: {args}") + + dict_filter_and_target = { + # osc_parameter_prefix + "*": print_handler_all, + osc_parameter_prefix + param_MuteSelf: print_handler_muteself, + osc_parameter_prefix + param_Voice: print_handler_voice, + } + + receiveOscParameters(dict_filter_and_target) \ No newline at end of file