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

Jan*_*yne 5 python ipython jupyter-notebook

我有一个音频数据列表,我想在 Jupyter 笔记本中显示这些数据,IPython.display.Audio以便这些控件从左向右彼此相邻流动。我尝试使用,ipywidgets.HBox但收到错误,因为IPython.display.Audio不是 a 的实例Widget

我的音频数据列表如下所示,其中y是音频数据,sr是采样率。

data = [(y1, sr1), (y2, sr2), ..., (yN, srN)]
Run Code Online (Sandbox Code Playgroud)

我试图做的是类似以下的事情。

audio_widgets = [display.Audio(audio[0], sr=audio[1]) for audio in data]
audio_hbox = widgets.HBox(audio_widgets) # TraitError happens here
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。

TraitError:HBox 实例的“children”特征的元素必须是 Widget,但指定了 <IPython.lib.display.Audio object> <class 'IPython.lib.display.Audio'> 的值。

显示音频显示的一种方法是简单地将它们显示在另一个之上(当存在大量音频数据时,这会占用大量垂直空间)。

for audio in data:
     audio_widget = display.Audio(audio[0], sr=audio[1])
     display(audio_widget)
Run Code Online (Sandbox Code Playgroud)

关于如何控制音频控件的布局显示有什么想法吗?

ger*_*eth 7

您可以将Audios 显示到输出小部件中。任何在笔记本中良好显示的内容也将在输出小部件中良好显示。您可以使用上下文管理器将输出定向到小部件,请参阅下面的示例代码。

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)
Run Code Online (Sandbox Code Playgroud)

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

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