From c0fe0f90dfc0fba82ec87900f4a1dd6f7add49c8 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Wed, 15 Apr 2026 19:00:06 +0200 Subject: [PATCH] feat(app): Medien pausieren bei Aufnahmestart, fortsetzen bei Stopp Co-Authored-By: Claude Opus 4.6 --- whisper_local/__main__.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/whisper_local/__main__.py b/whisper_local/__main__.py index 5d489c5..e9e3154 100644 --- a/whisper_local/__main__.py +++ b/whisper_local/__main__.py @@ -7,6 +7,7 @@ import sys from whisper_local.config import Config, load_config from whisper_local.hotkey import create_listener from whisper_local.inserter import create_inserter +from whisper_local.media import create_media_controller from whisper_local.recorder import Recorder from whisper_local.transcriber import Transcriber from whisper_local.tray import AppState, create_tray @@ -48,20 +49,31 @@ class App: model=_preloaded_model, ) self.inserter = create_inserter() + self.media = create_media_controller( + enabled=config.pause_media_during_recording + ) self.hotkey = create_listener(key_name=config.hotkey) self.hotkey.on_press = self.on_press self.hotkey.on_release = self.on_release self.tray = create_tray(on_settings=self._open_settings, on_quit=self._quit) async def on_press(self) -> None: - """Callback: Hotkey gedrückt — Aufnahme starten.""" + """Callback: Hotkey gedrückt — Medien pausieren + Aufnahme starten.""" logger.info("Aufnahme startet...") self.tray.set_state(AppState.RECORDING) + await self.media.pause() self.recorder.start() async def on_release(self) -> None: - """Callback: Hotkey losgelassen — Aufnahme stoppen, transkribieren, einfügen.""" - audio = self.recorder.stop() + """Callback: Hotkey losgelassen — Aufnahme stoppen, Medien fortsetzen, transkribieren, einfügen.""" + try: + audio = self.recorder.stop() + finally: + try: + await self.media.resume() + except Exception as e: + logger.warning("Fehler beim Fortsetzen der Medienwiedergabe: %s", e) + if audio is None: logger.info("Keine Audio-Daten, übersprungen") self.tray.set_state(AppState.WAITING) @@ -93,6 +105,9 @@ class App: min_duration=new_config.min_duration, device=new_config.microphone or None, ) + self.media = create_media_controller( + enabled=new_config.pause_media_during_recording + ) if self._loop is not None: asyncio.run_coroutine_threadsafe( self._restart_hotkey(new_config.hotkey), self._loop