16 from time
import sleep
23 from requests
import Session
28 if path.startswith(
'http'):
29 response = Session().head(path, allow_redirects=
True)
30 if 200 <= response.status_code < 300:
31 mime = response.headers[
'content-type']
33 mime = mimetypes.guess_type(path)[0]
36 return mime.split(
'/')
43 Simple Audio backend for both mpg123 and the ogg123 player. 44 This one is rather limited and only implements basic usage. 47 def __init__(self, config, bus, name='simple'):
61 self.bus.on(
'SimpleAudioServicePlay', self.
_play)
64 return [
'file',
'http']
71 LOG.info(
"Track list is " + str(tracks))
74 """ Implementation specific async method to handle playback. 75 This allows mpg123 service to use the "next method as well 78 LOG.info(
'SimpleAudioService._play')
83 repeat = message.data.get(
'repeat',
False)
89 mime = mime.split(
'/')
98 track = track.replace(
'file://',
'')
100 if 'mpeg' in mime[1]:
102 elif 'ogg' in mime[1]:
104 elif 'wav' in mime[1]:
109 except FileNotFoundError
as e:
110 LOG.error(
'Couldn\'t play audio, {}'.format(repr(e)))
130 self.bus.emit(
Message(
'SimpleAudioServicePlay',
137 LOG.info(
'Call SimpleAudioServicePlay')
139 self.bus.emit(
Message(
'SimpleAudioServicePlay', {
'repeat': repeat}))
142 LOG.info(
'SimpleAudioServiceStop')
149 """ Pauses playback if possible. 151 Returns: (bool) New paused status: 155 self.process.send_signal(signal.SIGSTOP)
165 """ Resumes playback if possible. 167 Returns: (bool) New paused status: 171 self.process.send_signal(signal.SIGCONT)
197 return self.
process and self.process.poll()
is None 204 self.process.terminate()
212 LOG.debug(
"Killing currently playing audio...")
218 backends = base_config.get(
'backends', [])
219 services = [(b, backends[b])
for b
in backends
220 if backends[b][
'type'] ==
'simple' and 221 backends[b].
get(
'active',
True)]
def _is_process_running(self)
def add_list(self, tracks)
def _stop_running_process(self)
def play(self, repeat=False)
def __init__(self, config, bus, name='simple')
def load_service(base_config, bus)
def get(phrase, lang=None, context=None)