在Python中预加载短MP3片段以消除播放间隙(用于Alexa技能)

2024-10-02 08:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Alexa论坛上问过这个问题,但并没有得到任何启发。我希望一般的Python社区能够提供帮助,然后我可以看看它在PythonAlexa技能环境中是否有效

我有短(1-3秒长)的mp3文件托管在亚马逊S3存储桶中,我想用我的alexa技能播放它们。我需要能够根据技能中发生的情况混合效果的顺序,但播放时它们需要听起来像一个长MP3,即在播放每个样本之间没有静音/延迟。现在我得到了0.5到1秒的间隔,这是可变的。虽然很小,但这种沉默对于我的技能应用来说是不可接受的

我目前正在使用SSML,有人建议我改用Alexa audioplayer,但我看到论坛评论说该播放器也存在延迟问题

实际上,我的技能就是这样做的:

speak_output =  '<speak> Here are some sounds'
if (a=b):
  speak_output += '<audio src="https://s3xxx/file/anEffect.mp3" />'
speak_output += '<audio src="https://s3xxx/file/anotherEffect.mp3" />'
speak_output += '<audio src="https://s3xxx/file/aThirdEffect.mp3" />'
speak_output +=  '</speak>'
        
print (speak_output)
        
return (
     handler_input.response_builder
         .speak(speak_output)
         .ask(speak_output)
         .response

有没有python技术可以预加载MP3文件,或者在播放之前将多个文件合并成一个“虚拟”文件?我希望在1个序列中播放的效果不会超过10秒


Tags: 文件httpssrcoutputresponse技能论坛mp3
1条回答
网友
1楼 · 发布于 2024-10-02 08:20:25

事情是这样的。。。您正在向Alexa发送包含音频URL的文本响应。该规范规定,它们必须可通过互联网访问并通过HTTPS提供服务。所以你没有在技能处理程序中加载它们。Alexa服务根据您的响应加载它们,然后将它们发送到设备

Audioplayer不适合混合您想要的小片段。当你使用它时,你应该支持shuffle on/off、next/back等。你必须支持一系列你不想要的行为,如果你不这样做,你的技能可能会被拒绝

我尝试在SSML中使用一个数据URL(将文件转换为文本,并将文件本身作为URL发送)来解决这个问题,但服务给了我一个错误。即使没有,您也会很快遇到URL字符串中8000个字符和总响应中24000个字符的服务限制

您是否考虑过设置一个服务,该服务可以将序列作为查询,在内存中相互追加,并将组合的音频作为文件返回?我不是Python爱好者,但使用PyDub似乎可以“合理”轻松地完成

相关问题 更多 >

    热门问题