我有一个音频数据列表,希望使用IPython.display.Audio
在Jupyter笔记本中显示,以便这些控件从左到右并排流动。我尝试使用ipywidgets.HBox
,但由于IPython.display.Audio
不是Widget
的实例,所以出现错误。
我的音频数据列表如下所示,其中y
是音频数据,sr
是采样率。
data = [(y1, sr1), (y2, sr2), ..., (yN, srN)]
我试图做的是如下所示。
audio_widgets = [display.Audio(audio[0], sr=audio[1]) for audio in data]
audio_hbox = widgets.HBox(audio_widgets) # TraitError happens here
我收到以下错误消息。
TraitError: Element of the 'children' trait of a HBox instance must be a Widget, but a value of <IPython.lib.display.Audio object> <class 'IPython.lib.display.Audio'> was specified.
一种显示音频显示的方法是简单地将它们显示在另一个之上(当音频数据很多时,这会占用很多垂直空间)。
for audio in data:
audio_widget = display.Audio(audio[0], sr=audio[1])
display(audio_widget)
关于如何控制音频控件的布局显示的任何想法?
答案 0 :(得分:4)
您可以将Audio
显示到output widgets中。笔记本中显示良好的所有内容也将在输出窗口小部件中良好显示。您可以使用上下文管理器将输出定向到小部件,请参见下面的示例代码。
from IPython.display import Audio, display
from ipywidgets import widgets
audio_widgets = []
for (audio, sample_rate) in data:
out = widgets.Output()
with out:
display(Audio(data=audio, rate=sample_rate))
audio_widgets.append(out)
widgets.HBox(audio_widgets)
您还可以将print
或display
放入Audio
旁边的同一输出小部件中-可能在每个音频片段旁边有一个标签。
这是一个很晚的答案,但无论如何)。