使用node实现歌词滚动输出

运用fs,path,iconv三个模块实现歌词滚动打印.
// 动态显示歌词

const fs = require(‘fs’);
const path = require(‘path’);
const iconv = require(‘iconv-lite’);

//获取字幕文件路径
fs.readFile(path.join(__dirname, ‘./../lyrics/血染的风采.lrc’), (error, data) => {
var lines = iconv.decode(data, ‘gbk’).split(‘\n’);
// console.log(lines.length);
var regex = /[(\d{2}):(\d{2}).(\d{2})]\s(.+)/;

var begin = new Date().getTime();
// 遍历
lines.forEach((line) => {
// [00:32.67] 也许我告别 将不再回来
var matches = regex.exec(line);
if (matches) {
var m = parseFloat(matches[1]);
var s = parseFloat(matches[2]);
var f = parseFloat(matches[3]);
var lyric = matches[4]; // 当前行歌词不是立即执行
// 由于下达输出任务的时刻不同
var offset = new Date().getTime() - begin;
setTimeout(() => {
console.log(lyric);
}, m * 60 * 1000 + s * 1000 + f - offset);
} else {
// 不是一行歌词
console.log(line);
}
});
});
首先定义3个常量,将模块导入。接着调用fs方法的API(readFile),写一个路径方法和箭头函数.
用iconv方法把gbk解码(windows默认编码是gbk)换成字符串,然后赋值给局部变量lines
再写一个正则赋值给regex变量。将date对象实列化
局部变量lines写了一个遍历方法forEach然后将箭头函数作为参数传递进去,箭头函数有一个参数,是用来接收lines的值.
再定义一个matches变量用以校对正则表达式,只保留经正则表达式过滤的参数
写一个if判断,定义三个float局部变量用以接收matches的时间,还有一个变量接收matches的字符串
由于代码执行需要一定的时间,所以与歌词实际时间稍有不偏差,所以要定义两个对象,在相减得到偏移值
在写一个setTimeout函数,把上面的分秒毫(偏移量)加进去,得到滚动显示的时间。由于每个时间差各自不同,所以不能简单粗暴的直接写上一个number值.
每到一个时间点,触发一次setTimeout元素这样反复输出,达到歌词滚动效果


**

最后……最后给各位程序猿/媛们来一波鸡汤,BAT我都不扶,就服他。

**

width="640" height="498" src="https://v.qq.com/iframe/player.html?vid=x0551efvwvn&tiny=0&auto=0" allowfullscreen="">

使用node实现歌词滚动输出相关推荐

  1. 原生js实现歌词滚动以及卡拉OK效果

    干货转自网易实践者社区,感谢作者[严跃杰] [歌词滚动效果] 滚动歌词比较常见的一种歌词显示方式,今天我们来讨论如何通过原生js来完成一个简单的滚动歌词实现. 一般来说,滚动歌词有如下几项需求: 1. ...

  2. 歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例...

    歌词数据解析.歌词滚动.歌词进度控制功能的实现(基于js-base64.lyric-parser.better-scroll) 1.需求分析 后台歌词接口返回的数据如下(base64字符串): W3R ...

  3. 歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例

    歌词数据解析.歌词滚动.歌词进度控制功能的实现(基于js-base64.lyric-parser.better-scroll) 1.需求分析: 后台歌词接口返回的数据如下(base64字符串): W3 ...

  4. C#/音乐播放器/带进度条/歌词滚动、颜色变化/桌面应用程序设计

    用基本C#知识实现制作一个音乐播放器 前言 写这个博客并不是说我的作品多么高级或完美,只是希望能在一些功能方面给你们一些启发,能帮助到你们做出真正好的程序,这就足够了 话不多说,让我们开始吧~~~ 截 ...

  5. VUE获取网易云音乐接口,并实现歌词滚动效果

    VUE获取网易云音乐接口,并实现歌词滚动效果 最近在捣腾个人博客,加了个播放音乐的模块,所以在这里记录一下歌曲播放歌词实时滚动效果的实现,顺便总结加深一下对各个知识点的理解. GitHub地址 演示地 ...

  6. jquery实现歌词滚动

    jquery实现歌词滚动 1.css  /* CSS Document */* {margin: 0;padding: 0;font-size: 12px; }body {background: no ...

  7. JS原生---歌词滚动效果案例

    [开门见山] 实现目标: 需要让歌词列表随着播放的时间更新而滚动,即实时的跟随歌曲的进度而滚动 效果: 需要事先准备的东西: 1.音频(mp3格式): 2.歌词(详细): 先展示html和css的实现 ...

  8. 前端实战复习——歌词滚动

    歌词滚动 此处展示为html的demo 思路 首先歌词单独为div 歌词整体滚动,设置wrap为div 歌词上移使用移动wrap位置,所以需要设置wrap,position为absolute. 歌词高 ...

  9. java 滚动歌词_歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例...

    歌词数据解析.歌词滚动.歌词进度控制功能的实现(基于js-base64.lyric-parser.better-scroll) 1.需求分析 后台歌词接口返回的数据如下(base64字符串): W3R ...

最新文章

  1. 如何处理海量数据(上):从并发编程到分布式系统
  2. ABAP 标准培训教程 BC400 学习笔记之三:ABAP 编程语言的特性和基本构成要素
  3. python discuz搜索api_python如何模拟搜索引擎分词
  4. 什么是5G?居然有人用漫画把它讲得如此接地气!
  5. linux中的定时器检测按键,STM32单片机利用定时器实现按键采集
  6. vue音乐项目歌手页面滚动、吸顶效果
  7. Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
  8. 《交互式程序设计 第2版》一第2章 编程基础
  9. Lightroom Classic 教程,如何在 Lightroom 中裁剪并修齐照片?
  10. Struts2-01-配置文件
  11. 使用bind()和connect()函数
  12. Linux服务器 屏蔽国外IP访问及简单的防CC攻击拦截
  13. STM8S103重映射
  14. [Spring实战系列](2)Maven创建Spring-HelloWorld项目
  15. PS 仿制图章 轻松换支付宝赞赏码 GIF动态图手把手教你
  16. 神经网络分析教学目标,神经网络分析教学反思
  17. 一文弄懂printf函数从用户态到内核态的执行流程
  18. 课程设计:公交线路管理系统
  19. mysql游戏名称_MySQL 游戏排行榜
  20. SM30表维护自动更新值

热门文章

  1. 打工随思录---过客
  2. Anaconda安装下载-亲测详细版
  3. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...
  4. 羊了个羊微信小程序开发丨源码交付
  5. 【VMware】虚拟机中给Linux设置ip——解决在linux中设置了ip地址,却还是连不上的问题
  6. Linux磁盘管理:磁盘分区的分配和格式化磁盘
  7. Jmeter 之 Beanshell
  8. Android koin
  9. 从ST官网获取最新的标准外设库
  10. 计算机储存在哪里去找,电脑保存文件到哪里找