【问题标题】:How to get audio samples from python-VLC如何从 python-VLC 获取音频样本
【发布时间】:2021-01-10 22:53:49
【问题描述】:

我需要什么

我正在开发带有样本分析器的音乐播放器。我的问题是我目前正在使用 pydub 从歌曲中获取样本,但是随着歌曲变得更长,两者变得越不同步。我已经让这两者完全同步,pydub 恰好读出了它[我什至同时启动它们,这两者实际上逐渐与音频不同步,并且随着歌曲继续播放更多]。

基本上,有没有相当于pydub.AudioSegment.get_array_of_samples()的python-vlc?

您可以在此处查看 python-vlc 文档:https://www.olivieraubert.net/vlc/python-ctypes/doc/

我尝试过的

  1. python-vlc 有 sound.get_time() 以毫秒为单位返回最后更新时间。该命令的问题不在于它仅每半秒左右更新一次[我找到了解决方法],而是它没有返回准确的时间。我可以使用time.monotonic() 开始播放计时器。随着时间的推移,get_time() 与计时器的变化很大。我得到了 195ms、294ms 和 217ms 的差异。

  2. 我尝试使用threading 模块使用外部计时器。 pydub.AudioSegment[index] 似乎没有同步。

  3. 从 py-vlc 中的 sound.get_time() 缩放到 pydub 中的 len(sound)。这不能按预期工作。我不能告诉你为什么,但它仍然不同步。

  4. 使用sound.get_time() 的平均偏移量随时间增加。 pydub.AudioSegment[index] 似乎没有正确排列。

  5. 使用aubio。它只读取 WAV 文件,对于实时分析仪来说,首先转换为 WAV 需要很长时间。

我发现的事情

  • 我查看了每首歌曲的时长(以毫秒为单位),pydub 的 len(sound) 和 python-vlc 的 sound.get_length() 通常相差 10 秒左右。

不起作用的事情

  • 使用 pydub 的 play() 命令。我不喜欢它,因为它非常有限。
  • 使用 py-vlc 以外的其他工具来播放音频,VLC 具有许多无法复制的功能。

以前的建议

我很好奇

  • 是否有用于 Audacity 的 python 模块?我一直在寻找并找不到它。如果可能的话,我还可以使用其他一些可以与 Audacity 交互的命令行工具[我知道内置的命令行实用程序根本没有做太多事情]

【问题讨论】:

    标签: python vlc pydub python-vlc


    【解决方案1】:

    你可能想直接使用 ffmpeg。

    【讨论】:

    • 如何使用它?我知道我可以使用subprocess.run([...], capture_output = True),但是我应该使用 ffmpeg 中的什么命令?
    • 我不是要提取音频,而是要获取像 pydub.AudioSegment.get_array_of_samples() 这样的音频样本数据。反正我已经在处理音频文件了。
    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多