feat(app): Medien pausieren bei Aufnahmestart, fortsetzen bei Stopp
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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."""
|
||||
"""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
|
||||
|
||||
Reference in New Issue
Block a user