在 IPython notebook 中自动播放声音

新手上路,请多包涵

我经常在我的 IPython 笔记本中运行长时间运行的单元格。我希望笔记本在单元格执行完毕后自动发出蜂鸣声或播放声音。在 iPython notebook 中有什么方法可以做到这一点,或者我可以在单元格的末尾放置一些命令来自动播放声音?

如果有任何不同,我正在使用 Chrome。

原文由 Thomas Johnson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 859
2 个回答

长话短说

在笔记本的顶部

from IPython.display import Audio
sound_file = './sound/beep.wav'

sound_file 应该指向您计算机上的一个文件,或者可以从互联网访问。

然后稍后,在长时间运行的单元格的末尾

<code that takes a long time>

Audio(sound_file, autoplay=True)

此方法使用新版本的 iPython/Jupyter 中内置的 Audio 标签。

旧版本注意事项

没有 Audio 标签的旧版本可以使用以下方法。

把它放在一个单元格中,然后在你想播放你的声音之前运行它:

 from IPython.display import HTML
from base64 import b64encode

path_to_audio = "/path/to/snd/my-sound.mp3"
audio_type = "mp3"

sound = open(path_to_audio, "rb").read()
sound_encoded = b64encode(sound)
sound_tag = """
    <audio id="beep" controls src="data:audio/{1};base64,{0}">
    </audio>""".format(sound_encoded, audio_type)

play_beep = """
<script type="text/javascript">
    var audio = document.getElementById("beep");
    audio.play();
</script>
"""

HTML(sound_tag)

在你想在完成时发出声音的单元格的末尾放这个:

 HTML(play_beep)

怎么运行的:

它使用 iPython 内置的 openread 方法从文件系统读取文件。然后它将其编码为 base64。然后它创建一个 ID 为 beep 的音频标签,并将 base64 数据注入其中。最后的设置创建了一个播放声音的小脚本标签。

此方法应该适用于任何支持 HTML5 音频标签的浏览器。

注意:如果您不想在笔记本中显示音频控件,只需从名为 sound_tag 的变量中删除 controls 属性—

原文由 Waylon Flinn 发布,翻译遵循 CC BY-SA 4.0 许可协议

我最喜欢的解决方案(不需要外部模块):

 import os
os.system("printf '\a'") # or '\7'

适用于 OS X。

然而 DaveP 的评论仍然适用:播放声音的不是浏览器而是服务器。

原文由 Arthur 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题