Example #1
0
 def __init__(self, user, pwd, gateway, tts=None, debug=False, block=True):
     self.debug = debug
     self.user = user
     self.pwd = pwd
     self.gateway = gateway
     if tts:
         self.tts = tts
     else:
         self.tts = ResponsiveVoice(gender=ResponsiveVoice.MALE)
     self._login = "******".format(u=self.user,
                                            p=self.pwd,
                                            g=self.gateway)
     self._prev_output = ""
     self.running = False
     self.ready = False
     self.mic_muted = False
     self.abort = False
     self.current_call = None
     self._call_status = None
     self.audio = None
     self._ts = None
     self.baresip = pexpect.spawn('baresip')
     super().__init__()
     self.start()
     if block:
         self.wait_until_ready()
Example #2
0
    def get_tts_audio(self, message, language, options=None):
        """Load TTS from ResponsiveVoice."""
        if language is None:
            language = self._lang
        from responsive_voice import ResponsiveVoice

        # websession = async_get_clientsession(self.hass)
        try:
            engine = ResponsiveVoice()
            _LOGGER.error(message)
            data = engine.say(sentence=message,
                              gender=self._gender,
                              lang=self._lang)

        except HTTPException as ex:
            _LOGGER.error("Timeout for ResponsiveVoice speech")
            return None, None
        # try:
        #     with async_timeout.timeout(10, loop=self.hass.loop):
        #         engine = ResponsiveVoice()
        #         _LOGGER.error(message)
        #         data = engine.say(
        #             sentence=message, gender="self._gender", lang="self._lang"
        #             )

        #         if request.status != 200:
        #             _LOGGER.error("Error %d on load URL %s",
        #                           request.status, request.url)
        #             return None, None
        #         data += await request.read()

        # except (asyncio.TimeoutError, aiohttp.ClientError):
        #     _LOGGER.error("Timeout for ResponsiveVoice speech")
        #     return None, None
        return ('mp3', data)
    def __init__(self, lang, config):
        super().__init__(lang,
                         config,
                         ResponsiveVoiceValidator(self),
                         'mp3',
                         ssml_tags=[])
        from responsive_voice import get_voice, ResponsiveVoice

        self.pitch = config.get("pitch", 0.5)
        self.rate = config.get("rate", 0.5)
        self.vol = config.get("vol", 1)
        if "f" in config.get("gender", ""):
            self.gender = ResponsiveVoice.FEMALE
        if "m" in config.get("gender", ""):
            self.gender = ResponsiveVoice.MALE
        else:
            self.gender = ResponsiveVoice.UNKNOWN_GENDER
        self.voice = config.get("voice")
        if not self.voice:
            self.engine = ResponsiveVoice(lang=self.lang,
                                          pitch=self.pitch,
                                          rate=self.rate,
                                          vol=self.vol,
                                          gender=self.gender)
        else:
            Voice = get_voice(self.voice, self.lang)
            if not Voice:
                # dont filter by language
                Voice = get_voice(self.voice)
            if not Voice:
                raise
            self.engine = Voice(pitch=self.pitch, rate=self.rate, vol=self.vol)
Example #4
0
 def __init__(self, config=LISTENER_CONFIG, *args, **kwargs):
     super(JarbasVoiceTerminal, self).__init__(*args, **kwargs)
     self.status = "disconnected"
     self.client = None
     # TODO make optional
     self.engine = ResponsiveVoice(gender="female")
     self.config = config
Example #5
0
 def __init__(self, config=conf, *args, **kwargs):
     super(JarbasVoiceClientFactory, self).__init__(*args, **kwargs)
     self.status = "disconnected"
     self.client = None
     # TODO make optional
     self.engine = ResponsiveVoice(gender="female")
     self.config = config
    def __init__(self, config=None):
        config = config or {"lang": "en", "pitch": 0.5, "rate": 0.5, "vol": 1}
        super().__init__(config, ResponsiveVoiceValidator(self), ssml_tags=[])
        self.clear_cache()
        self.pitch = config.get("pitch", 0.5)
        self.rate = config.get("rate", 0.5)
        self.vol = config.get("vol", 1)

        if self.voice:
            clazz = get_voices()[self.voice]
            self.engine = clazz(pitch=self.pitch, rate=self.rate, vol=self.vol)
        else:
            gender = config.get("gender", "male")
            self.engine = ResponsiveVoice(lang=self.lang,
                                          gender=gender,
                                          pitch=self.pitch,
                                          rate=self.rate,
                                          vol=self.vol)
