👍️[Update] Model : OSC Parameterを能動的に取得する処理を追加/mute同期機能を修正

This commit is contained in:
misyaguziya
2024-05-06 16:57:15 +09:00
parent cc7e21a609
commit 047a3a35bf
2 changed files with 25 additions and 21 deletions

View File

@@ -17,7 +17,7 @@ from typing import Callable
from flashtext import KeywordProcessor from flashtext import KeywordProcessor
from models.translation.translation_translator import Translator from models.translation.translation_translator import Translator
from models.transcription.transcription_utils import getInputDevices, getOutputDevices from models.transcription.transcription_utils import getInputDevices, getOutputDevices
from models.osc.osc_tools import sendTyping, sendMessage, receiveOscParameters from models.osc.osc_tools import sendTyping, sendMessage, receiveOscParameters, getOSCParameterValue
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
@@ -79,8 +79,7 @@ class Model:
self.speaker_energy_plot_progressbar = None self.speaker_energy_plot_progressbar = None
self.translator = Translator() self.translator = Translator()
self.keyword_processor = KeywordProcessor() self.keyword_processor = KeywordProcessor()
self.mic_audio_queue = ConditionalQueue() self.mic_audio_queue = None
# self.mic_energy_queue = ConditionalQueue()
self.mute_status = False self.mute_status = False
def checkCTranslatorCTranslate2ModelWeight(self): def checkCTranslatorCTranslate2ModelWeight(self):
@@ -227,7 +226,7 @@ class Model:
def startReceiveOSC(self): def startReceiveOSC(self):
osc_parameter_prefix = "/avatar/parameters/" osc_parameter_prefix = "/avatar/parameters/"
param_MuteSelf = "MuteSelf" param_MuteSelf = "MuteSelf"
param_Voice = "Voice" self.mute_status = getOSCParameterValue(address=osc_parameter_prefix + param_MuteSelf)
def change_handler_mute(address, osc_arguments): def change_handler_mute(address, osc_arguments):
if config.ENABLE_MUTE_DETECT is True: if config.ENABLE_MUTE_DETECT is True:
@@ -238,18 +237,11 @@ class Model:
self.startPutQueueMicAudio() self.startPutQueueMicAudio()
self.mute_status = False self.mute_status = False
def change_handler_voice(address, osc_arguments):
if config.ENABLE_MUTE_DETECT is True:
if self.mute_status is True:
self.startPutQueueMicAudio()
self.mute_status = False
dict_filter_and_target = { dict_filter_and_target = {
osc_parameter_prefix + param_MuteSelf: change_handler_mute, osc_parameter_prefix + param_MuteSelf: change_handler_mute,
osc_parameter_prefix + param_Voice: change_handler_voice,
} }
th_osc_server = threadFnc(receiveOscParameters, args=(dict_filter_and_target,)) th_osc_server = Thread(target=receiveOscParameters, args=(dict_filter_and_target,))
th_osc_server.daemon = True th_osc_server.daemon = True
th_osc_server.start() th_osc_server.start()
@@ -330,6 +322,9 @@ class Model:
self.mic_audio_queue = ConditionalQueue() self.mic_audio_queue = ConditionalQueue()
# self.mic_energy_queue = ConditionalQueue() # self.mic_energy_queue = ConditionalQueue()
if config.ENABLE_MUTE_DETECT is True and self.mute_status is True:
model.stopPutQueueMicAudio()
mic_device = choice_mic_device[0] mic_device = choice_mic_device[0]
record_timeout = config.INPUT_MIC_RECORD_TIMEOUT record_timeout = config.INPUT_MIC_RECORD_TIMEOUT
phase_timeout = config.INPUT_MIC_PHRASE_TIMEOUT phase_timeout = config.INPUT_MIC_PHRASE_TIMEOUT
@@ -388,12 +383,14 @@ class Model:
# self.mic_get_energy.start() # self.mic_get_energy.start()
def startPutQueueMicAudio(self): def startPutQueueMicAudio(self):
if isinstance(self.mic_audio_queue, ConditionalQueue):
while not self.mic_audio_queue.empty(): while not self.mic_audio_queue.empty():
self.mic_audio_queue.get() self.mic_audio_queue.get()
self.mic_audio_queue.set_flag(True) self.mic_audio_queue.set_flag(True)
# self.mic_energy_queue.set_flag(True) # self.mic_energy_queue.set_flag(True)
def stopPutQueueMicAudio(self): def stopPutQueueMicAudio(self):
if isinstance(self.mic_audio_queue, ConditionalQueue):
self.mic_audio_queue.set_flag(False) self.mic_audio_queue.set_flag(False)
while not self.mic_audio_queue.empty(): while not self.mic_audio_queue.empty():
self.mic_audio_queue.get() self.mic_audio_queue.get()

View File

@@ -1,10 +1,10 @@
from time import sleep from time import sleep
from threading import Thread
from pythonosc import osc_message_builder from pythonosc import osc_message_builder
from pythonosc import udp_client from pythonosc import udp_client
from pythonosc import dispatcher from pythonosc import dispatcher
from pythonosc import osc_server from pythonosc import osc_server
from tinyoscquery.queryservice import OSCQueryService from tinyoscquery.queryservice import OSCQueryService
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
# send OSC message typing # send OSC message typing
@@ -48,6 +48,13 @@ def sendChangeVoice(ip_address="127.0.0.1", port=9000):
sendInputVoice(flag=0, ip_address=ip_address, port=port) sendInputVoice(flag=0, ip_address=ip_address, port=port)
sleep(0.05) sleep(0.05)
def getOSCParameterValue(address, server_name="VRChat-Client"):
browser = OSCQueryBrowser()
sleep(1)
service = browser.find_service_by_name(server_name)
oscq = OSCQueryClient(service)
mute_self_node = oscq.query_node(address)
return mute_self_node.value[0]
def receiveOscParameters(dict_filter_and_target, 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() osc_port = get_open_udp_port()