Add configurable input device selection
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import pyaudio
|
||||
import threading
|
||||
|
||||
from .config import AUDIO_INPUT_DEVICE_INDEX, AUDIO_INPUT_DEVICE_NAME
|
||||
|
||||
|
||||
class AudioManager:
|
||||
_instance = None
|
||||
@@ -17,6 +19,35 @@ class AudioManager:
|
||||
def get_pyaudio(self):
|
||||
return self.pa
|
||||
|
||||
def resolve_input_device(self):
|
||||
"""
|
||||
Возвращает индекс и информацию о входном устройстве.
|
||||
Если индекс/имя не заданы в .env, используем системное default устройство.
|
||||
"""
|
||||
if AUDIO_INPUT_DEVICE_INDEX is not None:
|
||||
info = self.pa.get_device_info_by_index(AUDIO_INPUT_DEVICE_INDEX)
|
||||
if info.get("maxInputChannels", 0) <= 0:
|
||||
raise ValueError(
|
||||
f"AUDIO_INPUT_DEVICE_INDEX={AUDIO_INPUT_DEVICE_INDEX} не является входным устройством."
|
||||
)
|
||||
return AUDIO_INPUT_DEVICE_INDEX, info
|
||||
|
||||
if AUDIO_INPUT_DEVICE_NAME:
|
||||
wanted = AUDIO_INPUT_DEVICE_NAME.lower()
|
||||
for index in range(self.pa.get_device_count()):
|
||||
info = self.pa.get_device_info_by_index(index)
|
||||
if info.get("maxInputChannels", 0) <= 0:
|
||||
continue
|
||||
name = str(info.get("name", ""))
|
||||
if wanted in name.lower():
|
||||
return index, info
|
||||
raise ValueError(
|
||||
f"Не найдено входное устройство по AUDIO_INPUT_DEVICE_NAME={AUDIO_INPUT_DEVICE_NAME!r}."
|
||||
)
|
||||
|
||||
default_info = self.pa.get_default_input_device_info()
|
||||
return None, default_info
|
||||
|
||||
def cleanup(self):
|
||||
if self.pa:
|
||||
self.pa.terminate()
|
||||
|
||||
@@ -75,6 +75,12 @@ PORCUPINE_SENSITIVITY = float(os.getenv("PORCUPINE_SENSITIVITY", "0.8"))
|
||||
# Частота дискретизации для микрофона (стандарт для распознавания речи)
|
||||
SAMPLE_RATE = 16000
|
||||
CHANNELS = 1
|
||||
# Явный выбор входного устройства. Можно задать либо индекс, либо часть имени.
|
||||
_audio_input_device_index = os.getenv("AUDIO_INPUT_DEVICE_INDEX", "").strip()
|
||||
AUDIO_INPUT_DEVICE_INDEX = (
|
||||
int(_audio_input_device_index) if _audio_input_device_index else None
|
||||
)
|
||||
AUDIO_INPUT_DEVICE_NAME = os.getenv("AUDIO_INPUT_DEVICE_NAME", "").strip() or None
|
||||
|
||||
# --- Настройка времени ---
|
||||
# Устанавливаем часовой пояс на Москву, чтобы будильник работал корректно
|
||||
|
||||
Reference in New Issue
Block a user