Jupyter(IPython)Notebook单元中的多个Audio对象

Ori*_*eto 12 python audio ipython-notebook jupyter

我试图IPython.display.Audio在一个Jupyter Notebook单元格中嵌入多个对象,但由于某种原因,只显示最后一个.

这是一个简单的例子:

import IPython
IPython.display.Audio(url="https://ccrma.stanford.edu/~urinieto/drop/090412-Incendios.mp3")
IPython.display.Audio(url="https://ccrma.stanford.edu/~urinieto/drop/130224-Undertow.mp3")
Run Code Online (Sandbox Code Playgroud)

这仅显示一个(第二个)音频对象.理想情况下,我想将它放在一个for循环中,并在一个单元格中显示多个音频对象.

有任何想法吗?

注意:我在Python 2.7.10上使用IPython 4.0.0运行Jupyter 4.0.6.

Taa*_*aar 22

IPython.display.Audio(...)命令仅创建 "显示"对象(在该特定情况下,Audio该类的子类的对象DisplayObject).

之后,您可以使用与类相关联的此类对象DisplayObject(以及与该类绑定的特定内容Audio)执行基本操作.其中一个动作包括使用该功能显示IPython.display.display.

因此,您的特定目标将通过以下代码实现:

import IPython
IPython.display.display(IPython.display.Audio(url="https://ccrma.stanford.edu/~urinieto/drop/090412-Incendios.mp3"))
IPython.display.display(IPython.display.Audio(url="https://ccrma.stanford.edu/~urinieto/drop/130224-Undertow.mp3"))
Run Code Online (Sandbox Code Playgroud)

相同的机制被用于显示的其他类型(子类)DisplayObject对象:HTML,Markdown,Math,SVG,Javascript,Video,Image等.参见的详细信息.

当你第一次尝试这样做时,有三件事情真的令人困惑(我起初也很困惑):

  • 命令的名称IPython.display.Audio,似乎意味着会显示某些东西; 事实并非如此;

  • 事实上,所有这些多媒体对象统称为"显示"对象,而其中一些永远不会真正"显示",只是嵌入在DOM树中(例如,一个Javascript对象);

  • 事实上,如果你创建这样一个对象并且不使用IPython.display.display它,它将自动由标准IPython交互机制显示,如果它是在单元格中创建的最后一件事 ; 这是混淆的主要原因,因为它让人们认为你不需要使用任何特定的功能来显示"显示对象".