如何从python-VLC获取音频样本

时间:2020-09-24 15:48:39

标签: python vlc pydub python-vlc

我需要什么

我正在使用样本分析仪在音乐播放器上工作。我的问题是,我目前正在使用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进行交互的命令行工具[我知道内置的命令行实用程序根本不能做很多事情]

1 个答案:

答案 0 :(得分:0)

您可能想要直接使用ffmpeg。