diff --git a/README.md b/README.md index 23ce508..6879eee 100644 --- a/README.md +++ b/README.md @@ -173,8 +173,9 @@ Satellites can respond to events from the server by running commands: * `--stt-start-command` - user started speaking (no stdin) * `--stt-stop-command` - user stopped speaking (no stdin) * `--synthesize-command` - text-to-speech text is returned (text on stdin) -* `--tts-start-command` - text-to-speech response started (no stdin) -* `--tts-stop-command` - text-to-speech response stopped (no stdin) +* `--tts-start-command` - text-to-speech response started streaming from server (no stdin) +* `--tts-stop-command` - text-to-speech response stopped streaming from server. Can still being played by snd service (no stdin) +* `--played-command` - text-to-speech audio finished playing (no stdin) * `--error-command` - an error was sent from the server (text on stdin) * `--connected-command` - satellite connected to server * `--disconnected-command` - satellite disconnected from server diff --git a/wyoming_satellite/__main__.py b/wyoming_satellite/__main__.py index 796c5a6..8e775df 100644 --- a/wyoming_satellite/__main__.py +++ b/wyoming_satellite/__main__.py @@ -158,6 +158,9 @@ async def main() -> None: parser.add_argument( "--detection-command", help="Command to run when wake word is detected" ) + parser.add_argument( + "--played-command", help="Command to run when audio stopped playing" + ) parser.add_argument( "--transcript-command", help="Command to run when speech to text transcript is returned", @@ -334,6 +337,7 @@ async def main() -> None: streaming_stop=split_command(args.streaming_stop_command), detect=split_command(args.detect_command), detection=split_command(args.detection_command), + played=split_command(args.played_command), transcript=split_command(args.transcript_command), stt_start=split_command(args.stt_start_command), stt_stop=split_command(args.stt_stop_command), diff --git a/wyoming_satellite/satellite.py b/wyoming_satellite/satellite.py index 84b5115..b2e2a2b 100644 --- a/wyoming_satellite/satellite.py +++ b/wyoming_satellite/satellite.py @@ -550,7 +550,7 @@ async def _disconnect() -> None: event.type ): await _disconnect() - await self.forward_event(Played().event()) + await self.trigger_played() snd_client = None # reconnect on next event except asyncio.CancelledError: break @@ -775,6 +775,11 @@ async def trigger_detection(self, detection: Detection) -> None: mute_microphone=self.settings.mic.mute_during_awake_wav, ) + async def trigger_played(self) -> None: + """Called when audio stopped playing""" + await run_event_command(self.settings.event.played) + await self.forward_event(Played().event()) + async def trigger_transcript(self, transcript: Transcript) -> None: """Called when speech-to-text text is received.""" await run_event_command(self.settings.event.transcript, transcript.text) diff --git a/wyoming_satellite/settings.py b/wyoming_satellite/settings.py index 67e7bd7..138f884 100644 --- a/wyoming_satellite/settings.py +++ b/wyoming_satellite/settings.py @@ -149,6 +149,7 @@ class EventSettings(ServiceSettings): streaming_stop: Optional[List[str]] = None detect: Optional[List[str]] = None detection: Optional[List[str]] = None + played: Optional[List[str]] = None transcript: Optional[List[str]] = None stt_start: Optional[List[str]] = None stt_stop: Optional[List[str]] = None