Подать потокstream.write() заранееPython

Программы на Python
Ответить
Anonymous
 Подать потокstream.write() заранее

Сообщение Anonymous »

Я перевожу метроном, который я написал для Android, на Python для классических настольных компьютеров.
Под Android буфер имел длину 2 секунды и всегда заполнялся, что означает, что он устойчив к задержке в 2 секунды. .
С Python и Pyaudio я делаю что-то вроде (такт с 4 долями):

Код: Выделить всё

bar = 0
while self.isRunning:
stream.write(beat[bar])
print("beat {} was read".format(bar)
bar += 1
bar %= 4
И посмотрите:

Код: Выделить всё

*sound of beat[0] is played*
beat 0 was read
*sound of beat[1] is played*
beat 1 was read
...
PyAudio ждет, пока его буфер опустеет, прежде чем возобновить работу. "Блокирующий" способ, как я понимаю.
Вместо этого хотелось бы видеть (как в Android)

Код: Выделить всё

*sound of beat[0] is played*
beat 0 was read
beat 1 was read
beat 2 was read
*sound of beat[1] is played*
beat 3 was read
*sound of beat[2] is played*
beat 3 was read
При BPM, равном 120, это означает, что поток всегда имеет 2-секундный буфер, готовый к чтению.
Мой вопрос: есть ли какой-нибудь буфер для подачи буфер одновременно читается?
Когда я пробую метроном на виртуальной машине на дрянном аппаратном хосте, первые удары запаздывают, что меня беспокоит...Я не уверен, что метод обратного вызова позволит это, а поскольку мне нужно воспроизводить определенный звук в зависимости от того, где я нахожусь в структуре (мой метроном обрабатывает сложную структуру) и такте, реализовать это было бы болезненно.

Подробнее здесь: https://stackoverflow.com/questions/405 ... in-advance
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»