👍️[Update] Model : OSC の処理を見直し
This commit is contained in:
@@ -4,7 +4,7 @@ ctranslate2==4.3.1
|
|||||||
transformers==4.40.2
|
transformers==4.40.2
|
||||||
pillow == 10.0.0
|
pillow == 10.0.0
|
||||||
PyAudioWPatch == 0.2.12.6
|
PyAudioWPatch == 0.2.12.6
|
||||||
python-osc == 1.8.3
|
python-osc == 1.9.0
|
||||||
deepl == 1.15.0
|
deepl == 1.15.0
|
||||||
flashtext ==2.7
|
flashtext ==2.7
|
||||||
pyinstaller==6.10.0
|
pyinstaller==6.10.0
|
||||||
@@ -17,4 +17,4 @@ pykakasi==2.3.0
|
|||||||
pycaw==20240210
|
pycaw==20240210
|
||||||
translators @ git+https://github.com/misyaguziya/translators@5.9.2.1
|
translators @ git+https://github.com/misyaguziya/translators@5.9.2.1
|
||||||
SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4.1
|
SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4.1
|
||||||
tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2
|
tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.3
|
||||||
@@ -5,7 +5,7 @@ ctranslate2==4.3.1
|
|||||||
transformers==4.40.2
|
transformers==4.40.2
|
||||||
pillow == 10.0.0
|
pillow == 10.0.0
|
||||||
PyAudioWPatch == 0.2.12.6
|
PyAudioWPatch == 0.2.12.6
|
||||||
python-osc == 1.8.3
|
python-osc == 1.9.0
|
||||||
deepl == 1.15.0
|
deepl == 1.15.0
|
||||||
flashtext ==2.7
|
flashtext ==2.7
|
||||||
pyinstaller==6.10.0
|
pyinstaller==6.10.0
|
||||||
@@ -18,4 +18,4 @@ pykakasi==2.3.0
|
|||||||
pycaw==20240210
|
pycaw==20240210
|
||||||
translators @ git+https://github.com/misyaguziya/translators@5.9.2.1
|
translators @ git+https://github.com/misyaguziya/translators@5.9.2.1
|
||||||
SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4.1
|
SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4.1
|
||||||
tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2
|
tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.3
|
||||||
@@ -17,7 +17,7 @@ from device_manager import device_manager
|
|||||||
from config import config
|
from config import config
|
||||||
|
|
||||||
from models.translation.translation_translator import Translator
|
from models.translation.translation_translator import Translator
|
||||||
from models.osc.osc_tools import sendTyping, sendMessage, receiveOscParameters, getOSCParameterValue
|
from models.osc.osc_tools import OSCHandler
|
||||||
from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder, SelectedSpeakerEnergyAndAudioRecorder
|
from models.transcription.transcription_recorder import SelectedMicEnergyAndAudioRecorder, SelectedSpeakerEnergyAndAudioRecorder
|
||||||
from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakerEnergyRecorder
|
from models.transcription.transcription_recorder import SelectedMicEnergyRecorder, SelectedSpeakerEnergyRecorder
|
||||||
from models.transcription.transcription_transcriber import AudioTranscriber
|
from models.transcription.transcription_transcriber import AudioTranscriber
|
||||||
@@ -100,6 +100,7 @@ class Model:
|
|||||||
self.mic_mute_status_check = None
|
self.mic_mute_status_check = None
|
||||||
self.kks = kakasi()
|
self.kks = kakasi()
|
||||||
self.watchdog = Watchdog(config.WATCHDOG_TIMEOUT, config.WATCHDOG_INTERVAL)
|
self.watchdog = Watchdog(config.WATCHDOG_TIMEOUT, config.WATCHDOG_INTERVAL)
|
||||||
|
self.osc_handler = OSCHandler(config.OSC_IP_ADDRESS, config.OSC_PORT)
|
||||||
|
|
||||||
def checkTranslatorCTranslate2ModelWeight(self, weight_type:str):
|
def checkTranslatorCTranslate2ModelWeight(self, weight_type:str):
|
||||||
return checkCTranslate2Weight(config.PATH_LOCAL, weight_type)
|
return checkCTranslate2Weight(config.PATH_LOCAL, weight_type)
|
||||||
@@ -286,28 +287,26 @@ class Model:
|
|||||||
filtered_list.append(filtered_item)
|
filtered_list.append(filtered_item)
|
||||||
return filtered_list
|
return filtered_list
|
||||||
|
|
||||||
@staticmethod
|
def setOscIpAddress(self, ip_address):
|
||||||
def oscStartSendTyping():
|
self.osc_handler.setOscIpAddress(ip_address)
|
||||||
sendTyping(True, config.OSC_IP_ADDRESS, config.OSC_PORT)
|
|
||||||
|
|
||||||
@staticmethod
|
def setOscPort(self, port):
|
||||||
def oscStopSendTyping():
|
self.osc_handler.setOscPort(port)
|
||||||
sendTyping(False, config.OSC_IP_ADDRESS, config.OSC_PORT)
|
|
||||||
|
|
||||||
@staticmethod
|
def oscStartSendTyping(self):
|
||||||
def oscSendMessage(message):
|
self.osc_handler.sendTyping(flag=True)
|
||||||
sendMessage(message, config.OSC_IP_ADDRESS, config.OSC_PORT)
|
|
||||||
|
|
||||||
@staticmethod
|
def oscStopSendTyping(self):
|
||||||
def getMuteSelfStatus():
|
self.osc_handler.sendTyping(flag=False)
|
||||||
return getOSCParameterValue(address="/avatar/parameters/MuteSelf")
|
|
||||||
|
def oscSendMessage(self, message, notification=True):
|
||||||
|
self.osc_handler.sendMessage(message=message, notification=notification)
|
||||||
|
|
||||||
|
def getMuteSelfStatus(self):
|
||||||
|
return self.osc_handler.getOSCParameterMuteSelf()
|
||||||
|
|
||||||
def startCheckMuteSelfStatus(self):
|
def startCheckMuteSelfStatus(self):
|
||||||
def checkMuteSelfStatus():
|
def checkMuteSelfStatus():
|
||||||
if self.mic_mute_status is not None:
|
|
||||||
self.changeMicTranscriptStatus()
|
|
||||||
self.stopCheckMuteSelfStatus()
|
|
||||||
|
|
||||||
status = self.getMuteSelfStatus()
|
status = self.getMuteSelfStatus()
|
||||||
if status is not None:
|
if status is not None:
|
||||||
self.mic_mute_status = status
|
self.mic_mute_status = status
|
||||||
@@ -325,10 +324,7 @@ class Model:
|
|||||||
self.mic_mute_status_check = None
|
self.mic_mute_status_check = None
|
||||||
|
|
||||||
def startReceiveOSC(self):
|
def startReceiveOSC(self):
|
||||||
osc_parameter_prefix = "/avatar/parameters/"
|
def changeHandlerMute(address, osc_arguments):
|
||||||
param_MuteSelf = "MuteSelf"
|
|
||||||
|
|
||||||
def change_handler_mute(address, osc_arguments):
|
|
||||||
if osc_arguments is True and self.mic_mute_status is False:
|
if osc_arguments is True and self.mic_mute_status is False:
|
||||||
self.mic_mute_status = osc_arguments
|
self.mic_mute_status = osc_arguments
|
||||||
self.changeMicTranscriptStatus()
|
self.changeMicTranscriptStatus()
|
||||||
@@ -337,12 +333,12 @@ class Model:
|
|||||||
self.changeMicTranscriptStatus()
|
self.changeMicTranscriptStatus()
|
||||||
|
|
||||||
dict_filter_and_target = {
|
dict_filter_and_target = {
|
||||||
osc_parameter_prefix + param_MuteSelf: change_handler_mute,
|
self.osc_handler.osc_parameter_muteself: changeHandlerMute,
|
||||||
}
|
}
|
||||||
|
self.osc_handler.receiveOscParameters(dict_filter_and_target)
|
||||||
|
|
||||||
th_osc_server = Thread(target=receiveOscParameters, args=(dict_filter_and_target,))
|
def stopReceiveOSC(self):
|
||||||
th_osc_server.daemon = True
|
self.osc_handler.oscServerStop()
|
||||||
th_osc_server.start()
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def checkSoftwareUpdated():
|
def checkSoftwareUpdated():
|
||||||
|
|||||||
@@ -1,60 +1,55 @@
|
|||||||
|
import asyncio
|
||||||
|
from typing import Any
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from pythonosc import osc_message_builder, udp_client, dispatcher, osc_server
|
from threading import Thread
|
||||||
|
from pythonosc import udp_client, dispatcher, osc_server
|
||||||
from tinyoscquery.queryservice import OSCQueryService
|
from tinyoscquery.queryservice import OSCQueryService
|
||||||
from tinyoscquery.query import OSCQueryBrowser, OSCQueryClient
|
from tinyoscquery.query import OSCQueryBrowser, OSCQueryClient
|
||||||
from tinyoscquery.utility import get_open_udp_port, get_open_tcp_port
|
from tinyoscquery.utility import get_open_udp_port, get_open_tcp_port
|
||||||
from psutil import process_iter
|
from tinyoscquery.shared.node import OSCAccess
|
||||||
|
|
||||||
|
class OSCHandler:
|
||||||
|
def __init__(self, ip_address="127.0.0.1", port=9000) -> None:
|
||||||
|
self.osc_ip_address = ip_address
|
||||||
|
self.osc_port = port
|
||||||
|
self.osc_parameter_muteself = "/avatar/parameters/MuteSelf"
|
||||||
|
self.osc_parameter_chatbox_typing = "/chatbox/typing"
|
||||||
|
self.osc_parameter_chatbox_input = "/chatbox/input"
|
||||||
|
self.udp_client = udp_client.SimpleUDPClient(self.osc_ip_address, self.osc_port)
|
||||||
|
self.osc_server_name = "VRChat-Client"
|
||||||
|
self.osc_server = None
|
||||||
|
self.osc_query_service = None
|
||||||
|
self.osc_query_service_name = "VRCT"
|
||||||
|
self.osc_server_ip_address = ip_address
|
||||||
|
self.http_port = None
|
||||||
|
self.osc_server_port = None
|
||||||
|
|
||||||
|
def setOscIpAddress(self, ip_address:str) -> None:
|
||||||
|
self.osc_ip_address = ip_address
|
||||||
|
self.udp_client = udp_client.SimpleUDPClient(self.osc_ip_address, self.osc_port)
|
||||||
|
|
||||||
|
def setOscPort(self, port:int) -> None:
|
||||||
|
self.osc_port = port
|
||||||
|
self.udp_client = udp_client.SimpleUDPClient(self.osc_ip_address, self.osc_port)
|
||||||
|
|
||||||
# send OSC message typing
|
# send OSC message typing
|
||||||
def sendTyping(flag=False, ip_address="127.0.0.1", port=9000):
|
def sendTyping(self, flag:bool=False) -> None:
|
||||||
typing = osc_message_builder.OscMessageBuilder(address="/chatbox/typing")
|
self.udp_client.send_message(self.osc_parameter_chatbox_typing, [flag])
|
||||||
typing.add_arg(flag)
|
|
||||||
b_typing = typing.build()
|
|
||||||
client = udp_client.SimpleUDPClient(ip_address, port)
|
|
||||||
client.send(b_typing)
|
|
||||||
|
|
||||||
# send OSC message
|
# send OSC message
|
||||||
def sendMessage(message=None, ip_address="127.0.0.1", port=9000):
|
def sendMessage(self, message:str="", notification:bool=True) -> None:
|
||||||
if message is not None:
|
if len(message) > 0:
|
||||||
msg = osc_message_builder.OscMessageBuilder(address="/chatbox/input")
|
self.udp_client.send_message(self.osc_parameter_chatbox_input, [f"{message}", True, notification])
|
||||||
msg.add_arg(f"{message}")
|
|
||||||
msg.add_arg(True)
|
|
||||||
msg.add_arg(True)
|
|
||||||
b_msg = msg.build()
|
|
||||||
client = udp_client.SimpleUDPClient(ip_address, port)
|
|
||||||
client.send(b_msg)
|
|
||||||
|
|
||||||
def sendTestAction(ip_address="127.0.0.1", port=9000):
|
def getOSCParameterValue(self, address:str) -> Any:
|
||||||
client = udp_client.SimpleUDPClient(ip_address, port)
|
|
||||||
client.send_message("/input/Vertical", 1)
|
|
||||||
sleep(0.01)
|
|
||||||
client.send_message("/input/Vertical", False)
|
|
||||||
|
|
||||||
# send Input Voice
|
|
||||||
def sendInputVoice(flag=False, ip_address="127.0.0.1", port=9000):
|
|
||||||
input_voice = osc_message_builder.OscMessageBuilder(address="/input/Voice")
|
|
||||||
input_voice.add_arg(flag)
|
|
||||||
b_input_voice = input_voice.build()
|
|
||||||
client = udp_client.SimpleUDPClient(ip_address, port)
|
|
||||||
client.send(b_input_voice)
|
|
||||||
|
|
||||||
def sendChangeVoice(ip_address="127.0.0.1", port=9000):
|
|
||||||
sendInputVoice(flag=0, ip_address=ip_address, port=port)
|
|
||||||
sleep(0.05)
|
|
||||||
sendInputVoice(flag=1, ip_address=ip_address, port=port)
|
|
||||||
sleep(0.05)
|
|
||||||
sendInputVoice(flag=0, ip_address=ip_address, port=port)
|
|
||||||
sleep(0.05)
|
|
||||||
|
|
||||||
def getOSCParameterValue(address, server_name="VRChat-Client"):
|
|
||||||
value = None
|
value = None
|
||||||
try:
|
try:
|
||||||
browser = OSCQueryBrowser()
|
browser = OSCQueryBrowser()
|
||||||
sleep(1)
|
sleep(1)
|
||||||
service = browser.find_service_by_name(server_name)
|
service = browser.find_service_by_name(self.osc_server_name)
|
||||||
if service is not None:
|
if service is not None:
|
||||||
oscq = OSCQueryClient(service)
|
osc_query_client = OSCQueryClient(service)
|
||||||
mute_self_node = oscq.query_node(address)
|
mute_self_node = osc_query_client.query_node(address)
|
||||||
value = mute_self_node.value[0]
|
value = mute_self_node.value[0]
|
||||||
browser.zc.close()
|
browser.zc.close()
|
||||||
browser.browser.cancel()
|
browser.browser.cancel()
|
||||||
@@ -63,50 +58,41 @@ def getOSCParameterValue(address, server_name="VRChat-Client"):
|
|||||||
pass
|
pass
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def checkVRChatRunning() -> bool:
|
def getOSCParameterMuteSelf(self) -> bool:
|
||||||
_proc_name = "VRChat.exe"
|
return self.getOSCParameterValue(self.osc_parameter_muteself)
|
||||||
return _proc_name in (p.name() for p in process_iter())
|
|
||||||
|
|
||||||
def receiveOscParameters(dict_filter_and_target, ip_address="127.0.0.1", title="VRCT"):
|
def receiveOscParameters(self, dict_filter_and_target:dict) -> None:
|
||||||
while True:
|
self.osc_server_port = get_open_udp_port()
|
||||||
if not checkVRChatRunning():
|
self.http_port = get_open_tcp_port()
|
||||||
sleep(1)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
osc_port = get_open_udp_port()
|
|
||||||
http_port = get_open_tcp_port()
|
|
||||||
osc_dispatcher = dispatcher.Dispatcher()
|
osc_dispatcher = dispatcher.Dispatcher()
|
||||||
for filter, target in dict_filter_and_target.items():
|
for filter, target in dict_filter_and_target.items():
|
||||||
osc_dispatcher.map(filter, target)
|
osc_dispatcher.map(filter, target)
|
||||||
osc_udp_server = osc_server.ThreadingOSCUDPServer((ip_address, osc_port), osc_dispatcher)
|
self.osc_server = osc_server.ThreadingOSCUDPServer((self.osc_server_ip_address, self.osc_server_port), osc_dispatcher, asyncio.get_event_loop())
|
||||||
|
Thread(target=self.oscServerServe, daemon=True).start()
|
||||||
|
|
||||||
osc_client = OSCQueryService(title, http_port, osc_port)
|
self.osc_query_service = OSCQueryService(self.osc_query_service_name, self.http_port, self.osc_server_port)
|
||||||
for filter, target in dict_filter_and_target.items():
|
for filter, target in dict_filter_and_target.items():
|
||||||
osc_client.advertise_endpoint(filter)
|
self.osc_query_service.advertise_endpoint(filter, access=OSCAccess.READWRITE_VALUE)
|
||||||
|
|
||||||
osc_udp_server.serve_forever()
|
def oscServerServe(self) -> None:
|
||||||
except Exception:
|
self.osc_server.serve_forever(100)
|
||||||
pass
|
|
||||||
|
def oscServerStop(self) -> None:
|
||||||
|
if isinstance(self.osc_server, osc_server.ThreadingOSCUDPServer):
|
||||||
|
self.osc_server.shutdown()
|
||||||
|
self.osc_server = None
|
||||||
|
if isinstance(self.osc_query_service, OSCQueryService):
|
||||||
|
self.osc_query_service.http_server.shutdown()
|
||||||
|
self.osc_query_service = None
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
osc_parameter_prefix = "/avatar/parameters/"
|
handler = OSCHandler()
|
||||||
osc_avatar_change_path = "/avatar/change"
|
handler.receiveOscParameters({
|
||||||
param_MuteSelf = "MuteSelf"
|
"/avatar/parameters/MuteSelf": print,
|
||||||
param_Voice = "Voice"
|
})
|
||||||
|
sleep(5)
|
||||||
def print_handler_all(address, *args):
|
handler.sendTyping(True)
|
||||||
print(f"all {address}: {args}")
|
sleep(1)
|
||||||
|
handler.sendMessage(message="Hello World", notification=True)
|
||||||
def print_handler_muteself(address, *args):
|
sleep(60)
|
||||||
print(f"muteself {address}: {args}")
|
handler.oscServerStop()
|
||||||
|
|
||||||
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)
|
|
||||||
Reference in New Issue
Block a user