Jupyter воспроизводит звук в цикле - PullRequest
1 голос
/ 10 ноября 2019

Я хотел бы воспроизводить звук в блокноте Jupyter каждый раз, когда выполняется определенное условие. После просмотра аналогичных вопросов по stackoverflow, мне удалось почти достичь этого, особенно благодаря этой теме: Воспроизведение аудио в jupyter, в цикле for . Записная книжка выглядела бы примерно так:

import IPython.display as ipd
import ipywidgets as widgets
import numpy as np

output = widgets.Output()
display(output)

# Define sinewave to produce sound
sr = 44100
T = 2 # seconds
t = np.linspace(0, T, int(T*sr), endpoint=False) # sample sine wave
freqs = [329.63,440.0,466.16,554.37,587.33]
for i in range(0,len(freqs)):
    if (i<2):
        x = 0.5*np.sin(2*np.pi*freqs[i]*t)
        with output:        
            ipd.display(ipd.Audio(x, rate=sr,autoplay=True))

Однако основная проблема остается: каждый раз, когда выполняется условие, в ячейке, где отображается вывод, появляется новый виджет;Учитывая, что звук потенциально может воспроизводиться сотни раз, через некоторое время это приводит к значительному замедлению. Кроме того, мне вообще не нужно, чтобы какой-либо виджет отображался вообще, поскольку я просто хочу, чтобы звук воспроизводился автоматически. Я пытался использовать «output.clear_output ()», но слишком раннее выполнение этой процедуры прервет любой воспроизводимый в данный момент звук, и в любом случае, я думаю, что для очистки и перезагрузки виджетов требуются ресурсы, поэтому это не решение, если использовать его таким образом. Есть ли способ просто обновить виджет, чтобы отображался только один? Можно ли сделать это без виджетов?

PS: в конце я хотел бы предоставить онлайн-версию ноутбука через MyBinder, поэтому он также должен работать там.

Редактировать: использование «clear_output (wait = True)» после отображения на дисплее вида работ для коротких звуков. Тем не менее, это не оптимально и, что более важно, не работает, если я хочу, чтобы несколько звуков воспроизводились одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...