如何制作不和谐音乐机器人来识别歌曲的结尾或播放位置

时间:2021-01-18 04:40:52

标签: python

我正在尝试使用此代码制作一个不和谐的音乐机器人。 [https://github.com/afazio1/robotic-nation-proj/blob/master/projects/discord-bot/voice.py]

我想添加一项功能,让机器人自动检查音乐队列是否为空,并在机器人播放完毕后将几首歌曲添加到队列中。 我怎样才能让这个机器人识别它什么时候完成播放?

我想添加一个计时器。 当音乐开始时,bot会记录系统时间,并添加歌曲的长度。 这样机器人就可以预测歌曲何时结束。 但是这种方法有一个缺陷——如果用户暂停并继续播放歌曲,即使歌曲没有播放完,机器人也会添加新歌曲并跳过当前歌曲。

P.S 我见过这种代码 voice.play(discord.FFmpegPCMAudio("song.mp3"), after=lambda e: check_queue()) 我不认为这不是我要找的东西,因为我的目的是让机器人自动将新音乐添加到队列中并播放音乐。

1 个答案:

答案 0 :(得分:0)

我想出了如何在当前歌曲结束时播放下一首歌曲。实际上,我不需要计时器。 定义一个从队列中弹出歌曲并播放的函数。然后将其放入 voice.play 函数的第二个参数中。

这就是我所做的。

def after_song(err):
    try :
        if len(queue) > 0:
            next_song = url_queue.pop(0)
            queue.pop(0)
            song_manager = Song()
            _video_title = song_manager.do_both(next_song)  #downloads song and returns video_title
            voice.play(discord.FFmpegPCMAudio("song.mp3"), after=after_song)
        else :
            url_queue.pop(0)
            queue.pop(0)
            return
    except IndexError :
        pass

voice.play(discord.FFmpegPCMAudio("song.mp3"), after=after_song)

我参考了这段代码(第 163 到 171 行) https://github.com/joek13/py-music-bot/blob/master/musicbot/cogs/music.py

我最初的计划是在歌曲结束之前(比如距离结束还剩 3 秒)机器人提前识别并下载歌曲。这样我就可以毫不拖延地听新歌了。 (从队列中弹出一首歌并下载需要时间。)这就是我写这个问题的原因。现在我发现我没有正确解释它。

最终,我放弃了实施这种方法。 我稍等一下,让我的机器人下载新歌。