From cb0bae5ae7aafc4ef9fde06524b2a515c31ce17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Fri, 5 Jul 2024 17:06:13 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=A4=9A=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=8E=A5=E5=8F=A3=E6=89=A7=E8=A1=8C=E6=95=88=E6=9E=9C?= =?UTF-8?q?=EF=BC=8C=E5=B0=BD=E9=87=8F=E5=81=9A=E5=88=B0=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/xiaomusic.py | 64 +++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/xiaomusic/xiaomusic.py b/xiaomusic/xiaomusic.py index d8965e0..5862b0e 100644 --- a/xiaomusic/xiaomusic.py +++ b/xiaomusic/xiaomusic.py @@ -289,13 +289,19 @@ class XiaoMusic: self.log.info(f"do_tts ok. cur_music:{self.cur_music}") await self.check_replay() - async def text_to_speech(self, value): + async def text_to_speech_one(self, device_id, value): try: - for device_id in self.device2hardware: - await self.mina_service.text_to_speech(device_id, value) + await self.mina_service.text_to_speech(device_id, value) except Exception as e: self.log.error(f"Execption {e}") + async def text_to_speech(self, value): + tasks = [ + self.text_to_speech_one(device_id, value) + for device_id in self.device2hardware + ] + await asyncio.gather(*tasks) + # 继续播放被打断的歌曲 async def check_replay(self): if self.isplaying() and not self.isdownloading(): @@ -336,20 +342,25 @@ class XiaoMusic: # stop it ret = await self.mina_service.player_stop(device_id) self.log.info( - f"force_stop_xiaoai player_stop device_id:{device_id} ret:{ret}" + f"stop_if_xiaoai_is_playing player_stop device_id:{device_id} ret:{ret}" ) - async def force_stop_xiaoai(self): + async def force_stop_one_xiaoai(self, device_id): try: - for device_id in self.device2hardware: - ret = await self.mina_service.player_pause(device_id) - self.log.info( - f"force_stop_xiaoai player_pause device_id:{device_id} ret:{ret}" - ) - await self.stop_if_xiaoai_is_playing(device_id) + ret = await self.mina_service.player_pause(device_id) + self.log.info( + f"force_stop_one_xiaoai player_pause device_id:{device_id} ret:{ret}" + ) + await self.stop_if_xiaoai_is_playing(device_id) except Exception as e: self.log.error(f"Execption {e}") + async def force_stop_xiaoai(self): + tasks = [ + self.force_stop_one_xiaoai(device_id) for device_id in self.device2hardware + ] + await asyncio.gather(*tasks) + # 是否在下载中 def isdownloading(self): if not self.download_proc: @@ -720,21 +731,28 @@ class XiaoMusic: url = kwargs.get("arg1", "") await self.all_player_play(url) - async def all_player_play(self, url): + async def play_one_url(self, device_id, url): try: - for device_id in self.device2hardware: - if self.config.use_music_api: - ret = await self.play_by_music_url(device_id, url) - self.log.info( - f"player_play play_by_music_url device_id:{device_id} ret:{ret} url:{url}" - ) - else: - ret = await self.mina_service.play_by_url(device_id, url) - self.log.info( - f"player_play play_by_url device_id:{device_id} ret:{ret} url:{url}" - ) + if self.config.use_music_api: + ret = await self.play_by_music_url(device_id, url) + self.log.info( + f"play_one_url play_by_music_url device_id:{device_id} ret:{ret} url:{url}" + ) + else: + ret = await self.mina_service.play_by_url(device_id, url) + self.log.info( + f"play_one_url play_by_url device_id:{device_id} ret:{ret} url:{url}" + ) except Exception as e: self.log.error(f"Execption {e}") + return ret + + async def all_player_play(self, url): + tasks = [ + self.play_one_url(device_id, url) for device_id in self.device2hardware + ] + results = await asyncio.gather(*tasks) + self.log.info(f"all_player_play {url} {results}") def find_real_music_name(self, name): if not self.config.enable_fuzzy_match: