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.config import Config, load_config
|
||||||
from whisper_local.hotkey import create_listener
|
from whisper_local.hotkey import create_listener
|
||||||
from whisper_local.inserter import create_inserter
|
from whisper_local.inserter import create_inserter
|
||||||
|
from whisper_local.media import create_media_controller
|
||||||
from whisper_local.recorder import Recorder
|
from whisper_local.recorder import Recorder
|
||||||
from whisper_local.transcriber import Transcriber
|
from whisper_local.transcriber import Transcriber
|
||||||
from whisper_local.tray import AppState, create_tray
|
from whisper_local.tray import AppState, create_tray
|
||||||
@@ -48,20 +49,31 @@ class App:
|
|||||||
model=_preloaded_model,
|
model=_preloaded_model,
|
||||||
)
|
)
|
||||||
self.inserter = create_inserter()
|
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 = create_listener(key_name=config.hotkey)
|
||||||
self.hotkey.on_press = self.on_press
|
self.hotkey.on_press = self.on_press
|
||||||
self.hotkey.on_release = self.on_release
|
self.hotkey.on_release = self.on_release
|
||||||
self.tray = create_tray(on_settings=self._open_settings, on_quit=self._quit)
|
self.tray = create_tray(on_settings=self._open_settings, on_quit=self._quit)
|
||||||
|
|
||||||
async def on_press(self) -> None:
|
async def on_press(self) -> None:
|
||||||
"""Callback: Hotkey gedrückt — Aufnahme starten."""
|
"""Callback: Hotkey gedrückt — Medien pausieren + Aufnahme starten."""
|
||||||
logger.info("Aufnahme startet...")
|
logger.info("Aufnahme startet...")
|
||||||
self.tray.set_state(AppState.RECORDING)
|
self.tray.set_state(AppState.RECORDING)
|
||||||
|
await self.media.pause()
|
||||||
self.recorder.start()
|
self.recorder.start()
|
||||||
|
|
||||||
async def on_release(self) -> None:
|
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()
|
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:
|
if audio is None:
|
||||||
logger.info("Keine Audio-Daten, übersprungen")
|
logger.info("Keine Audio-Daten, übersprungen")
|
||||||
self.tray.set_state(AppState.WAITING)
|
self.tray.set_state(AppState.WAITING)
|
||||||
@@ -93,6 +105,9 @@ class App:
|
|||||||
min_duration=new_config.min_duration,
|
min_duration=new_config.min_duration,
|
||||||
device=new_config.microphone or None,
|
device=new_config.microphone or None,
|
||||||
)
|
)
|
||||||
|
self.media = create_media_controller(
|
||||||
|
enabled=new_config.pause_media_during_recording
|
||||||
|
)
|
||||||
if self._loop is not None:
|
if self._loop is not None:
|
||||||
asyncio.run_coroutine_threadsafe(
|
asyncio.run_coroutine_threadsafe(
|
||||||
self._restart_hotkey(new_config.hotkey), self._loop
|
self._restart_hotkey(new_config.hotkey), self._loop
|
||||||
|
|||||||
Reference in New Issue
Block a user