Что мне нужно
Я работаю над музыкальным плеером с анализатором проб. Моя проблема в том, что в настоящее время я использую pydub для получения сэмплов из песни, но по мере того, как песня становится длиннее, они становятся более рассинхронизированными. Я сделал эти два буквально синхронизированными, pydub просто так получилось, что прочитал их [я даже запустил их одновременно, оба фактически постепенно десинхронизировались с одним только звуком, и более того, по мере того, как песня продолжает играть].
В принципе, есть ли python-vlc, эквивалентный pydub.AudioSegment.get_array_of_samples()
?
Вы можете посмотреть документы python-vlc здесь: https://www.olivieraubert.net/vlc/python-ctypes/doc/
Что я пробовал
python-vlc имеет
sound.get_time()
, который возвращает время последнего обновления в миллисекундах. Проблема с этой командой не в том, что она обновляется каждые полсекунды или около того [я нашел способ обойти это], а в том, что она не возвращает точное время. Я могу запустить таймер, когда он начнет играть, используяtime.monotonic()
. Со временемget_time()
сильно отличается от таймера. У меня разница в 195 мс, 294 мс и 217 мс.Я пробовал использовать внешний таймер с помощью модуля
threading
. Похоже, чтоpydub.AudioSegment[index]
вообще не синхронизируется.Масштабирование от
sound.get_time()
в py-vlc доlen(sound)
в pydub. Это работает не так, как ожидалось. Не могу сказать почему, но он все еще не синхронизирован.Использование
sound.get_time()
со средним смещением, которое увеличивается со временем. Похоже, чтоpydub.AudioSegment[index]
не выстраивается должным образом.Используя
aubio
. Он только читает файлы WAV, и для живого анализатора преобразование в WAV сначала займет слишком много времени.
Вещи, которые я узнал
- Я посмотрел, как долго каждая песня длится в миллисекундах,
len(sound)
для pydub иsound.get_length()
для python-vlc обычно различаются примерно на 10 секунд.
Вещи, которые не работают
- Используя команду pydub
play()
. Мне это не нравится, потому что это очень ограничивает. - Используя что-то еще, кроме py-vlc для воспроизведения звука, VLC имеет множество функций, которые просто невозможно воспроизвести.
Предыдущие предложения
- Use How can I extract audio from video with ffmpeg?
- This won't work because I am not looking to extract audio from an existing video file, I'm trying to get samples like
pydub.AudioSegment.get_array_of_samples()
- This won't work because I am not looking to extract audio from an existing video file, I'm trying to get samples like
мне любопытно
- Есть ли модуль Python для Audacity? Я искал и не нашел. Я также могу использовать другой инструмент командной строки, который может взаимодействовать с Audacity, если это возможно [я знаю, что встроенная утилита командной строки не делает вообще ничего]