2021-08-30 14:33:37 +08:00

99 lines
2.9 KiB
Python

from usr.bin.components.abstract_service import AbstractService
from usr.bin.components.monitor import ServiceMonitor
import audio
import utime
MEDIA = "MEDIA"
MEDIA_TYPE_MAP = {
"AUDIO": 0,
"TTS": 1
}
class MediaServiceMonitor(ServiceMonitor):
@staticmethod
def create_monitor(config=None):
media_service = MediaService()
if config is not None:
try:
if config.get('enable', True):
mode = config["params"]["mode"]
return MediaServiceMonitor(media_service)
except Exception as e:
# 这里异常重定向
return None
msm = MediaServiceMonitor(media_service)
if config is not None:
msm.set_exception_handlers(config.get('exceptionHandlers', None))
return msm
class MediaService(AbstractService):
def __init__(self, device=0):
super().__init__(MEDIA)
self.__tts = audio.TTS(device)
self.__audio = audio.Audio(device)
def set_tts(self, mode):
self.__tts = audio.TTS(mode)
def set_audio(self, mode):
self.__audio = audio.Audio(mode)
def set_pa(self, pa):
return self.__audio.set_pa(pa)
def set_mode(self, mode):
if mode in range(0x03):
self.set_audio(mode)
self.set_tts(mode)
else:
raise Exception("mode {} must in mid of [0,1,2]".format(mode))
@property
def tts(self):
return self.__tts
@property
def audio(self):
return self.__audio
def _play(self, sender, **kwargs):
msg_type = kwargs["message"]['msg_type']
msg = kwargs["message"]['message']
# 策略
ret = self.__start_play(msg_type, msg)
while ret == -2:
print(ret, msg)
ret = self.__start_play(msg_type, msg)
utime.sleep(1)
def __start_play(self, msg_type, msg):
if msg_type == MEDIA_TYPE_MAP["TTS"]:
ret = self.__tts.play(msg["priority"], msg["breakin"], msg["mode"], msg['play_data'])
else:
ret = self.__audio.play(msg["priority"], msg["breakin"], msg['play_data'])
return ret
def tts_play(self, priority=4, breakin=0, mode=2, play_data="", sender=None):
message = dict(priority=priority, breakin=breakin, mode=mode, play_data=play_data)
self.send_msg(msg_type=MEDIA_TYPE_MAP["TTS"], sender=sender, message=message)
def audio_play(self, priority=4, breakin=0, play_data="", sender=None):
message = dict(priority=priority, breakin=breakin, play_data=play_data)
self.send_msg(msg_type=MEDIA_TYPE_MAP["AUDIO"], sender=sender, message=message)
def register_event(self):
super().register_event()
self.signal.connect(self._play, sender="anonymous")
if __name__ == '__main__':
media = MediaService()
media.start()
media.audio.setVolume(2)
media.tts_play(play_data="123")