HTML5实现歌词同步

摘要:
例如,可以使用一个简单的视频标签来播放视频。在HTML5中,还有一个用于处理音频文件的相应标记。也就是说,音频标签在线Demoaudio标签非常容易实现音频标签。上面的代码不需要一行js脚本就可以实现音乐播放。chrome中音频标签的默认样式如下图所示:主播放器还包括显示当前时间。这些功能都决定了如何实现歌词的同步(可能会引入)。
开篇

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

在线Demo

audio标签

实现一个audio标签非常easy,相应的html代码例如以下:

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

上述代码不须要一行js脚本就能实现音乐播放。当中有三个经常使用的属性,分别为:音频源文件,是否自己主动播放以及是否显示播放器控件。

因为没有不论什么ui的展现,audio标签在chrome的默认风格例如以下图:

HTML5实现歌词同步第1张

能够看出,一个主要的播放器还包含了显示当前时间。播放,暂停,快进快退等功能。这些功能都决定了怎样非常好的实现歌词同步(兴许介绍)。

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

HTML5实现歌词同步第2张

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

歌词

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

HTML5实现歌词同步第3张

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

HTML5实现歌词同步第4张

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

HTML5实现歌词同步第5张

为了描写叙述简单,本文仅以最简单的lyric格式作为说明。解说怎样分离歌词进行歌词同步。

例如以下,为一首歌曲的歌词文件:

HTML5实现歌词同步第6张

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

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

转换过程较为简单,仅仅需一个简单的正则匹配,步骤例如以下:

HTML5实现歌词同步第7张

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

制作歌词ui。
  • 1.定义一个现实歌词的区域,加入audio控件

HTML5实现歌词同步第8张

  • 2.加入背景图片,制作标题边框

HTML5实现歌词同步第9张

  • 3.加入歌词

HTML5实现歌词同步第10张

到此。歌词同步以及ui绘制所有完成。

在线Demo

PS:CSDN的markdown样式太水了,能够看看以下其它的链接。

Blog同步

简书同步

免责声明:文章转载自《HTML5实现歌词同步》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kafka消息的处理机制(五)Delphi dbgrideh颜色设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java中生成唯一ID的方法

有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID。 UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法。UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software...

Django——缓存机制

一、缓存介绍 缓存就是将常用的一些数据保存在内存或者们擦车中,在一定时间内,如果有请求访问这些数据的时候,则不用去服务器操作数据库渲染,直接缓存中获取,节约时间,增加访问速度,环节服务器压力 二、Django中的6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存 Memcache缓存 三、Django缓存配置 1.2.1...

KML 入门

KML向导      KML是一种在Earth Browser(比如Google Earth,Google Maps,Google Maps for mobile)用于显示地理数据的文件格式。KML用使用一种可以嵌套元素和标记的结构并且基于XML标准。所有的这些标签都是大小写敏感的并且必须精确的出现在KML2.2Reference中.这个参考手册指出哪些标...

js实现之--防抖节流【理解+代码】

防抖:     理解:在车站上车,人员上满了车才发走重点是人员上满触发一次。     场景:实时搜索,拖拽。     实现:         //每一次都要清空定时器,重新设置上计时器值,使得计时器每一次都重新开始,直到最后满足条件并且等待delay时间后,才开始执行handler函数。 // func是用户传入需要防抖的函数 // wait是等待时间 c...

linux命令行自动化重签名ipa例子

命令行重签名ipa教程 开心签名支持命令行重签,Windows、Linux、Mac版本都可以进行命令行重签。 工具下载 命令行签名包括些功能 用户登录管理 应用签名 应用管理 时间锁管理 1、用户登录管理 登录命名行,先创建账号或者登录才能进行重签名! 登录及创建账号,(初次输入运行自动创建账号密码) ./ausign_linux -email 852...

执行js-----Selenium快速入门(十四)

  Selenium能够执行js,这使得Selenium拥有更为强大的能力。既然能执行js,那么js能做的事,Selenium应该大部分也能做。这应该得益于JavascriptExecutor这个接口,而ChromeDriver, EdgeDriver, EventFiringWebDriver, FirefoxDriver, InternetExplor...