discord.py FFmpegPCMAudio 在声音文件中间停止播放声音
Posted
技术标签:
【中文标题】discord.py FFmpegPCMAudio 在声音文件中间停止播放声音【英文标题】:discord.py FFmpegPCMAudio stops playing sound in the middle of sound file 【发布时间】:2021-09-03 18:42:10 【问题描述】:我正在尝试在 python 中构建一个不和谐的机器人,它选择随机的***页面,然后使用 gTTS 将其转换为声音文件并在不和谐的语音频道中播放。 我的代码如下所示:
file = "file.mp3"
# initialize tts, create mp3 and play
tts = gTTS(txt, 'cz', lang="cs")
tts.save(file)
vc.play(discord.FFmpegPCMAudio(executable="/usr/bin/ffmpeg", source=file, **ffmpeg_options))
# Sleep while audio is playing.
while vc.is_playing():
sleep(.1)
当我运行该代码时,它可能工作了大约 30 秒,然后音频停止播放。当我尝试使用 Ctrl + C 停止代码时,它不起作用...
我搜索了很多,但似乎没有人可以回答这个问题。
请帮忙
【问题讨论】:
你检查过file.mp3
中的内容吗?也许gTTS
只创建了 30 秒。
【参考方案1】:
我得到了答案,因为您的机器人在异步事件循环上运行。所以通常机器人会处理一些音频字节,将其添加到缓冲区,然后进入你的循环。但是要播放整个音频,事件循环必须再次处理音频的下一个字节。现在你的循环阻止了事件循环,因为 sleep 是一个同步函数,你只听主要在缓冲区中的内容。所以尝试首先导入 asyncio 然后 insted of sleep do await asyncio.sleep()。它会让事件循环去做其他工作,直到时间段完成。
import asyncio
file = "file.mp3"
# initialize tts, create mp3 and play
tts = gTTS(txt, 'cz', lang="cs")
tts.save(file)
vc.play(discord.FFmpegPCMAudio(executable="/usr/bin/ffmpeg", source=file, **ffmpeg_options))
# Sleep while audio is playing.
while vc.is_playing():
await asyncio.sleep(1)
它会解决你的问题
【讨论】:
以上是关于discord.py FFmpegPCMAudio 在声音文件中间停止播放声音的主要内容,如果未能解决你的问题,请参考以下文章
不和谐机器人在哪里可以找到 ffmpeg buildpack heroku
AttributeError:“FFmpegPCMAudio”对象没有属性“_process”