Sum*_*nal 4 ipython python-3.x jupyter
在 jupyter notebook 中播放视频:我这样做:
from IPython.display import *
Audio("linktomp3.mp3", autoplay=True)
这会创建一个类似感觉的音频播放器,您可以播放 mp3。
现在我想解决一件事。我在一个文件夹中有很多 mp3 文件。我想在 jupyter notebook 中一一播放。怎么做?请问有什么帮助吗?
还有一种方法可以调整此功能以播放 .m4a 音乐文件吗?
提前致谢!!
我们可以IPython.display.HTML在 Jupyter 中直接显示 html 代码,您需要做的就是创建一个音频播放列表控制器并将文件名分配给href或srcattr。
我刚刚从HTML5 音频和视频中借用了一个演示以及如何制作播放列表,因为我对网络开发不太熟悉。对 css 样式进行了小的修改,使示例更加直观。作者值得所有赞美!
在文件的同一个父目录下,.ipynb我创建了Musicdir 并将两个专辑目录复制到其中。目录结构如下:
../Music/:
Stille/ ?/
Run Code Online (Sandbox Code Playgroud)
以下代码将加载dir下的所有.mp3文件Music并生成播放列表。
import os
from IPython.display import display,Audio,HTML
playlist_html=""
audio_html=""
music_dir = u'Music'
count=0
for root, dirs, files in os.walk(music_dir):
#print 'root: ' + repr(root)
#print 'dirs: ' + repr(dirs)
#print 'files: ' + repr(files)
for file in files:
if count==0:
playlist_html = u'''<li class="active"><a href="{0}">{1}</a>
</li>\n'''.format(os.path.join(root, file), file)
audio_html = u'''<audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg">
<source type="audio/mp3" src="{}">Sorry, your browser does not support HTML5 audio.
</audio>'''.format(os.path.join(root, file))
else:
playlist_html +=u'''<li><a href="{0}">{1}</a></li>\n'''.format(os.path.join(root, file), file)
count += 1
playlist_html = audio_html + u'''\n<ol id="playlist">\n{}</ol>'''.format(playlist_html)
#print playlist_html
playlist_css = """
<style>
#playlist .active a{color:#CC0000;text-decoration:none;}
#playlist li a:hover{text-decoration:none;}
</style>
"""
playlist_js = """
<script>
var audio;
var playlist;
var tracks;
var current;
init();
function init(){
current = 0;
audio = $('audio');
playlist = $('#playlist');
tracks = playlist.find('li a');
len = tracks.length - 1;
audio[0].volume = .10;
playlist.find('a').click(function(e){
e.preventDefault();
link = $(this);
current = link.parent().index();
run(link, audio[0]);
});
audio[0].addEventListener('ended',function(e){
current++;
if(current == len){
current = 0;
link = playlist.find('a')[0];
}else{
link = playlist.find('a')[current];
}
run($(link),audio[0]);
});
}
function run(link, player){
player.src = link.attr('href');
par = link.parent();
par.addClass('active').siblings().removeClass('active');
audio[0].load();
audio[0].play();
}
</script>
"""
display(HTML(playlist_html))
display(HTML(playlist_css))
display(HTML(playlist_js))
Run Code Online (Sandbox Code Playgroud)
所有这些代码片段所做的就是将 html、css 和 js 代码插入到单元格输出中。href用正确的文件名替换attr 有点麻烦但并不困难。实际上,js 代码可能更难阅读。
Jupyter 中的输出已经足够好了。控制器加载所有文件,可以顺序播放音频文件。
如果您想将代码重构为IPython.core.display.DisplayObject子类,我建议您阅读c4ef808311f2bb84bf4a0a5d3bb980b3d81c373b 上的 ipython/Custom Display Logic.ipynb,还有很多工作要做。
.m4a 支持我在自己的 Jupyter 环境(使用 Chrome)上进行了测试,但它也无法播放.m4a。我猜是因为标签的type属性audio是audio/m4a,Chrome 无法正确识别。
我曾经遇到过这种类似的情况:python - IPython.display.Audio 无法正确处理.ogg文件类型?- 堆栈溢出。根据我的测试,手动更改.m4ato的MIME类型即可audio/mp4解决问题。.m4a在 IPython 中播放文件之前添加此代码片段:
import mimetypes
mimetypes.init()
mimetypes.add_type('audio/mp4', '.m4a')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4092 次 |
| 最近记录: |