[bugfix] DeviceManager : Deviceを接続していない場合に発生する問題を修正
- 関数設定されていない変数をコールする問題を修正 - Deviceソート時にindexを参照しているため、NoDeviceにindex=-1を設定するように変更
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
from typing import Callable
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import comtypes
|
import comtypes
|
||||||
@@ -36,10 +37,10 @@ class DeviceManager:
|
|||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
self.mic_devices = {"NoHost": [{"name": "NoDevice"}]}
|
self.mic_devices = {"NoHost": [{"index": -1, "name": "NoDevice"}]}
|
||||||
self.default_mic_device = {"host": {"name": "NoHost"}, "device": {"name": "NoDevice"}}
|
self.default_mic_device = {"host": {"index": -1, "name": "NoHost"}, "device": {"index": -1, "name": "NoDevice"}}
|
||||||
self.speaker_devices = [{"name": "NoDevice"}]
|
self.speaker_devices = [{"index": -1, "name": "NoDevice"}]
|
||||||
self.default_speaker_device = {"device": {"name": "NoDevice"}}
|
self.default_speaker_device = {"device": {"index": -1, "name": "NoDevice"}}
|
||||||
|
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@@ -68,9 +69,9 @@ class DeviceManager:
|
|||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
buffer_mic_devices = {}
|
buffer_mic_devices = {}
|
||||||
buffer_default_mic_device = {"host": {"name": "NoHost"}, "device": {"name": "NoDevice"}}
|
buffer_default_mic_device = {"host": {"index": -1, "name": "NoHost"}, "device": {"index": -1, "name": "NoDevice"}}
|
||||||
buffer_speaker_devices = []
|
buffer_speaker_devices = []
|
||||||
buffer_default_speaker_device = {"device": {"name": "NoDevice"}}
|
buffer_default_speaker_device = {"device": {"index": -1, "name": "NoDevice"}}
|
||||||
|
|
||||||
with PyAudio() as p:
|
with PyAudio() as p:
|
||||||
for host_index in range(p.get_host_api_count()):
|
for host_index in range(p.get_host_api_count()):
|
||||||
@@ -81,7 +82,7 @@ class DeviceManager:
|
|||||||
if device.get("maxInputChannels", 0) > 0 and not device.get("isLoopbackDevice", True):
|
if device.get("maxInputChannels", 0) > 0 and not device.get("isLoopbackDevice", True):
|
||||||
buffer_mic_devices.setdefault(host["name"], []).append(device)
|
buffer_mic_devices.setdefault(host["name"], []).append(device)
|
||||||
if not buffer_mic_devices:
|
if not buffer_mic_devices:
|
||||||
buffer_mic_devices = {"NoHost": [{"name": "NoDevice"}]}
|
buffer_mic_devices = {"NoHost": [{"index": -1, "name": "NoDevice"}]}
|
||||||
|
|
||||||
api_info = p.get_default_host_api_info()
|
api_info = p.get_default_host_api_info()
|
||||||
default_mic_device = api_info["defaultInputDevice"]
|
default_mic_device = api_info["defaultInputDevice"]
|
||||||
@@ -111,7 +112,7 @@ class DeviceManager:
|
|||||||
for loopback in p.get_loopback_device_info_generator():
|
for loopback in p.get_loopback_device_info_generator():
|
||||||
if device["name"] in loopback["name"]:
|
if device["name"] in loopback["name"]:
|
||||||
speaker_devices.append(loopback)
|
speaker_devices.append(loopback)
|
||||||
speaker_devices = [dict(t) for t in {tuple(d.items()) for d in speaker_devices}] or [{"name": "NoDevice"}]
|
speaker_devices = [dict(t) for t in {tuple(d.items()) for d in speaker_devices}] or [{"index": -1, "name": "NoDevice"}]
|
||||||
buffer_speaker_devices = sorted(speaker_devices, key=lambda d: d['index'])
|
buffer_speaker_devices = sorted(speaker_devices, key=lambda d: d['index'])
|
||||||
|
|
||||||
wasapi_info = p.get_host_api_info_by_type(paWASAPI)
|
wasapi_info = p.get_host_api_info_by_type(paWASAPI)
|
||||||
@@ -240,7 +241,8 @@ class DeviceManager:
|
|||||||
self.callback_process_before_update_devices = None
|
self.callback_process_before_update_devices = None
|
||||||
|
|
||||||
def runProcessBeforeUpdateDevices(self):
|
def runProcessBeforeUpdateDevices(self):
|
||||||
self.callback_process_before_update_devices()
|
if isinstance(self.callback_process_before_update_devices, Callable):
|
||||||
|
self.callback_process_before_update_devices()
|
||||||
|
|
||||||
def setCallbackProcessAfterUpdateDevices(self, callback):
|
def setCallbackProcessAfterUpdateDevices(self, callback):
|
||||||
self.callback_process_after_update_devices = callback
|
self.callback_process_after_update_devices = callback
|
||||||
@@ -249,18 +251,19 @@ class DeviceManager:
|
|||||||
self.callback_process_after_update_devices = None
|
self.callback_process_after_update_devices = None
|
||||||
|
|
||||||
def runProcessAfterUpdateDevices(self):
|
def runProcessAfterUpdateDevices(self):
|
||||||
self.callback_process_after_update_devices()
|
if isinstance(self.callback_process_after_update_devices, Callable):
|
||||||
|
self.callback_process_after_update_devices()
|
||||||
|
|
||||||
def noticeUpdateDevices(self):
|
def noticeUpdateDevices(self):
|
||||||
if self.callback_default_mic_device is not None and self.update_flag_default_mic_device is True:
|
if self.update_flag_default_mic_device is True:
|
||||||
self.setMicDefaultDevice()
|
self.setMicDefaultDevice()
|
||||||
if self.callback_default_speaker_device is not None and self.update_flag_default_speaker_device is True:
|
if self.update_flag_default_speaker_device is True:
|
||||||
self.setSpeakerDefaultDevice()
|
self.setSpeakerDefaultDevice()
|
||||||
if self.callback_host_list is not None and self.update_flag_host_list is True:
|
if self.update_flag_host_list is True:
|
||||||
self.setMicHostList()
|
self.setMicHostList()
|
||||||
if self.callback_mic_device_list is not None and self.update_flag_mic_device_list is True:
|
if self.update_flag_mic_device_list is True:
|
||||||
self.setMicDeviceList()
|
self.setMicDeviceList()
|
||||||
if self.callback_speaker_device_list is not None and self.update_flag_speaker_device_list is True:
|
if self.update_flag_speaker_device_list is True:
|
||||||
self.setSpeakerDeviceList()
|
self.setSpeakerDeviceList()
|
||||||
|
|
||||||
self.update_flag_default_mic_device = False
|
self.update_flag_default_mic_device = False
|
||||||
@@ -270,19 +273,24 @@ class DeviceManager:
|
|||||||
self.update_flag_speaker_device_list = False
|
self.update_flag_speaker_device_list = False
|
||||||
|
|
||||||
def setMicDefaultDevice(self):
|
def setMicDefaultDevice(self):
|
||||||
self.callback_default_mic_device(self.default_mic_device["host"]["name"], self.default_mic_device["device"]["name"])
|
if isinstance(self.callback_default_mic_device, Callable):
|
||||||
|
self.callback_default_mic_device(self.default_mic_device["host"]["name"], self.default_mic_device["device"]["name"])
|
||||||
|
|
||||||
def setSpeakerDefaultDevice(self):
|
def setSpeakerDefaultDevice(self):
|
||||||
self.callback_default_speaker_device(self.default_speaker_device["device"]["name"])
|
if isinstance(self.callback_default_speaker_device, Callable):
|
||||||
|
self.callback_default_speaker_device(self.default_speaker_device["device"]["name"])
|
||||||
|
|
||||||
def setMicHostList(self):
|
def setMicHostList(self):
|
||||||
self.callback_host_list()
|
if isinstance(self.callback_host_list, Callable):
|
||||||
|
self.callback_host_list()
|
||||||
|
|
||||||
def setMicDeviceList(self):
|
def setMicDeviceList(self):
|
||||||
self.callback_mic_device_list()
|
if isinstance(self.callback_mic_device_list, Callable):
|
||||||
|
self.callback_mic_device_list()
|
||||||
|
|
||||||
def setSpeakerDeviceList(self):
|
def setSpeakerDeviceList(self):
|
||||||
self.callback_speaker_device_list()
|
if isinstance(self.callback_speaker_device_list, Callable):
|
||||||
|
self.callback_speaker_device_list()
|
||||||
|
|
||||||
def getMicDevices(self):
|
def getMicDevices(self):
|
||||||
return self.mic_devices
|
return self.mic_devices
|
||||||
|
|||||||
Reference in New Issue
Block a user