shaonianzhentan / ha_cloud_music

新版云音乐
MIT License
105 stars 96 forks source link

播放时总是单曲循环,无法自动切换到下一首! #22

Closed Gzzloveyyt closed 9 months ago

Gzzloveyyt commented 1 year ago

如下图,用的是小爱音响! image

Gzzloveyyt commented 1 year ago

@shaonianzhentan 麻烦能给看下吗

wxhbts commented 1 year ago

一样的情况

superbob1997 commented 1 year ago

我也是啊,有没有解决了的大佬给个方案啊

shaonianzhentan commented 1 year ago

我没有设备调试,无法解决这个问题

ewintec commented 1 year ago

DLNA设备一样播放列表无法自动切歌,就放第一首

superbob1997 commented 1 year ago

我进群问了,小爱pro DLNA的问题,目前没法解决。

Gzzloveyyt commented 1 year ago

@shaonianzhentan @superbobgithub 确定是小爱dlna的问题? 为什么我这边用的Musicassistant来播放就会自动切歌呢,同样都是用的小爱音响

shaonianzhentan commented 1 year ago

@shaonianzhentan @superbobgithub 确定是小爱dlna的问题? 为什么我这边用的Musicassistant来播放就会自动切歌呢,同样都是用的小爱音响

只是有很多人反馈,我并没有测试过

qqdwtypm commented 1 year ago

在2023.8.13的版本上做如下修改:

1. 在dlna上不会自动下一曲,修改media_player.py

(1)

# 定时器时间
TIME_BETWEEN_UPDATES = datetime.timedelta(seconds=10)

(2)

            # 判断是否下一曲
            if self.before_state is not None:
                # 判断音乐总时长
                if self.before_state['media_duration'] > 0 and self.before_state['media_duration'] - self.before_state['media_duration'] <= 5:
                    # 判断源音乐播放器状态
#                    if self.before_state['state'] == STATE_PLAYING and self.current_state == STATE_IDLE:
#                    if self.before_state['media_duration'] - self.before_state['media_position'] <= 10 and self.before_state['media_duration'] > 1 and self.before_state['media_duration'] - self.before_state['media_position'] >= 0:

                    if self._attr_media_duration - self._attr_media_position <= 19 and self._attr_media_duration > 1 and self._attr_media_duration - self._attr_media_position >= 0 :
                        self._attr_state = STATE_PAUSED
                        self.before_state = None
                        timeleft = self._attr_media_duration - self._attr_media_position
                        if timeleft > 13 :
                            time.sleep(timeleft-13)
                        self.hass.async_create_task(self.async_media_next_track())
                        self.before_state = None
                        return

                # 源播放器空闲 & 当前正在播放
#                if self.before_state['media_duration'] == 0 and self.before_state['media_position'] == 0 and self.current_state == STATE_IDLE \
#                    and self._attr_media_duration == 0 and self._attr_media_position == 0 and self._attr_state == STATE_PLAYING:
#                        self.hass.async_create_task(self.async_media_next_track())
#                        self.before_state = None
#                        return

                if self.before_state['media_duration'] == 0 and self.before_state['media_position'] == 0 and self.current_state == STATE_PLAYING \
                    and self._attr_media_duration == 0 and self._attr_media_position == 0 and self._attr_state == STATE_PLAYING:
                        time.sleep(10)
                        if self.before_state['media_duration'] == 0 and self.before_state['media_position'] == 0 and self.current_state == STATE_PLAYING \
                            and self._attr_media_duration == 0 and self._attr_media_position == 0 and self._attr_state == STATE_PLAYING:
                                self.hass.async_create_task(self.async_media_next_track())
                                self.before_state = None
                                return

                # 判断是否已暂停
                if media_player.state == STATE_IDLE and self._attr_state !=  STATE_ON:
                    time.sleep(19)
                    if media_player.state == STATE_IDLE and self._attr_state !=  STATE_ON :
                        self.hass.async_create_task(self.async_media_pause())
                        self.before_state = None
                        return

2. 返回的链接为https,小爱音箱无法跳转,修改为http,修改http.py

(1)

        not_found_tips = quote(f'当前没有找到编号是{id},歌名为{song},作者是{singer}的播放链接')
        play_url = f'http://fanyi.baidu.com/gettts?lan=zh&text={not_found_tips}&spd=5&source=web'

(2)

        # 修改https为http
        play_url2 = play_url.replace('https','http')
        play_url = play_url2

        print(play_url)
        self.play_key = play_key
        self.play_url = play_url
        # 重定向到可播放链接
        return web.HTTPFound(play_url)
Gzzloveyyt commented 9 months ago

@shaonianzhentan 我按照楼上 @qqdwtypm 大佬的方法修改了以后确实会自动切换列表了, 麻烦您能测试下然后同步到代码里吗?

shaonianzhentan commented 9 months ago

@shaonianzhentan 我按照楼上 @qqdwtypm 大佬的方法修改了以后确实会自动切换列表了, 麻烦您能测试下然后同步到代码里吗?

我没有这个问题,建议自行fork一份

Gzzloveyyt commented 8 months ago

@shaonianzhentan 我看到您更新了2023.12.19版本,修复了小爱音响的问题,您在公众号上发布的文章里写的还是没有解决自动切换下一首的问题,但是我按照楼上大佬这个代码改过之后,确实可以自动切换下一首了,不会单曲循环,您既然手头里有小爱音箱,是否可以按照上方代码改过后测试一下