我试图在一个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。
答案 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
个对象的其他类型(子类):HTML
,Markdown
,Math
,SVG
,{{1 },Javascript
,Video
等。有关详细信息,请参阅this。
当你第一次尝试这样做时,有三件事情让人感到困惑(我起初也很困惑):
命令Image
的名称,似乎意味着会显示某些内容;情况并非如此;
所有这些多媒体对象被统称为"显示"对象,虽然其中一些从未真正显示",只是嵌入在DOM树中(例如,IPython.display.Audio
对象);
如果你创建了这样一个对象并且没有使用Javascript
,那么它将由标准的IPython交互机制自动显示,如果它是在单元格中创建的最后一件事;这是混淆的主要原因,因为它让人们认为你不需要使用任何特定的功能来显示"显示对象"。