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

preloading short MP3 clips in Python to eliminate playback gaps (for use with an Alexa skill)

我已经在 Alexa 论坛上问过这个问题,但没有得到任何关注。我希望一般 Python 社区能够提供帮助,然后我可以看看它是否适用于 Python Alexa 技能环境。

我有一些短的(1-3 秒长)mp3 文件托管在 Amazon S3 存储桶中,我想在我的 alexa 技能中播放它们。我需要能够根据技能中发生的事情来混合效果的顺序,但它们在播放时需要听起来像 1 个长 MP3,即每个样本的播放之间没有 silence/delay。目前我得到大约 0.5 到 1 秒的差距,这是可变的。虽小,但这种沉默对我的技能应用来说是不能接受的。

我目前正在使用 SSML,有人建议我改用 Alexa 音频播放器,但是,我看到论坛评论说这个播放器也有延迟问题。

有效,这就是我的技能在做什么:

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 个“虚拟”文件的技术?我希望在 1 个序列中播放的效果将持续不超过 10 秒左右。

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

Audioplayer 不是用来混合你想要的小片段的。使用时应该支持shuffle on/off、next/back等。你不得不支持一堆你不想要的行为,如果你不这样做,你的技能可能会被拒绝。

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

您是否考虑过设置一个服务,可以将序列作为查询,将它们在内存中相互追加,然后 return 将合并后的音频作为文件?我不是 Python 人,但似乎您可以使用 PyDub 以“合理”的方式轻松完成。