platypush/platypush/plugins/tts/__init__.py

60 lines
1.6 KiB
Python

import urllib.parse
from typing import Optional
from platypush.context import get_plugin
from platypush.plugins import Plugin, action
class TtsPlugin(Plugin):
"""
Default Text-to-Speech plugin. It leverages Google Translate's unofficial
frontend API.
"""
def __init__(self, language='en-US', **player_args):
"""
:param language: Language code (default: ``en-US``).
:param player_args: Additional arguments to be passed to
:meth:`platypush.plugins.sound.SoundPlugin.play` (like volume,
duration, channels etc.).
"""
super().__init__()
self.language = language
self.player_args = player_args or {}
def _playback(self, resource: str, **kwargs):
audio = get_plugin('sound')
assert audio
audio.play(resource, **{**self.player_args, **kwargs})
@action
def say(
self,
text: str,
language: Optional[str] = None,
**player_args,
):
"""
Say some text.
:param text: Text to say.
:param language: Language code override.
:param player_args: Extends the additional arguments to be passed to
:meth:`platypush.plugins.sound.SoundPlugin.play` (like volume,
duration, channels etc.).
"""
language = language or self.language
url = 'https://translate.google.com/translate_tts?' + urllib.parse.urlencode(
{
'ie': 'UTF-8',
'client': 'tw-ob',
'tl': language,
'q': text,
}
)
self._playback(url, **player_args)
# vim:sw=4:ts=4:et: