tts: gracefully handle the lack of a speechd module

We already gracefully handle the lack of speechd having the
`speech-dispatcher` command utility available, and respond by disabling
that backend. Go one step further, and disable it if the module is
missing too.

It's not even the default engine. It seems fair for piper users to not
require having this installed. The build tests will assert its presence
either way so it's not like it will go unnoticed.
This commit is contained in:
Eli Schwartz 2024-09-13 01:09:08 -04:00
parent ae3277b17f
commit eacd4a72a5
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6

View File

@ -221,13 +221,17 @@ def available_engines() -> dict[str, EngineMetadata]:
'for natural sounding voices. The neural network is run locally on your computer, it is fairly resource intensive to run.' 'for natural sounding voices. The neural network is run locally on your computer, it is fairly resource intensive to run.'
), TrackingCapability.Sentence, can_change_pitch=False, voices_have_quality_metadata=True, has_managed_voices=True) ), TrackingCapability.Sentence, can_change_pitch=False, voices_have_quality_metadata=True, has_managed_voices=True)
if islinux: if islinux:
from speechd.paths import SPD_SPAWN_CMD try:
cmd = os.getenv("SPEECHD_CMD", SPD_SPAWN_CMD) from speechd.paths import SPD_SPAWN_CMD
if cmd and os.access(cmd, os.X_OK) and os.path.isfile(cmd): except ImportError:
ans['speechd'] = EngineMetadata('speechd', _('The Speech Dispatcher Engine'), _( pass
'The "speechd" engine can usually track the currently spoken word on screen, however, it depends on the' else:
' underlying output module. The default espeak output module does support it.' cmd = os.getenv("SPEECHD_CMD", SPD_SPAWN_CMD)
), TrackingCapability.WordByWord, allows_choosing_audio_device=False, has_multiple_output_modules=True) if cmd and os.access(cmd, os.X_OK) and os.path.isfile(cmd):
ans['speechd'] = EngineMetadata('speechd', _('The Speech Dispatcher Engine'), _(
'The "speechd" engine can usually track the currently spoken word on screen, however, it depends on the'
' underlying output module. The default espeak output module does support it.'
), TrackingCapability.WordByWord, allows_choosing_audio_device=False, has_multiple_output_modules=True)
return ans return ans