我做了一个Telegram robot,其中一个工作是从音频文件创建样本。现在,对于发送给它的大多数音频,样本都非常好;这样的事情:
但是,对于某些音频,样本看起来有点奇怪:
如您所见,此文件中的波形未显示! (我可以向你保证声音不是空的)
为了创建样本,我使用pydub
(谢谢,James!)。这是我创建示例的部分:
song = AudioSegment.from_mp3('song.mp3')
sliced = song[start*1000:end*1000]
sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])
然后我使用bot.send_voice
方法发送样本。 Like this:
bot.send_voice(
chat_id=update.message.chat.id,
voice=open('song.ogg', 'rb'),
caption=settings.caption,
parse_mode=ParseMode.MARKDOWN,
timeout=1000
)
Telegram Bot API的文档说:
如果希望Telegram客户端将文件显示为可播放的语音消息,请使用此方法发送音频文件。为此,您的音频必须位于使用OPUS编码的.ogg文件中(其他格式可以作为音频或文档发送)。
这就是为什么在这行代码中:
sliced.export('song.ogg', format='ogg', parameters=["-acodec", "libopus"])
我用过parameters=["-acodec", "libopus"]
。
谁能告诉我我做错了什么?提前致谢!
在黑暗中猜测:
刚刚对这两首Muse歌曲进行了采样,“压力”是一首比“The Void”更响亮的摇滚歌曲。我怀疑Telegram服务本身只是在执行语音到文本翻译时将音乐检测为噪音。与口语之间具有宽动态范围的语音不同,音乐往往具有相同的音量。因此,每个样品的相对体积相对相同 - 因此是扁平线。
由于它只发生在一些歌曲中,我相信这些问题与原始歌曲格式有关。确保pudub
正确获取文件参数,例如:通道数,样本宽度,帧速率等。有时结果格式也会改变,因此您可以获得范围[-1..1](浮点)中的音频,有时候[-32767..32768](整数)。