HTML5实现歌词同步

作者: Pursue | 来源:发表于2015-06-12 14:35 被阅读3701次

开篇

HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就可以实现视频播放。类似地,在HTML5中也有对应的处理音频文件的标签,那就是audio标签。

在线Demo

audio标签

实现一个audio标签非常简单,对应的html代码如下:

<audio id="player" 
    src="music/我在人民广场吃炸鸡.mp3" 
    autoplay controls>
</audio>

上述代码不需要一行js脚本就能实现音乐播放。其中有三个常用的属性,分别为:音频源文件,是否自动播放以及是否显示播放器控件。由于没有任何ui的展现,audio标签在chrome的默认风格如下图:

可以看出,一个基本的播放器还包括了显示当前时间,播放,暂停,快进快退等功能。这些功能都决定了如何很好的实现歌词同步(后续介绍)。

既然这么容易就就能播放音乐,那作为一项前端的技术,audio标签在各个浏览器中的兼容性又是怎样的呢?
Browser Compatibility

可以看出,各大浏览器对audio标签基本功能都支持,只是在细微的特性上表现不一,但是这些基本的功能已经足已做出一个好的播放器。

歌词

一般标准的lyric文件是由[时间]内容的tag标签组成,如下图:

为了更精确的展现每个字在每句歌词中的时间,又出现了特殊的歌词形式,如下:

这种歌词的格式的最好例子就是QRC歌词文件(如QQ音乐播放器):

为了描述简单,本文仅以最简单的lyric格式作为说明,讲解如何分离歌词进行歌词同步。如下,为一首歌曲的歌词文件:

现对该歌词文件作一下处理:

  • 1.以行为单位拆分每一句歌词
  • 2.将没句歌词的时间tag和内容分离
  • 3.将时间转换为分钟

转换过程较为简单,只需一个简单的正则匹配,过程如下:

分离出来的[时间,内容]可以与audio当前的播放时间进行对比,若需要显示对应的歌词则将该行高亮,同时每次更新对应DOM节点的top则可在视觉上达到滚动效果。

制作歌词ui。

  • 1.定义一个现实歌词的区域,添加audio控件
  • 2.添加背景图片,制作标题边框
  • 3.添加歌词

到此,歌词同步以及ui绘制全部完毕。

在线Demo

Blog同步

相关文章

  • HTML5实现歌词同步

    开篇 HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就可以实现视频播放。类似地,在H...

  • iOS-QQ音乐播放器的简单实现

    一. QQ音乐播放器的简单实现 每个音乐播放器的实现都大致相同,个人认为难点在于歌曲播放与Slider的同步,歌词...

  • 歌词同步LRCView

    效果图 没有需求背景,纯碎是清明在家无聊 主要的几个功能 歌词解析 播放/暂停(跟随播放器) seek操作 以中间...

  • 歌词同步歌曲

    html代码 css样式 JS代码 PHP代码 下载地址: https://github.com/lyyqxdi/...

  • JS中同步心得

    不使用co模块 异步代码 2种方式 then 实现同步 async 实现同步 co模块实现同步(co+yield)...

  • Java并发编程艺术(四) Java中的锁

    1、Lock接口 2、队列同步器 同步器是实现锁的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。 同步器是...

  • html5 audio之分享版音乐播放器

    关于项目 该项目基于HTML5 audio api 完成的一个分享版简易音乐播放器。 关于歌词 Lrc歌词文件:大...

  • 只利用js实现导入和导出文件

    导出文件 利用a标签和HTML5中的Blob对象实现: 导入文件 利用表单和HTML5中的FileReader对象实现:

  • 备份服务之实时同步备份(sersync)

    实时同步备份方法1)利用脚本实现实时同步2)利用软件实现实时同步 实时同步备份原理 存储服务器 --...

  • 实现拖拽

    原生js实现 HTML5原生实现:拖拽draggable属性、DataTranfers对象

网友评论

  • guanalex:github上怎么没有源码了呢?
    Pursue:@guanliulong 有啊
    Pursue:开篇就给出了在线版啊
  • 1f68089a1213:你这个用的是h5的track标签实现的歌词展示,还是用js手动实现的?
    Pursue:开头就说了呀,用的audio标签
  • hubsul_nvtag:http://www.cnblogs.com/gccbuaa/p/7081848.html
    是你吗?还是被盗了
    Pursue:谢谢,确实被盗了,图片链接是我的博客。
  • 93bd56cbe73d:兄弟.喜欢你做的啊.但是demo的地址里面那几个下载下来没啊
    Pursue:亲测可下啊
  • c1044ae4fc16:但歌词没在图片里面啊
    Pursue:你得自己下载歌词文件啊
  • c1044ae4fc16:哥 我按照你的写了
  • 44fbd27b9f34:做的是不错哈,可是现在看不见代码袄,大侠怎么才能看见代码奥,不仅能学习歌词还能学习html5自适应奥
    Pursue:@齐小岳 文章一开头我就给出了demo的地址,里面可以fork那个demo的github repo
  • 沉思故事:不错不错。我喜欢。。做得好。。我能参考 :grin:

本文标题:HTML5实现歌词同步

本文链接:https://www.haomeiwen.com/subject/givjqttx.html