Example #7
0
    def get_tts_audio(self, message, language, options=None):
        """Load TTS from ResponsiveVoiceTTS."""

        engine = ResponsiveVoice()
        # from responsive_voice.voices import Ellen

        # ellen = Ellen()

        # result = ellen.say(message)
        print("message", message, "language", language, "pitch", self._pitch,
              "rate", self._speed, "vol", self._volume)

        result = engine.say(message,
                            language,
                            pitch=self._pitch,
                            rate=self._speed,
                            vol=self._volume)

        # result = engine.get_mp3(message, language, pitch=self._pitch,
        #                         rate=self._speed, vol=self._volume)

        # if options is None:
        #     result = engine.say(message, lang=language, pitch=self._pitch,
        #                         rate=self._speed, vol=self._volume)
        # else:
        #     speech_data = self._speech_conf_data.copy()
        #     for key, value in options.items():
        #         speech_data[_OPTIONS[key]] = value

        #     result = engine.say(message, language, 1, speech_data)

        print(result)

        if isinstance(result, dict):
            _LOGGER.error(
                "ResponsiveVoice TTS error-- err_no:%d; err_msg:%s; err_detail:%s",
                result["err_no"],
                result["err_msg"],
                result["err_detail"],
            )
            return None, None

        return self._codec, result
Example #8
0
    def __init__(self,
                 user,
                 pwd,
                 gateway,
                 tts=None,
                 debug=False,
                 block=True,
                 audiodriver="alsa,default",
                 port=5060):
        self.debug = debug
        self.user = user
        self.pwd = pwd
        self.gateway = gateway

        #Learn the second one when it has to reasign a unique name
        #There is an in and an out client name
        self.jackNames = ['baresip']

        if tts:
            self.tts = tts
        else:
            try:
                from responsive_voice import ResponsiveVoice
                self.tts = ResponsiveVoice(gender=ResponsiveVoice.MALE)
            except ImportError:
                logging.exception(
                    "No responsive_voice module, some features will not work")
        self._login = "******".format(u=self.user,
                                               p=self.pwd,
                                               g=self.gateway)
        self._prev_output = ""
        self.running = False

        #Ready immediately, this is a localhost thing
        self.ready = True
        self.mic_muted = False
        self.abort = False
        self.current_call = None
        self._call_status = None
        self.audio = None
        self._ts = None

        self.jack_port = "baresip"

        cnfdir = os.path.join(tmpdir, "ScullerySIP" + str(port))
        self.cnfdir = cnfdir
        try:
            #Remove any existing
            shutil.rmtree(self.cnfdir)
        except:
            pass

        os.mkdir(os.path.join(tmpdir, "ScullerySIP" + str(port)))

        self.cnfdir = cnfdir
        #Using the template, create a configuration dir for
        #the baresip instance we are about to make.
        f = os.path.join(os.path.dirname(__file__), "baresip_template")

        drivers = "module\t\talsa.so"
        if 'jack' in audiodriver:
            drivers = "module\t\tjack.so"

        for i in os.listdir(f):
            with open(os.path.join(f, i)) as fd:
                x = fd.read()

            x = x.replace("USERNAME", user)
            x = x.replace("AUDIODRIVER", audiodriver)
            x = x.replace("PORT", str(port))
            x = x.replace("DRIVERS", str(drivers))

            with open(os.path.join(cnfdir, i), "w") as fd:
                fd.write(x)

        self.baresip = pexpect.spawn('baresip', ["-f", cnfdir])
        super().__init__()
        self.daemon = True

        self.start()
        if block:
            self.wait_until_ready()
from responsive_voice import ResponsiveVoice

engine = ResponsiveVoice()
engine.say("hello world")
engine.say("hello world", gender="male", lang="en-GB", rate=0.4)

file_path = engine.get_mp3(u"ola mundo", lang="pt-pt")
engine.play_mp3(file_path)
Example #10
0
from responsive_voice import ResponsiveVoice

