👍️[Update] Model: ENABLE_MIC_AUTOMATIC_SELECTION/ENABLE_SPEAKER_AUTOMATIC_SELECTIONの処理をdevice_managerのcallbackで実行するように変更

This commit is contained in:
misyaguziya
2024-09-18 17:38:32 +09:00
parent f34d5183d1
commit aa30c248d5
4 changed files with 43 additions and 42 deletions

View File

@@ -423,33 +423,6 @@ class Model:
result = [device["name"] for device in device_manager.getOutputDevices()] result = [device["name"] for device in device_manager.getOutputDevices()]
return result return result
def startAutomaticDeviceSelection(self, fnc_mic, fnc_speaker):
def checkDevice(fnc_mic, fnc_speaker):
if config.ENABLE_MIC_AUTOMATIC_SELECTION is True:
default_device = device_manager.getDefaultInputDevice()
mic_host_name = default_device["host"]["name"]
mic_device_name = default_device["device"]["name"]
if mic_host_name != config.CHOICE_MIC_HOST or mic_device_name != config.CHOICE_MIC_DEVICE:
fnc_mic(mic_host_name, mic_device_name)
if config.ENABLE_SPEAKER_AUTOMATIC_SELECTION is True:
default_device = device_manager.getDefaultOutputDevice()
speaker_device_name = default_device["device"]["name"]
if speaker_device_name != config.CHOICE_SPEAKER_DEVICE:
fnc_speaker(speaker_device_name)
sleep(1)
if isinstance(self.th_check_device, threadFnc) is False:
self.th_check_device = threadFnc(checkDevice, args=(fnc_mic, fnc_speaker,))
self.th_check_device.daemon = True
self.th_check_device.start()
def stopAutomaticDeviceSelection(self):
if config.ENABLE_MIC_AUTOMATIC_SELECTION is False and config.ENABLE_SPEAKER_AUTOMATIC_SELECTION is False:
if isinstance(self.th_check_device, threadFnc):
self.th_check_device.stop()
self.th_check_device = None
def startMicTranscript(self, fnc): def startMicTranscript(self, fnc):
if config.ENABLE_MIC_AUTOMATIC_SELECTION is True: if config.ENABLE_MIC_AUTOMATIC_SELECTION is True:
default_device = device_manager.getDefaultInputDevice() default_device = device_manager.getDefaultInputDevice()

View File

@@ -35,6 +35,9 @@ class DeviceManager:
self.default_output_device = {"device": {"name": "NoDevice"}} self.default_output_device = {"device": {"name": "NoDevice"}}
self.update() self.update()
self.callback_default_input_device = None
self.callback_default_output_device = None
self.monitoring_flag = False self.monitoring_flag = False
self.startMonitoring() self.startMonitoring()
@@ -123,6 +126,11 @@ class DeviceManager:
enumerator.UnregisterEndpointNotificationCallback(cb) enumerator.UnregisterEndpointNotificationCallback(cb)
self.update() self.update()
if self.callback_default_input_device is not None:
self.callback_default_input_device(self.default_input_device["host"]["name"], self.default_input_device["device"]["name"])
if self.callback_default_output_device is not None:
self.callback_default_output_device(self.default_output_device["device"]["name"])
cb = Client() cb = Client()
enumerator = AudioUtilities.GetDeviceEnumerator() enumerator = AudioUtilities.GetDeviceEnumerator()
enumerator.RegisterEndpointNotificationCallback(cb) enumerator.RegisterEndpointNotificationCallback(cb)
@@ -140,6 +148,18 @@ class DeviceManager:
self.monitoring_flag = False self.monitoring_flag = False
self.th_monitoring.join() self.th_monitoring.join()
def setCallbackDefaultInputDevice(self, callback):
self.callback_default_input_device = callback
def clearCallbackDefaultInputDevice(self):
self.callback_default_input_device = None
def setCallbackDefaultOutputDevice(self, callback):
self.callback_default_output_device = callback
def clearCallbackDefaultOutputDevice(self):
self.callback_default_output_device = None
def getInputDevices(self): def getInputDevices(self):
return self.input_devices return self.input_devices

