gpt4 book ai didi

python - Jupyter 循环播放声音

转载 作者:行者123 更新时间:2023-12-05 08:06:45 26 4
gpt4 key购买 nike

每次满足特定条件时,我都想在 jupyter notebook 中播放声音。在 stackoverflow 上浏览了类似的问题后,我几乎实现了这一点,特别感谢这个线程:Playing audio in jupyter, in a for loop .笔记本看起来像这样:

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()”,但过早这样做会中断当前播放的任何声音,而且我猜它需要资源来不断清除和重新加载小部件,所以如果以这种方式使用它不是解决方案。有没有办法只更新小部件以便只显示一个小部件?是否可以在没有小部件的情况下完成这项工作?

P.S:最后我想通过 MyBinder 提供笔记本的在线版本,所以它也应该在那里工作。

编辑:在显示短声音的显示类型后使用“clear_output(wait=True)”。尽管如此,这仍然不是最佳选择,更重要的是,如果我想同时播放多个声音,这是行不通的。

最佳答案

刚好看到这个

存在更清洁的解决方案

  1. 定义一个输出小部件到您重定向所有音频输出的地方

output = widgets.Output()

  1. 每次都清除该小部件
   with output:
clear_output()
synth(f)
  1. 将输出小部件添加到布局

widgets.VBox([widgets.Box(buttons),output])

关于python - Jupyter 循环播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com