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

时间:2015-10-09 23:02:36

标签: python audio ipython-notebook jupyter

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

这是一个简单的例子:

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")

这只显示一个(第二个)音频对象。理想情况下,我想将其置于for循环中,并在单个单元格中显示多个音频对象。

有什么想法吗?

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

1 个答案:

答案 0 :(得分:16)

IPython.display.Audio(...)命令仅创建 a"显示" object(在该特定情况下,类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"))

使用相同的机制显示DisplayObject个对象的其他类型(子类):HTMLMarkdownMathSVG,{{1 },JavascriptVideo等。有关详细信息,请参阅this

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

  • 命令Image的名称,似乎意味着会显示某些内容;情况并非如此;

  • 所有这些多媒体对象被统称为"显示"对象,虽然其中一些从未真正显示",只是嵌入在DOM树中(例如,IPython.display.Audio对象);

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