Jupyter (IPython) Notebook 单元格中有多个 Audio 对象
Posted
技术标签:
【中文标题】Jupyter (IPython) Notebook 单元格中有多个 Audio 对象【英文标题】:More than one Audio object in a Jupyter (IPython) Notebook cell 【发布时间】:2015-10-09 23:02:36 【问题描述】:我试图在单个 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。
【问题讨论】:
重复使用IPython.display.display
函数可以在单个单元格的显示区域显示多个“显示”对象。有关示例,请参见 this。
Taar,不幸的是,这在使用 Audio 对象时不起作用(或者至少我无法弄清楚)。不过,谢谢。
我这样做了: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"))
它似乎正在工作(在 Windows 7 上使用 python 3.4 + IPython 3.2...)
太棒了,就是这样!您愿意将此作为答案发布吗?谢谢。
【参考方案1】:
IPython.display.Audio(...)
命令仅创建一个“显示”对象(在这种特殊情况下,是 DisplayObject
类的子类 Audio
的对象)。
之后,您可以对此类对象执行基本操作,该对象与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
、javascript
、Video
、Image
等. 详情请见this。
当你第一次尝试这样做时,三件事真的很令人困惑(我一开始也很困惑):
命令名称IPython.display.Audio
,似乎暗示会显示一些东西;事实并非如此;
所有这些多媒体对象统称为“显示”对象,而其中一些从未真正“显示”过,只是嵌入在 DOM 树中(例如,Javascript
对象);
【讨论】:
真正有教育意义的答案。我希望有更多这样的。以上是关于Jupyter (IPython) Notebook 单元格中有多个 Audio 对象的主要内容,如果未能解决你的问题,请参考以下文章
目前在 Jupyter/iPython 中动态更新绘图的正确方法是啥?