Этап 3: голосовой ввод по горячей клавише
- Глобальная горячая клавиша через RegisterHotKey (по умолчанию Win+Alt+Space) - Запись с микрофона, конец фразы по паузе через Silero VAD, звуковые сигналы - Распознавание faster-whisper large-v3-turbo на GPU, CUDA-библиотеки из pip-пакетов nvidia-* - Состояния «слушаю» и «распознаю», кнопка «Говорить» в чате и пункт в трее - Голосовая команда прерывает текущий ответ и озвучку - Тесты горячей клавиши, детектора конца фразы и сеанса голосового ввода Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
fec52dd1c2
commit
513d010c19
@@ -15,13 +15,18 @@ _NOTIFICATION_TIMEOUT_MS = 6000
|
||||
|
||||
|
||||
class TrayIcon(QSystemTrayIcon):
|
||||
def __init__(self, assistant: Assistant, window: ChatWindow) -> None:
|
||||
def __init__(self, assistant: Assistant, window: ChatWindow, hotkey: str = "") -> None:
|
||||
super().__init__(state_icon(assistant.state))
|
||||
self._assistant = assistant
|
||||
self._window = window
|
||||
|
||||
menu = QMenu()
|
||||
menu.addAction("Открыть чат", window.show_and_raise)
|
||||
if assistant.voice_available:
|
||||
# Текст после табуляции QMenu выравнивает по правому краю, как подсказку клавиши
|
||||
label = f"Говорить\t{hotkey.title()}" if hotkey else "Говорить"
|
||||
menu.addAction(label, assistant.toggle_listening)
|
||||
menu.addSeparator()
|
||||
|
||||
provider_menu = menu.addMenu("Провайдер LLM")
|
||||
provider_group = QActionGroup(self)
|
||||
|
||||
Reference in New Issue
Block a user