|
|
@@ -85,23 +85,42 @@ class AudioDuckingPlugin(TrixyPlugin):
|
|
|
self._ducked = False
|
|
|
|
|
|
# === Events ===
|
|
|
+ #
|
|
|
+ # Ducking-Flow:
|
|
|
+ # Wakeword erkannt → DUCK (Musik/Audio leiser)
|
|
|
+ # Recording laeuft → bleibt leise (Mikrofon hoert)
|
|
|
+ # Recording fertig → RESTORE (Musik/Audio normal)
|
|
|
+ # STT/NLP/Handler → normale Lautstaerke
|
|
|
+ # TTS Ausgabe → normale Lautstaerke (Trixy spricht laut!)
|
|
|
+ # Follow-Up aktiv → Nutzer spricht → DUCK → Recording → RESTORE
|
|
|
+ #
|
|
|
+ # Wichtig: KEIN Duck bei conversation_started — das wuerde
|
|
|
+ # die TTS-Ausgabe leise machen. Nur bei tatsaechlicher
|
|
|
+ # Audio-Aufnahme (Wakeword/Follow-Up) wird geduckt.
|
|
|
|
|
|
@TrixyEvent(["wakeword_detected"], priority=EventPriority.HIGHEST)
|
|
|
async def on_wakeword(self, event_name: str, event_data) -> None:
|
|
|
+ """Wakeword erkannt → Lautstaerke runter fuer Mikrofonaufnahme."""
|
|
|
await self._duck_volume()
|
|
|
|
|
|
@TrixyEvent(["wakeword_manual_trigger"], priority=EventPriority.HIGHEST)
|
|
|
async def on_manual_trigger(self, event_name: str, event_data) -> None:
|
|
|
await self._duck_volume()
|
|
|
|
|
|
- @TrixyEvent(["recording_complete"])
|
|
|
+ @TrixyEvent(["recording_started"], priority=EventPriority.HIGHEST)
|
|
|
+ async def on_recording_started(self, event_name: str, event_data) -> None:
|
|
|
+ """Aufnahme gestartet (auch bei Follow-Up) → Duck."""
|
|
|
+ await self._duck_volume()
|
|
|
+
|
|
|
+ @TrixyEvent(["recording_complete", "recording_stopped"])
|
|
|
async def on_recording_complete(self, event_name: str, event_data) -> None:
|
|
|
- await self._restore_volume()
|
|
|
+ """Aufnahme beendet → Lautstaerke sofort wiederherstellen.
|
|
|
|
|
|
- @TrixyEvent(["conversation_started"])
|
|
|
- async def on_conversation_started(self, event_name: str, event_data) -> None:
|
|
|
- await self._duck_volume()
|
|
|
+ So ist die TTS-Ausgabe auf normaler Lautstaerke.
|
|
|
+ """
|
|
|
+ await self._restore_volume()
|
|
|
|
|
|
@TrixyEvent(["conversation_ended"])
|
|
|
async def on_conversation_ended(self, event_name: str, event_data) -> None:
|
|
|
+ """Sicherheits-Restore falls noch geduckt."""
|
|
|
await self._restore_volume()
|