如何在Jupyter笔记本中布置IPython.display.Audio对象的列表?

时间:2018-09-28 03:14:34

标签: python ipython jupyter-notebook

我有一个音频数据列表,希望使用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)

关于如何控制音频控件的布局显示的任何想法?

1 个答案:

答案 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)

您还可以将printdisplay放入Audio旁边的同一输出小部件中-可能在每个音频片段旁边有一个标签。

这是一个很晚的答案,但无论如何)。