【发布时间】: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/
我尝试过的
-
python-vlc 有
sound.get_time()以毫秒为单位返回最后更新时间。该命令的问题不在于它仅每半秒左右更新一次[我找到了解决方法],而是它没有返回准确的时间。我可以使用time.monotonic()开始播放计时器。随着时间的推移,get_time()与计时器的变化很大。我得到了 195ms、294ms 和 217ms 的差异。 -
我尝试使用
threading模块使用外部计时器。pydub.AudioSegment[index]似乎没有同步。 -
从 py-vlc 中的
sound.get_time()缩放到 pydub 中的len(sound)。这不能按预期工作。我不能告诉你为什么,但它仍然不同步。 -
使用
sound.get_time()的平均偏移量随时间增加。pydub.AudioSegment[index]似乎没有正确排列。 -
使用
aubio。它只读取 WAV 文件,对于实时分析仪来说,首先转换为 WAV 需要很长时间。
我发现的事情
- 我查看了每首歌曲的时长(以毫秒为单位),pydub 的
len(sound)和 python-vlc 的sound.get_length()通常相差 10 秒左右。
不起作用的事情
- 使用 pydub 的
play()命令。我不喜欢它,因为它非常有限。 - 使用 py-vlc 以外的其他工具来播放音频,VLC 具有许多无法复制的功能。
以前的建议
- 使用How can I extract audio from video with ffmpeg?
- 这不起作用,因为我不想从现有视频文件中提取音频,我正在尝试获取像
pydub.AudioSegment.get_array_of_samples()这样的样本
- 这不起作用,因为我不想从现有视频文件中提取音频,我正在尝试获取像
我很好奇
- 是否有用于 Audacity 的 python 模块?我一直在寻找并找不到它。如果可能的话,我还可以使用其他一些可以与 Audacity 交互的命令行工具[我知道内置的命令行实用程序根本没有做太多事情]
【问题讨论】:
标签: python vlc pydub python-vlc