如何解决使用 `ipywidgets` 更新 `IPython.display.Audio` 播放的音频信号
我正在尝试让 IPython
的音频功能根据某些 Jupyter 小部件的状态播放不同的内容。那可能吗?例如,我想允许用户选择要播放的信号的频率。为此,我想出了这个:
import ipywidgets as widgets
import IPython
import scipy.io.wavfile
def write_wav(freq):
sampling_rate = 44_100
t = np.linspace(0.,1.,sampling_rate)
amplitude = np.iinfo(np.int16).max
signal = amplitude*np.cos(2*np.pi*freq*t)
scipy.io.wavfile.write('signal.wav',sampling_rate,signal.astype(np.int16))
# initial signal
write_wav(200)
player = IPython.display.Audio('signal.wav')
def f(freq: float):
global player
write_wav(freq)
player.reload()
print(freq)
freq_slider_widget = widgets.IntSlider(min=200.,max=400.,value=200.,description='freq')
out = widgets.interactive_output(f,{'freq': freq_slider_widget})
IPython.display.display(freq_slider_widget,out,player)
这可能不是一个非常优雅的解决方案(尤其是波形文件写入部分),但我希望它能够工作,因为每次波形文件被调用时 reload
都会在 player
小部件上被调用更新。然而,signal
播放的 IPython.display.Audio
永远不会改变(总是最初的)。有什么线索吗?还有别的方法吗?
干杯。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。