engine = ResponsiveVoice()
engine.say("hello world")
engine.say("hello world", gender=ResponsiveVoice.MALE, rate=0.45)

engine = ResponsiveVoice(lang=ResponsiveVoice.PORTUGUESE_BR)
file_path = engine.get_mp3(u"olá mundo")
engine.play_mp3(file_path)

from responsive_voice.voices import EnglishIndia, UKEnglishMale, \
    FallbackUKEnglishMale

india = EnglishIndia()
uk = UKEnglishMale()
uk2 = FallbackUKEnglishMale()
india.say("hello world")
uk.say("hello world")
uk2.say("hello world")
Example #11
0
    def __init__(self, user, pwd, gateway, tts=None, debug=False,
                 block=True, config_path=None, sounds_path=None):
        config_path = config_path or join("~", ".baresipy")
        self.config_path = expanduser(config_path)
        if not isdir(self.config_path):
            makedirs(self.config_path)
        if isfile(join(self.config_path, "config")):
            with open(join(self.config_path, "config"), "r") as f:
                self.config = f.read()
            LOG.info("config loaded from " + self.config_path + "/config")
            self.updated_config = False
        else:
            self.config = baresipy.config.DEFAULT
            self.updated_config = True

        self._original_config = str(self.config)

        if sounds_path is not None and "#audio_path" in self.config:
            self.updated_config = True
            if sounds_path is False:
                # sounds disabled
                self.config = self.config.replace(
                    "#audio_path		/usr/share/baresip",
                    "audio_path		/dont/load")
            elif isdir(sounds_path):
                self.config = self.config.replace(
                    "#audio_path		/usr/share/baresip",
                    "audio_path		" + sounds_path)

        if self.updated_config:
            with open(join(self.config_path, "config.bak"), "w") as f:
                f.write(self._original_config)

            LOG.info("saving config")
            with open(join(self.config_path, "config"), "w") as f:
                f.write(self.config)

        self.debug = debug
        self.user = user
        self.pwd = pwd
        self.gateway = gateway
        if tts:
            self.tts = tts
        else:
            self.tts = ResponsiveVoice(gender=ResponsiveVoice.MALE)
        self._login = "******".format(u=self.user, p=self.pwd,
                                               g=self.gateway)
        self._prev_output = ""
        self.running = False
        self.ready = False
        self.mic_muted = False
        self.abort = False
        self.current_call = None
        self._call_status = None
        self.audio = None
        self._ts = None
        self.baresip = pexpect.spawn('baresip -f ' + self.config_path)
        super().__init__()
        self.start()
        if block:
            self.wait_until_ready()
Example #12
0
import socketserver
import http.server
import multiprocessing
#Env variable : should be set in config.ini and send in docker run command 
LISTEN_TOPIC=os.getenv("LISTEN_TOPIC","/tts/message")
STATUS_TOPIC=os.getenv("STATUS_TOPIC","/tts/connect")
PUBLISH_TOPIC=os.getenv("PUBLISH_TOPIC","/tts/lienmp3")
MQTT_ADRESS=os.getenv("MQTT_ADRESS")
MQTT_PORT=int(os.getenv("MQTT_PORT","1883"))
MQTT_LOGIN=os.getenv("MQTT_LOGIN")
MQTT_PASS=os.getenv("MQTT_PASS")
HTTP_PORT=int(os.getenv("HTTP_PORT","8000"))
HTTP_IP=os.getenv("HTTP_IP")
TTS_LANG=os.getenv("TTS_LANG","ResponsiveVoice.FRENCH")
TTS_GENDER=os.getenv("TTS_GENDER","ResponsiveVoice.MALE")
engine = ResponsiveVoice(lang=ResponsiveVoice.FRENCH,gender=ResponsiveVoice.MALE)
if MQTT_ADRESS is None:
    sys.exit("Error: please set Ip adress of the MQTT brocker: MQTT_ADRESS=xx.xx.xx.xx")
    
if MQTT_LOGIN is None:
    sys.exit("Error: please set login of the MQTT brocker : MQTT_LOGIN=your_login")

if MQTT_PASS is None:
    sys.exit("Error: please set password of the MQTT brocker: MQTT_PASS=your_password")

if HTTP_IP is None:
    sys.exit("Error: please set the IP of this server : HTTP_IP=Ip_of_the_server")     

def serveur_http():
  # Variables
    os.chdir("/tmp/")
Example #13
0
def create_responsive_voice():
    from responsive_voice import ResponsiveVoice
    engine_name = "responsive_voice"
    params = [
        {"gender": "male"},
        {"gender": "female"},
        {"gender": "male", "rate": 0.4},
        {"gender": "female", "rate": 0.4},
        {"gender": "male", "rate": 0.6},
        {"gender": "female", "rate": 0.6},
        {"gender": "female", "lang": "en-GB"},
        {"gender": "female", "rate": 0.4, "lang": "en-GB"},
        {"gender": "female", "rate": 0.6, "lang": "en-GB"},
        {"gender": "male", "pitch": 0.4},
        {"gender": "female", "pitch": 0.4},
        {"gender": "male", "rate": 0.4, "pitch": 0.4},
        {"gender": "female", "rate": 0.4, "pitch": 0.4},
        {"gender": "male", "rate": 0.6, "pitch": 0.4},
        {"gender": "female", "rate": 0.6, "pitch": 0.4},
        {"gender": "female", "lang": "en-GB", "pitch": 0.4},
        {"gender": "female", "rate": 0.4, "lang": "en-GB", "pitch": 0.4},
        {"gender": "female", "rate": 0.6, "lang": "en-GB", "pitch": 0.4},
        {"gender": "male", "pitch": 0.6},
        {"gender": "female", "pitch": 0.6},
        {"gender": "male", "rate": 0.4, "pitch": 0.6},
        {"gender": "female", "rate": 0.4, "pitch": 0.6},
        {"gender": "male", "rate": 0.6, "pitch": 0.6},
        {"gender": "female", "rate": 0.6, "pitch": 0.6},
        {"gender": "female", "lang": "en-GB", "pitch": 0.6},
        {"gender": "female", "rate": 0.4, "lang": "en-GB", "pitch": 0.6},
        {"gender": "female", "rate": 0.6, "lang": "en-GB", "pitch": 0.6}
    ]

    for w in HOTWORD_LIST:
        w_path = join(DATA_PATH, w).replace(" ", "_")
        if not isdir(w_path):
            makedirs(w_path)
        for p in params:

            name = w
            for k in p:
                name += "-" + k + "-" + str(p[k]) + "-" + engine_name
            wp_path = join(w_path, name + ".mp3").replace(" ", "_")
            engine = ResponsiveVoice(**p)
            engine.get_mp3(w, wp_path, **p)


    for w in NEGATIVES_LIST:
        w_path = join(DATA_PATH, w).replace(" ", "_")
        if not isdir(w_path):
            makedirs(w_path)
        for p in params:

            name = w
            for k in p:
                name += "-" + k + "-" + str(p[k]) + "-" + engine_name
            wp_path = join(w_path, name + ".mp3").replace(" ", "_")
            engine = ResponsiveVoice(**p)
            engine.get_mp3(w, wp_path, **p)


    for idx, w in enumerate(SENTENCE_LIST):
        w_path = join(DATA_PATH, str(idx + 1)).replace(" ", "_")
        if not isdir(w_path):
            makedirs(w_path)
        for p in params:
            name = str(idx + 1)
            for k in p:
                name += "-" + k + "-" + str(p[k]) + "-" + engine_name
            wp_path = join(w_path, name + ".mp3").replace(" ", "_")
            engine = ResponsiveVoice(**p)
            engine.get_mp3(w, wp_path, **p)
Example #14
0
    def setDefaultUi(self):
        self.version = self.findChild(QtWidgets.QLabel, 'version')
        self.version.setText("Mary 1.0.04")
        self.micButton = self.findChild(QtWidgets.QPushButton, 'micButton')
        self.Kelime_Label = self.findChild(QtWidgets.QLabel, 'Kelime_Label')
        self.Yanit_Label = self.findChild(QtWidgets.QLabel, 'Yanit_Label')
        self.Tip_Label = self.findChild(QtWidgets.QLabel, 'Tip_Label')
        self.Yanit_Layout = self.findChild(QtWidgets.QLayout,
                                           'horizontalLayout_2')
        self.Image_Label = self.findChild(QtWidgets.QLabel, 'Image_Label')
        self.sitelink1 = self.findChild(QtWidgets.QLabel, 'sitelink1')
        self.sitelink2 = self.findChild(QtWidgets.QLabel, 'sitelink2')
        self.sitelink3 = self.findChild(QtWidgets.QLabel, 'sitelink3')
        self.sitebaslik1 = self.findChild(QtWidgets.QLabel, 'sitebaslik1')
        self.sitebaslik2 = self.findChild(QtWidgets.QLabel, 'sitebaslik2')
        self.sitebaslik3 = self.findChild(QtWidgets.QLabel, 'sitebaslik3')
        self.sitebaslik1.setOpenExternalLinks(True)
        self.sitebaslik2.setOpenExternalLinks(True)
        self.sitebaslik3.setOpenExternalLinks(True)
        self.siteaciklama1 = self.findChild(QtWidgets.QLabel, 'siteaciklama1')
        self.siteaciklama2 = self.findChild(QtWidgets.QLabel, 'siteaciklama2')
        self.siteaciklama3 = self.findChild(QtWidgets.QLabel, 'siteaciklama3')
        self.web_sonuc1 = self.findChild(QtWidgets.QLayout, 'web_sonuc1')
        self.web_sonuc2 = self.findChild(QtWidgets.QLayout, 'web_sonuc2')
        self.web_sonuc3 = self.findChild(QtWidgets.QLayout, 'web_sonuc3')
        self.web_sonuc1.setSpacing(0)
        self.web_sonuc2.setSpacing(0)
        self.web_sonuc3.setSpacing(0)
        self.web_sonuc1.setContentsMargins(0, 0, 0, 0)
        self.web_sonuc2.setContentsMargins(0, 0, 0, 0)
        self.web_sonuc3.setContentsMargins(0, 0, 0, 0)
        self.micButton.clicked.connect(self.micButtonPressed)
        self.setWindowIcon(QtGui.QIcon('image/mary.png'))
        self.animasyon = False
        self.ttsIptal = False
        self.listenAktif = False
        self.micButtonClickable = True
        self.Image_Label.show()
        self.aktifThreadler = 0
        self.dosyakonumu = getcwd()
        self.soundPlayer = QtMultimedia.QMediaPlayer()
        self.soundPlayer.stateChanged.connect(self.soundPlayerState)
        #Tray icon
        self.tray_icon = QtWidgets.QSystemTrayIcon(self)
        self.tray_icon.setIcon(QtGui.QIcon("image/mary.png"))
        self.tray_icon.activated.connect(self.trayDoubleClick)
        show_action = QtWidgets.QAction("Göster", self)
        quit_action = QtWidgets.QAction("Çıkış yap", self)
        show_action.triggered.connect(self.show)
        quit_action.triggered.connect(self.closeApp)
        tray_menu = QtWidgets.QMenu()
        tray_menu.addAction(show_action)
        tray_menu.addAction(quit_action)
        self.tray_icon.setContextMenu(tray_menu)
        self.tray_icon.show()

        for i in range(10):
            self.dosyakonumu = self.dosyakonumu.replace("\\", "/")
        i = "border-image: url('{}/image/background.png');".format(
            self.dosyakonumu)
        stylesheet = "#centralwidget{" + i + "}"
        self.setStyleSheet(stylesheet)
        self.micButton.setStyleSheet(
            "border-image: url('{}/image/mic_1.png');".format(
                self.dosyakonumu))
        self.yapilanislem = ""
        self.backgroundListen = True
        self.voiceEngine = ResponsiveVoice(lang=ResponsiveVoice.TURKISH,
                                           gender=ResponsiveVoice.FEMALE,
                                           pitch=0.52,
                                           rate=0.53,
                                           key="8FCWWns8",
                                           vol=0.97)
        threading.Thread(target=self.sesanimasyon, daemon=True).start()
        threading.Thread(target=self.background, daemon=True).start()
        self.db = Veritabani()
        if self.db.ad() == "":
            self.yapilanislem = "ilkacilis"
            threading.Thread(target=self.ilkCalistirma, daemon=True).start()