def _play(self, message): """ Implementation specific async method to handle playback. This allows mpg123 service to use the "next method as well as basic play/stop. """ LOG.info('SimpleAudioService._play') repeat = message.data.get('repeat', False) self._is_playing = True if isinstance(self.tracks[self.index], list): track = self.tracks[self.index][0] mime = self.tracks[self.index][1] mime = mime.split('/') else: # Assume string track = self.tracks[self.index] mime = find_mime(track) # Indicate to audio service which track is being played if self._track_start_callback: self._track_start_callback(track) # Replace file:// uri's with normal paths track = track.replace('file://', '') try: if 'mpeg' in mime[1]: self.process = play_mp3(track) elif 'ogg' in mime[1]: self.process = play_ogg(track) elif 'wav' in mime[1]: self.process = play_wav(track) else: # If no mime info could be determined guess mp3 self.process = play_mp3(track) except FileNotFoundError as e: LOG.error('Couldn\'t play audio, {}'.format(repr(e))) self.process = None # Wait for completion or stop request while (self.process and self.process.poll() is None and not self._stop_signal): sleep(0.25) if self._stop_signal: self.process.terminate() self.process = None self._is_playing = False return self.index += 1 # if there are more tracks available play next if self.index < len(self.tracks) or repeat: if self.index >= len(self.tracks): self.index = 0 self.bus.emit(Message('SimpleAudioServicePlay', {'repeat': repeat})) else: self._is_playing = False
def handle_intent(self, message): try: data = feedparser.parse(self.url_rss) self.speak_dialog('npr.news') time.sleep(3) self.process = play_mp3(data['entries'][0]['links'][0]['href']) except Exception as e: LOGGER.error("Error: {0}".format(e))
def notify(self, timestamp): with self.LOCK: if self.data.__contains__(timestamp): volume = None self.alarm_on = True delay = self.__calculate_delay(self.max_delay) while self.alarm_on and datetime.now() < delay: play_mp3(self.file_path).communicate() self.speak_dialog('alarm.stop') time.sleep(self.repeat_time + 2) if not volume and datetime.now() >= delay: mixer = Mixer() volume = mixer.getvolume()[0] mixer.setvolume(100) delay = self.__calculate_delay(self.extended_delay) if volume: Mixer().setvolume(volume) self.remove(timestamp) self.alarm_on = False self.save()
def run(self): """ Thread main loop. get audio and visime data from queue and play. """ while not self._terminated: try: snd_type, data, visimes, ident = self.queue.get(timeout=2) self.blink(0.5) if not self._processing_queue: self._processing_queue = True self.tts.begin_audio() stopwatch = Stopwatch() with stopwatch: if snd_type == 'wav': self.p = play_wav(data) elif snd_type == 'mp3': self.p = play_mp3(data) if visimes: if self.show_visimes(visimes): self.clear_queue() else: self.p.communicate() self.p.wait() send_playback_metric(stopwatch, ident) if self.queue.empty(): self.tts.end_audio() self._processing_queue = False self._clear_visimes = False self.blink(0.2) except Empty: pass except Exception as e: LOG.exception(e) if self._processing_queue: self.tts.end_audio() self._processing_queue = False
def execute(self, sentence): tts = gTTS(sentence, self.lang) tts.save(self.filename) p = play_mp3(self.filename) p.communicate() # Wait for termination
def handle_RadioMarte_intent(self, message): if self.audioservice: self.audioservice.play(RadioMarte_URL, message.data['utterance']) else: self.process = play_mp3(RadioMarte_URL)
def handle_LifeGateRadio_intent(self, message): if self.audioservice: self.audioservice.play(LifeGateRadio_URL, message.data['utterance']) else: self.process = play_mp3(LifeGateRadio_URL)
def handle_R101Diretta_intent(self, message): if self.audioservice: self.audioservice.play(R101Diretta_URL, message.data['utterance']) else: self.process = play_mp3(R101Diretta_URL)
def _play(self, message): """Implementation specific async method to handle playback. This allows mpg123 service to use the next method as well as basic play/stop. """ LOG.info('SimpleAudioService._play') # Stop any existing audio playback self._stop_running_process() repeat = message.data.get('repeat', False) self._is_playing = True self._paused = False with self.track_lock: if len(self.tracks) > self.index: track, mime = self._get_track(self.tracks[self.index]) else: return LOG.debug('Mime info: {}'.format(mime)) # Indicate to audio service which track is being played if self._track_start_callback: self._track_start_callback(track) # Replace file:// uri's with normal paths track = track.replace('file://', '') try: if 'mpeg' in mime[1]: self.process = play_mp3(track) elif 'ogg' in mime[1]: self.process = play_ogg(track) elif 'wav' in mime[1]: self.process = play_wav(track) else: # If no mime info could be determined guess mp3 self.process = play_mp3(track) except FileNotFoundError as e: LOG.error('Couldn\'t play audio, {}'.format(repr(e))) self.process = None except Exception as e: LOG.exception(repr(e)) self.process = None # Wait for completion or stop request while (self._is_process_running() and not self._stop_signal): sleep(0.25) if self._stop_signal: self._stop_running_process() self._is_playing = False self._paused = False return else: self.process = None # if there are more tracks available play next self.index += 1 with self.track_lock: if self.index < len(self.tracks) or repeat: if self.index >= len(self.tracks): self.index = 0 self.bus.emit(Message('SimpleAudioServicePlay', {'repeat': repeat})) else: self._track_start_callback(None) self._is_playing = False self._paused = False
def whitenoise(self, message): self.process = play_mp3(self.play_list_all[0])
def say(self, sentence, lang): sentence = unicodedata.normalize('NFKD', sentence).encode('ascii', 'ignore') get_sentence = 'wget -q -U Mozilla -O /tmp/translated.mp3 "https://translate.google.com/translate_tts?tl=' + lang + '&q=' + sentence + '&client=tw-ob' + '"' os.system(get_sentence) play_mp3("/tmp/translated.mp3")
def handle_nova_intent(self, message): if self.audioservice: self.audioservice.play(NOVA_URL, message.data['utterance']) else: self.process = play_mp3(NOVA_URL)
def handle_dradio_intent(self, message): if self.audioservice: self.audioservice.play(DRADIO_URL, message.data['utterance']) else: self.process = play_mp3(DRADIO_URL)