@Foxik1

Почему звук останавливается на пару миллисекунд а потом продолжает воспроизводиться?

Есть код
import io
import requests
from pydub import AudioSegment
from pydub.playback import play
response = requests.get('', stream=True)

            music = io.BytesIO()

            for chunk in response.iter_content(1024):
                print(len(music.getvalue()))
                if len(music.getvalue()) >= 100000:
                    music.seek(0)

                    audio = AudioSegment.from_file(music, format='mp3')
                    play(audio)

                    music = io.BytesIO()
                music.write(chunk)


Но после исполнения строчки play(audio) воспроизведение останавливается на пару миллисекунд а потом продолжает воспроизводиться, как можно сделать постоянное проигрывание?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Потому что на остальные операции (такие как подгрузка нового чанка, подготовка объектов, и прочее) уходит ненулевое время.
Тебе нужно два потока, и очередь (queue.SimpleQueue или queue.Queue) для связи между ними. Один поток подгружает данные, формирует экземпляры AudioSegment, и подкладывает их в очередь. Другой - только вытаскивает их из очереди и делает play. Тогда если у тебя соединение достаточно быстрое, то очередь будет пополняться быстрее, чем она опустошается.
Но и тогда могут быть проблемы из-за питоновских потоков. Надо экспериментировать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы