fix: Add error handling for device selection and initialization
- Add try/except around device index selection in bridge.py - Add bounds checking for mic and monitor list access - Add error handling for mic_list and monitor_list initialization in main.py - Log errors when device detection fails
+26 −11 · 2 files changed
-
src/whispering_ui/bridge.py+15 −9 -
src/whispering_ui/main.py+11 −2
@@ -89,17 +89,23 @@ class ProcessingBridge: self.ai_processor = self._create_ai_processor() # Get device index (mic or monitor based on mode) - if self.state.monitor_enabled and self.state.monitor_list: - # Use monitor device for speaker capture - if self.state.monitor_index == 0: - # First monitor in list - mic_index = self.state.monitor_list[0][0] + mic_index = None + try: + if self.state.monitor_enabled and self.state.monitor_list: + # Use monitor device for speaker capture + if self.state.monitor_index == 0 or self.state.monitor_index > len(self.state.monitor_list): + # First monitor in list (or fallback if index out of range) + mic_index = self.state.monitor_list[0][0] + else: + mic_index = self.state.monitor_list[self.state.monitor_index - 1][0] + elif self.state.mic_index == 0 or not self.state.mic_list: + mic_index = core.get_default_device_index() else: - mic_index = self.state.monitor_list[self.state.monitor_index - 1][0] - elif self.state.mic_index == 0: + idx = min(self.state.mic_index - 1, len(self.state.mic_list) - 1) + mic_index = self.state.mic_list[idx][0] + except (IndexError, TypeError) as e: + print(f"[WARN] Device selection error: {e}, falling back to default") mic_index = core.get_default_device_index() - else: - mic_index = self.state.mic_list[self.state.mic_index - 1][0] # Get channel selection constant channel_select = core.CHANNEL_MIX @@ -57,8 +57,17 @@ def main(): state.auto_stop_minutes = settings.get("auto_stop_minutes", 5) # Initialize microphone and monitor lists - state.mic_list = core.get_mic_names() - state.monitor_list = core.get_monitor_names() + try: + state.mic_list = core.get_mic_names() + except Exception as e: + print(f"Error getting mic list: {e}") + state.mic_list = [] + + try: + state.monitor_list = core.get_monitor_names() + except Exception as e: + print(f"Error getting monitor list: {e}") + state.monitor_list = [] # Check AI availability try: