def generate_tts_sample(self, text, voice="antoine22k"): text = text.replace("\n", "").replace( "\r", "" ) # TTS engine will stop sound mixing when a newline is encountered, so we remove them all if not config.ACAPELA_CLIENT_ARGS: if not config.DEBUG: raise RuntimeError("Text-to-speech engine is not configured") else: self.logger.warning( "Generating DUMMY mp3 link for voice=%r and text=%r", voice, text) #sound_url = "http://dummy_test_url_%d.mp3" % int(time.time()) sound_url = "http://localhost:8000/files/f26529e7/audio/radio_spots/personal_messages/A_intro_messages.mp3" else: tts = AcapelaClient(**config.ACAPELA_CLIENT_ARGS) self.logger.info("Generating TTS sample for voice=%r and text=%r", voice, text) try: #res = {'alt_sound_size': None, 'sound_size': u'6799', 'sound_time': u'805.75', 'sound_id': u'289920127_cffb8f40d9f30', 'alt_sound_url': None, 'sound_url': u'http://vaas.acapela-group.com/MESSAGES/009086065076095086065065083/EVAL_4775608/sounds/289920127_cffb8f40d9f30.mp3', 'warning': u'', 'get_count': 0} res = tts.create_sample(voice=voice, text=text, response_type="INFO") except EnvironmentError as e: self.logger.critical("TTS generation failed for %s/%r: %r", voice, text, e) raise # OK for AJAX request self.logger.info("TTS generation successful: %r", res) sound_url = res["sound_url"] # we backup mp3 and text, for use in other game session try: _filename_base = datetime.now().strftime( "%Y%m%d%H%M%S_") + slugify(text)[0:180] full_filename_base = os.path.join(GAME_RADIOSPOTS_BACKUPS_ABSPATH, _filename_base) r = requests.get(sound_url) r.raise_for_status() with open(full_filename_base + ".mp3", "wb") as code: code.write(r.content) with open(full_filename_base + ".txt", "wb") as code: code.write(text.encode('utf8')) except requests.exceptions.HTTPError as e: self.logger.error("Could not save generated TTS mp3 for %s/%r: %r", voice, text, e) html_player = mediaplayers.build_proper_viewer(sound_url, autostart=True) return dict(sound_url=sound_url, mediaplayer=html_player)
def mediaplayer(properties, autostart="false"): fileurl = determine_asset_url(properties) try: res = mediaplayers.build_proper_viewer(fileurl, autostart=(autostart == "true")) return mark_safe(res) except: logging.error("mediaplayer filter failed", exc_info=True) return mark_safe("<a href=" + fileurl + ">" + fileurl + "</a>")
def mediaplayer(properties, autostart="false"): fileurl = determine_asset_url(properties) title = properties.get("title") if hasattr(properties, "get") else properties # might even be None try: res = mediaplayers.build_proper_viewer(fileurl, title=title, autostart=(autostart == "true")) return mark_safe(res) except: logging.error("mediaplayer filter failed", exc_info=True) return mark_safe("<a href=" + fileurl + ">" + fileurl + "</a>")
def view_media(request, template_name='utilities/view_media.html'): fileurl = request.REQUEST.get("url", None) autostart = (request.REQUEST.get("autostart", "false") == "true") if fileurl: media_player = mediaplayers.build_proper_viewer(fileurl, autostart=autostart) else: media_player = "<p>" + _( "You must provide a valid media url.") + "</p>" return render(request, template_name, {'media_player': media_player})
def mediaplayer(properties, autostart="false"): fileurl = determine_asset_url(properties) title = properties.get("title") if hasattr( properties, "get") else properties # might even be None try: res = mediaplayers.build_proper_viewer(fileurl, title=title, autostart=(autostart == "true")) return mark_safe(res) except: logging.error("mediaplayer filter failed", exc_info=True) return mark_safe("<a href=" + fileurl + ">" + fileurl + "</a>")
def view_media(request, template_name='utilities/view_media.html'): fileurl = request.REQUEST.get("url", None) autostart = (request.REQUEST.get("autostart", "false") == "true") if fileurl: media_player = mediaplayers.build_proper_viewer(fileurl, autostart=autostart) else: media_player = "<p>" + _("You must provide a valid media url.") + "</p>" return render(request, template_name, { 'media_player': media_player })