View File

@@ -6,6 +6,7 @@ import re
from config import config from config import config
from model import model from model import model
from utils import isUniqueStrings, printLog from utils import isUniqueStrings, printLog
from models.transcription.transcription_utils import device_manager
# Common # Common
class DownloadSoftwareProgressBar: class DownloadSoftwareProgressBar:
@@ -778,11 +779,11 @@ def callbackClearDeeplAuthKey(*args, **kwargs) -> dict:
# Transcription Tab # Transcription Tab
# Transcription (Mic) # Transcription (Mic)
class UpdateSelectedDevice: class UpdateSelectedMicDevice:
def __init__(self, action): def __init__(self, action):
self.action = action self.action = action
def set_mic(self, host, device) -> None: def set(self, host, device) -> None:
config.CHOICE_MIC_HOST = host config.CHOICE_MIC_HOST = host
config.CHOICE_MIC_DEVICE = device config.CHOICE_MIC_DEVICE = device
printLog("Update Host/Mic Device", f"{host}/{device}") printLog("Update Host/Mic Device", f"{host}/{device}")
@@ -791,7 +792,11 @@ class UpdateSelectedDevice:
"result":{"host":host, "device":device} "result":{"host":host, "device":device}
}) })
def set_speaker(self, device) -> None: class UpdateSelectedSpeakerDevice:
def __init__(self, action):
self.action = action
def set(self, device) -> None:
config.CHOICE_SPEAKER_DEVICE = device config.CHOICE_SPEAKER_DEVICE = device
printLog("Update Speaker Device", device) printLog("Update Speaker Device", device)
self.action("speaker", { self.action("speaker", {
@@ -801,27 +806,27 @@ class UpdateSelectedDevice:
def callbackEnableMicAutomaticSelection(data, action, *args, **kwargs) -> dict: def callbackEnableMicAutomaticSelection(data, action, *args, **kwargs) -> dict:
printLog("Enable Mic Automatic Selection") printLog("Enable Mic Automatic Selection")
update_device = UpdateSelectedDevice(action) update_device = UpdateSelectedMicDevice(action)
model.startAutomaticDeviceSelection(update_device.set_mic, update_device.set_speaker) device_manager.setCallbackDefaultInputDevice(update_device.set)
config.ENABLE_MIC_AUTOMATIC_SELECTION = True config.ENABLE_MIC_AUTOMATIC_SELECTION = True
return {"status":200, "result":config.ENABLE_MIC_AUTOMATIC_SELECTION} return {"status":200, "result":config.ENABLE_MIC_AUTOMATIC_SELECTION}
def callbackDisableMicAutomaticSelection(*args, **kwargs) -> dict: def callbackDisableMicAutomaticSelection(*args, **kwargs) -> dict:
printLog("Disable Mic Automatic Selection") printLog("Disable Mic Automatic Selection")
model.stopAutomaticDeviceSelection() device_manager.clearCallbackDefaultInputDevice()
config.ENABLE_MIC_AUTOMATIC_SELECTION = False config.ENABLE_MIC_AUTOMATIC_SELECTION = False
return {"status":200, "result":config.ENABLE_MIC_AUTOMATIC_SELECTION} return {"status":200, "result":config.ENABLE_MIC_AUTOMATIC_SELECTION}
def callbackEnableSpeakerAutomaticSelection(data, action, *args, **kwargs) -> dict: def callbackEnableSpeakerAutomaticSelection(data, action, *args, **kwargs) -> dict:
printLog("Enable Speaker Automatic Selection") printLog("Enable Speaker Automatic Selection")
update_device = UpdateSelectedDevice(action) update_device = UpdateSelectedSpeakerDevice(action)
model.startAutomaticDeviceSelection(update_device.set_mic, update_device.set_speaker) device_manager.setCallbackDefaultOutputDevice(update_device.set)
config.ENABLE_SPEAKER_AUTOMATIC_SELECTION = True config.ENABLE_SPEAKER_AUTOMATIC_SELECTION = True
return {"status":200, "result":config.ENABLE_SPEAKER_AUTOMATIC_SELECTION} return {"status":200, "result":config.ENABLE_SPEAKER_AUTOMATIC_SELECTION}
def callbackDisableSpeakerAutomaticSelection(*args, **kwargs) -> dict: def callbackDisableSpeakerAutomaticSelection(*args, **kwargs) -> dict:
printLog("Disable Speaker Automatic Selection") printLog("Disable Speaker Automatic Selection")
model.stopAutomaticDeviceSelection() device_manager.clearCallbackDefaultInputDevice()
config.ENABLE_SPEAKER_AUTOMATIC_SELECTION = False config.ENABLE_SPEAKER_AUTOMATIC_SELECTION = False
return {"status":200, "result":config.ENABLE_SPEAKER_AUTOMATIC_SELECTION} return {"status":200, "result":config.ENABLE_SPEAKER_AUTOMATIC_SELECTION}
@@ -1412,8 +1417,12 @@ def init(actions:dict, *args, **kwargs) -> None:
# init Auto device selection # init Auto device selection
printLog("Init Auto Device Selection") printLog("Init Auto Device Selection")
if config.ENABLE_MIC_AUTOMATIC_SELECTION is True or config.ENABLE_SPEAKER_AUTOMATIC_SELECTION is True: if config.ENABLE_MIC_AUTOMATIC_SELECTION is True:
update_device = UpdateSelectedDevice(actions["update_selected_device"]) update_mic_device = UpdateSelectedMicDevice(actions["update_selected_mic_device"])
model.startAutomaticDeviceSelection(update_device.set_mic, update_device.set_speaker) device_manager.setCallbackDefaultInputDevice(update_mic_device.set)
if config.ENABLE_SPEAKER_AUTOMATIC_SELECTION is True:
update_speaker_device = UpdateSelectedSpeakerDevice(actions["update_selected_speaker_device"])
device_manager.setCallbackDefaultOutputDevice(update_speaker_device.set)
printLog("End Initialization") printLog("End Initialization")

View File

@@ -244,10 +244,8 @@ action_mapping = {
}, },
"/controller/callback_enable_mic_automatic_selection": { "/controller/callback_enable_mic_automatic_selection": {
"mic":"/controller/callback_set_mic_host", "mic":"/controller/callback_set_mic_host",
"speaker":"/controller/callback_set_speaker_device",
}, },
"/controller/callback_enable_speaker_automatic_selection": { "/controller/callback_enable_speaker_automatic_selection": {
"mic":"/controller/callback_set_mic_host",
"speaker":"/controller/callback_set_speaker_device", "speaker":"/controller/callback_set_speaker_device",
} }
} }
@@ -391,7 +389,8 @@ if __name__ == "__main__":
controller.init({ controller.init({
"download_ctranslate2": Action(action_mapping["/controller/callback_download_ctranslate2_weight"]).transmit, "download_ctranslate2": Action(action_mapping["/controller/callback_download_ctranslate2_weight"]).transmit,
"download_whisper": Action(action_mapping["/controller/callback_download_whisper_weight"]).transmit, "download_whisper": Action(action_mapping["/controller/callback_download_whisper_weight"]).transmit,
"update_selected_device": Action(action_mapping["/controller/callback_enable_mic_automatic_selection"]).transmit, "update_selected_mic_device": Action(action_mapping["/controller/callback_enable_mic_automatic_selection"]).transmit,
"update_selected_speaker_device": Action(action_mapping["/controller/callback_enable_speaker_automatic_selection"]).transmit,
}) })
# mappingのすべてのstatusをTrueにする # mappingのすべてのstatusをTrueにする