【问题标题】:sampling audio doesn't preserve waves (vectors)!采样音频不保留波(矢量)!
【发布时间】:2019-08-17 04:34:02
【问题描述】:

我创建了一个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"]

谁能告诉我我做错了什么?提前致谢!

【问题讨论】:

    标签: python audio telegram python-telegram-bot pydub


    【解决方案1】:

    暗中猜测:

    刚刚采样了这两首缪斯歌曲,“Pressure”是一首比“The Void”更响亮的摇滚歌曲。我怀疑 Telegram 服务本身只是在执行语音到文本的翻译时将音乐检测为噪音。与口语之间的动态范围很宽的语音不同,音乐的音量往往相同。因此,每个样本的相对体积是相对相同的 - 因此是一条平线。

    【讨论】:

      【解决方案2】:

      由于它只发生在一些歌曲中,我认为问题与原始歌曲格式有关。确保pudub 获得正确的文件参数,例如:通道数、采样宽度、帧速率等。有时生成的格式也会发生变化,因此您可以获得范围 [-1..1] (float) 内的音频,有时 [-32767..32768] (整数)。

      【讨论】:

        猜你喜欢
        • 2017-03-04
        • 1970-01-01
        • 2015-12-16
        • 2011-04-29
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多