From d7d41c2e662a6a76256b6f1bead968f92b35c017 Mon Sep 17 00:00:00 2001 From: misyaguziya Date: Wed, 18 Sep 2024 15:54:06 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8D=EF=B8=8F[Update]=20Model:=20Defaul?= =?UTF-8?q?t=20Audio=20Device=E3=81=AE=E5=A4=89=E6=9B=B4/Device=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0/=E5=89=8A=E9=99=A4=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AE=E3=81=BFDevice=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 1 + .../transcription/transcription_utils.py | 61 +++++++++++++++---- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/requirements.txt b/requirements.txt index d0c6e664..72270760 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ openvr==1.26.701 pydub==0.25.1 psutil==5.9.8 pykakasi==2.3.0 +pycaw==20240210 translators @ git+https://github.com/misyaguziya/translators@5.9.2.1 SpeechRecognition @ git+https://github.com/misyaguziya/custom_speech_recognition@3.10.4 tinyoscquery @ git+https://github.com/cyberkitsune/tinyoscquery@0.1.2 \ No newline at end of file diff --git a/src-python/models/transcription/transcription_utils.py b/src-python/models/transcription/transcription_utils.py index 2281fa22..5842c89e 100644 --- a/src-python/models/transcription/transcription_utils.py +++ b/src-python/models/transcription/transcription_utils.py @@ -1,6 +1,23 @@ from time import sleep from threading import Thread +import comtypes from pyaudiowpatch import PyAudio, paWASAPI +from pycaw.callbacks import MMNotificationClient +from pycaw.utils import AudioUtilities + +class Client(MMNotificationClient): + def __init__(self): + super().__init__() + self.loop = True + + def on_default_device_changed(self, flow, flow_id, role, role_id, default_device_id): + self.loop = False + + def on_device_added(self, added_device_id): + self.loop = False + + def on_device_removed(self, removed_device_id): + self.loop = False class DeviceManager: _instance = None @@ -18,10 +35,8 @@ class DeviceManager: self.default_output_device = {"device": {"name": "NoDevice"}} self.update() - self.monitoring_flag = True - self.th_monitoring = Thread(target=self.startMonitoring) - self.th_monitoring.daemon = True - self.th_monitoring.start() + self.monitoring_flag = False + self.startMonitoring() def update(self): buffer_input_devices = {} @@ -96,11 +111,32 @@ class DeviceManager: self.output_devices = buffer_output_devices self.default_output_device = buffer_default_output_device + print("default_input_device", self.default_input_device) + + def monitoring(self): + comtypes.CoInitialize() + cb = Client() + enumerator = AudioUtilities.GetDeviceEnumerator() + enumerator.RegisterEndpointNotificationCallback(cb) + try: + while self.monitoring_flag is True: + while cb.loop is True: + sleep(1) + enumerator.UnregisterEndpointNotificationCallback(cb) + self.update() + + cb = Client() + enumerator = AudioUtilities.GetDeviceEnumerator() + enumerator.RegisterEndpointNotificationCallback(cb) + except Exception: + pass + comtypes.CoUninitialize() + def startMonitoring(self): self.monitoring_flag = True - while self.monitoring_flag is True: - self.update() - sleep(1) + self.th_monitoring = Thread(target=self.monitoring) + self.th_monitoring.daemon = True + self.th_monitoring.start() def stopMonitoring(self): self.monitoring_flag = False @@ -121,7 +157,10 @@ class DeviceManager: device_manager = DeviceManager() if __name__ == "__main__": - print("getInputDevices()", device_manager.getInputDevices()) - print("getDefaultInputDevice()", device_manager.getDefaultInputDevice()) - print("getOutputDevices()", device_manager.getOutputDevices()) - print("getDefaultOutputDevice()", device_manager.getDefaultOutputDevice()) \ No newline at end of file + # print("getInputDevices()", device_manager.getInputDevices()) + # print("getDefaultInputDevice()", device_manager.getDefaultInputDevice()) + # print("getOutputDevices()", device_manager.getOutputDevices()) + # print("getDefaultOutputDevice()", device_manager.getDefaultOutputDevice()) + + while True: + sleep(1) \ No newline at end of file