mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
More work on TTS backends
This commit is contained in:
parent
b2f3356997
commit
3f9febc9ec
@ -85,6 +85,14 @@ class QtTTSBackend(QObject):
|
|||||||
self.tts.sayingWord.connect(self._saying_word)
|
self.tts.sayingWord.connect(self._saying_word)
|
||||||
self.tts.stateChanged.connect(self.state_changed.emit)
|
self.tts.stateChanged.connect(self.state_changed.emit)
|
||||||
|
|
||||||
|
def change_rate(self, steps: int = 1) -> bool:
|
||||||
|
current = self.tts.rate()
|
||||||
|
new_rate = max(-1, min(current + 0.2 * steps, 1))
|
||||||
|
if current == new_rate:
|
||||||
|
return False
|
||||||
|
self.tts.setRate(new_rate)
|
||||||
|
return True
|
||||||
|
|
||||||
def shutdown(self) -> None:
|
def shutdown(self) -> None:
|
||||||
self.tts.stop(QTextToSpeech.BoundaryHint.Immediate)
|
self.tts.stop(QTextToSpeech.BoundaryHint.Immediate)
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# License: GPLv3 Copyright: 2024, Kovid Goyal <kovid at kovidgoyal.net>
|
# License: GPLv3 Copyright: 2024, Kovid Goyal <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
|
import os
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import Literal, NamedTuple
|
from typing import Literal, NamedTuple
|
||||||
@ -23,7 +24,6 @@ class EngineMetadata(NamedTuple):
|
|||||||
allows_choosing_audio_device: bool = True
|
allows_choosing_audio_device: bool = True
|
||||||
can_synthesize_audio_data: bool = True
|
can_synthesize_audio_data: bool = True
|
||||||
has_multiple_output_modules: bool = False
|
has_multiple_output_modules: bool = False
|
||||||
can_change_rate: bool = True
|
|
||||||
can_change_pitch: bool = True
|
can_change_pitch: bool = True
|
||||||
can_change_volume: bool = True
|
can_change_volume: bool = True
|
||||||
|
|
||||||
@ -92,7 +92,12 @@ def available_engines() -> dict[str, EngineMetadata]:
|
|||||||
elif x == 'flite':
|
elif x == 'flite':
|
||||||
ans[x] = qt_engine_metadata(x, True)
|
ans[x] = qt_engine_metadata(x, True)
|
||||||
elif x == 'speechd':
|
elif x == 'speechd':
|
||||||
ans[x] = EngineMetadata(x, TrackingCapability.WordByWord, allows_choosing_audio_device=False, has_multiple_output_modules=True)
|
continue
|
||||||
|
if islinux:
|
||||||
|
from speechd.paths import SPD_SPAWN_CMD
|
||||||
|
cmd = os.getenv("SPEECHD_CMD", SPD_SPAWN_CMD)
|
||||||
|
if cmd and os.access(cmd, os.X_OK) and os.path.isfile(cmd):
|
||||||
|
ans['speechd'] = EngineMetadata('speechd', TrackingCapability.WordByWord, allows_choosing_audio_device=False, has_multiple_output_modules=True)
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
|
||||||
@ -101,11 +106,14 @@ def create_tts_backend(engine_name: str = '', settings: EngineSpecificSettings =
|
|||||||
engine_name = 'speechd'
|
engine_name = 'speechd'
|
||||||
if engine_name not in available_engines():
|
if engine_name not in available_engines():
|
||||||
engine_name = ''
|
engine_name = ''
|
||||||
|
|
||||||
if engine_name == 'speechd':
|
if engine_name == 'speechd':
|
||||||
from calibre.gui2.tts2.speechd import SpeechdTTSBackend
|
from calibre.gui2.tts2.speechd import SpeechdTTSBackend
|
||||||
return SpeechdTTSBackend(engine_name, settings, parent)
|
ans = SpeechdTTSBackend(engine_name, settings, parent)
|
||||||
|
else:
|
||||||
from calibre.gui2.tts2.qt import QtTTSBackend
|
from calibre.gui2.tts2.qt import QtTTSBackend
|
||||||
return QtTTSBackend(engine_name, settings, parent)
|
ans = QtTTSBackend(engine_name, settings, parent)
|
||||||
|
return ans
|
||||||
|
|
||||||
|
|
||||||
def develop(engine_name=''):
|
def develop(engine_name=''):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user