IPython.display.Audio无法正确处理“.ogg”文件类型?

IPython.display.Audio无法正确处理“.ogg”文件类型?,python,ipython,mime,jupyter,ogg,Python,Ipython,Mime,Jupyter,Ogg,我用Jupyter做了一些音频分析,并尝试用IPython.display.audio播放.ogg文件。由于PyCharm经常无法打开大的.ipynb文件,我主要使用web浏览器在localhost:8888上查看我的笔记本文件 这张照片是我用Chrome得到的。如您所见,FailToDisplay.ogg是从我的工作中获取的,音频播放栏未激活File-ACDC\uu-\u Back\u In_Black-sample.ogg和song-sample.mp3都是从互联网上下载的。3个文件的完整

我用Jupyter做了一些音频分析,并尝试用
IPython.display.audio
播放
.ogg
文件。由于PyCharm经常无法打开大的
.ipynb
文件,我主要使用web浏览器在
localhost:8888
上查看我的笔记本文件

这张照片是我用Chrome得到的。如您所见,FailToDisplay.ogg是从我的工作中获取的,音频播放栏未激活File-ACDC\uu-\u Back\u In_Black-sample.oggsong-sample.mp3都是从互联网上下载的。3个文件的完整性都经过验证,即它们都可以用音频播放器正确播放

我还用Microsoft Edge和Firefox进行了测试,结果基本相同。2
.ogg
播放栏均处于非活动状态,而
.mp3
播放栏处于活动状态,工作正常。所以我想问题不在于网络浏览器

我用Chrome开发者工具查看了这3个音频播放条的html源代码,它们都是这样的:

<audio controls="controls">
                    <source src="data:None;base64,VERYLONGTEXT" type="None">
                    Your browser does not support the audio element.
                </audio>
不太奇怪。然后我找到这篇博文并测试了我的python MIME类型设置:

>>> import mimetypes
>>> mimetypes.guess_type("foo.ogg")
(None, None)
现在我不知道在这种情况下下下一步该怎么办。这只是Jupyter、IPython或系统范围内的一个bug吗?我在哪里可以改变这种行为

我的Python环境设置是

audioread==2.1.4
ipykernel==4.4.1
ipython==5.1.0
ipython-genutils==0.1.0
ipywidgets==4.1.1
jupyter==1.0.0
jupyter-client==4.3.0
jupyter-console==5.0.0
jupyter-core==4.1.1
librosa==0.4.3
nbconvert==4.2.0
nbformat==4.0.1
notebook==4.2.2
numpy==1.11.1
openpyxl==2.3.2
pydub==0.16.5

既然没人暗示,我想我得一个人工作了

首先查看
IPython.display.audio的源代码:

很明显,如果
mimetypes.guess\u type(“filename.ogg”)[0]
得到
None
,那么我们就得到了
type==None
,这会导致非活动音频控制块

从中我了解到MIME类型可以从文件中加载,也可以通过
mimetypes.add\u type()
动态添加。它还说默认情况下,
mimetypes
将从Windows注册表加载。我试图用一个小实用程序修改
.ogg
的系统范围的MIME类型设置,但它没有反映在
MIME类型上,所以我想我不得不放弃它

最后,我意识到使用
IPython.display.Audio
之前的猴子补丁可能会起作用,它确实起作用:


解决这个问题可能并不完美,但至少它是有效的。现在就这样吧。

好吧,我自己想出来的。
audioread==2.1.4
ipykernel==4.4.1
ipython==5.1.0
ipython-genutils==0.1.0
ipywidgets==4.1.1
jupyter==1.0.0
jupyter-client==4.3.0
jupyter-console==5.0.0
jupyter-core==4.1.1
librosa==0.4.3
nbconvert==4.2.0
nbformat==4.0.1
notebook==4.2.2
numpy==1.11.1
openpyxl==2.3.2
pydub==0.16.5
def _repr_html_(self):
    src = """
            <audio controls="controls" {autoplay}>
                <source src="{src}" type="{type}" />
                Your browser does not support the audio element.
            </audio>
          """
    return src.format(src=self.src_attr(),type=self.mimetype, autoplay=self.autoplay_attr())
    if self.filename is not None:
        self.mimetype = mimetypes.guess_type(self.filename)[0]
    elif self.url is not None:
        self.mimetype = mimetypes.guess_type(self.url)[0]
    else:
        self.mimetype = "audio/wav"