解析LRC歌词文件readlrc
package com.jikexueyuan.readlrc.main; import com.jikexueyuan.readlrc.utils.Utils; import java.io.File; /**
* Created by Tall on 2015/8/7.
*/
public class Main {
public static void main(String[] args) { File lrcFile = new File("resource/庄心妍-时间会走.lrc"); Utils utils = new Utils(); if (lrcFile.exists()) {
utils.parseLRC(lrcFile);
} else {
System.out.println("LRC文件不存在");
}
}
}
Main
package com.jikexueyuan.readlrc.lrc; /**
* Created by Gaojinhua on 2015/8/8.
*/
public class LRC {
private int timeKey;
private String currentLrc; public LRC(int timeKey, String currentLrc) {
this.currentLrc = currentLrc;
this.timeKey = timeKey;
} public String getLrc() {
return currentLrc;
} public void setLrc(String lrc) {
this.currentLrc = lrc;
} public int getTimeKey() {
return timeKey;
} public void setTime(int timeKey) {
this.timeKey = timeKey;
}
}
LRC
package com.jikexueyuan.readlrc.utils; import com.jikexueyuan.readlrc.lrc.LRC; import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*; /**
* Created by Gaojinhua on 2015/8/8.
*/
public class Utils {
public void parseLRC(File lrcFile) {
String line; int timeKey;
String currentLrc; final Map<Integer, LRC> lrcMap = new LinkedHashMap<Integer, LRC>(); try {
FileInputStream fileInputStream = new FileInputStream(lrcFile);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while ((line = bufferedReader.readLine()) != null) {
timeKey = 60 * Integer.parseInt(line.substring(line.indexOf(":") - 2, line.indexOf(":")))
+ Integer.parseInt(line.substring(line.indexOf(":") + 1, line.indexOf(":") + 3));
currentLrc = line.substring(line.lastIndexOf("]") + 1) + " "; LRC lrc = new LRC(timeKey, currentLrc);
lrcMap.put(lrc.getTimeKey(), lrc);
} final Timer timer = new Timer();
final TimerTask timerTask = new TimerTask() {
@Override
public void run() {
int tempTime = 0;
for (LRC lrc : lrcMap.values()) {
try {
Thread.sleep(1000 * (lrc.getTimeKey() - tempTime));
tempTime = lrc.getTimeKey();
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.printf("\r" + lrc.getLrc());
}
timer.cancel();
//this.cancel();
}
};
timer.schedule(timerTask, new Date()); fileInputStream.close();
inputStreamReader.close();
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Utils
解析LRC歌词文件readlrc的更多相关文章
- Java使用正则表达式解析LRC歌词文件
LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...
- c#解析Lrc歌词文件
看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间格式: 1.标准格式: [分钟:秒.毫秒] 歌词 注释:括号.冒号.点号全都要求 ...
- 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- 如何将lrc歌词文件批量转换为ANSI编码?
有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...
- 浅析LRC歌词文件
[时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...
- 10行代码解析krc歌词文件
互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例 ...
- LRC歌词文件读取代码
/**************************************************/ /*******************-main文件-******************* ...
- C#下载歌词文件
前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...
- lrc歌词文件格式
一.lrc文件有什么作用 lrc文件就是一个文本文件,用来记录歌曲的歌词信息,使得播放歌曲时能够让歌词与声音同步显示,类似于电影字幕那种效果. 心情很丧时我们会听首歌陶冶一下情操,不知你是否注意过音乐 ...
随机推荐
- 高扩展的基于NIO的服务器架构(二)
接上文高扩展的基于NIO的服务器架构 Reactor模式 如下图所示,将不同事件的检测分离开,当一种事件发生时一个事件处理器EventHandler将通知与该事件处理相对应的专用工作线程 采用这种架构 ...
- sqlserver2012
sqlserver2012作死的节奏啊,微软最近怎么了?搞个sqlserver2012死活安装不上,无论如何都是.NET Framework 4报错,机器本身的版本比安装包的高就报错?微软的程序员思维 ...
- ArrayList常用方法
ArrayList常用方法 import java.util.*; public class JIHe04 { // ArrayList add 添加方法 public static void fun ...
- CTF
今天发现了一个神奇的领域CTF……感觉打开了新世界的大门 http://ctf.idf.cn/里面各种有趣的题目0.0
- swift 个人笔记
swift是现代编程语言的综合体,灵活而强大. //http://www.cocoachina.com/newbie/basic/2014/0604/8675.html //语法var 变量,let ...
- Cocos2d-x——Cocos2d-x 屏幕适配总结
本张图以iPhone5为例子,并且采用ResolutionNoBorder的绘制方式(这种方式就是会在原图的基础上出现裁切,一部分图片会显示到屏幕外边去,如AEHD和FBCG就是显示到屏幕外边的内容) ...
- 【转】web测试内容及工具经典总结
基于Web的系统测试在基于Web的系统开发中,如果缺乏严格的过程,我们在开发.发布.实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大.而且,随着基于Web的系统变得越来越复杂,一 ...
- session销毁
session.invalidate(),session.invalidate的销毁是把这个session所带的用户彻底的销毁,这个session跟用户已经紧密联合在一起,所以就一起销毁了,这样就算换 ...
- Adobe Texture Format
ATF : Adobe Texture Format. 这是一种能提供最佳压缩效果的文件格式. ATF文件主要是一个存储有损纹理数据(lossy texture data)的文件容器.它主要使用了两种 ...
- python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
http://my.oschina.net/leejun2005/blog/145911 http://www.cnblogs.com/lulipro/p/5060163.html http://ww ...