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的更多相关文章

  1. Java使用正则表达式解析LRC歌词文件

    LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...

  2. c#解析Lrc歌词文件

    看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间格式: 1.标准格式: [分钟:秒.毫秒] 歌词 注释:括号.冒号.点号全都要求 ...

  3. 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  4. 如何将lrc歌词文件批量转换为ANSI编码?

    有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...

  5. 浅析LRC歌词文件

    [时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...

  6. 10行代码解析krc歌词文件

    互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例 ...

  7. LRC歌词文件读取代码

    /**************************************************/ /*******************-main文件-******************* ...

  8. C#下载歌词文件

    前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...

  9. lrc歌词文件格式

    一.lrc文件有什么作用 lrc文件就是一个文本文件,用来记录歌曲的歌词信息,使得播放歌曲时能够让歌词与声音同步显示,类似于电影字幕那种效果. 心情很丧时我们会听首歌陶冶一下情操,不知你是否注意过音乐 ...

随机推荐

  1. Android改变了PDA市场格局

    看到一则消息<联想PDA助力306医院智慧医疗建设>,看完后感慨颇多:"大象"终于开始踩"蚂蚁"了!虽然主观上感觉这种做法很不地道,同时为传统PDA ...

  2. Winform开发框架之权限管理系统

    本文章转载:http://www.cnblogs.com/wuhuacong/archive/2011/05/08/2040620.html 至此,权限管理模块介绍已经完毕,下面给出一个调用例子Dem ...

  3. cocos2d-x 缓动曲线

    转自:http://blog.csdn.net/cocos2der/article/details/7261808 在实现运动中,我们常常需要实现一些加速度或者减速度的效果,cocos2d-x引擎为我 ...

  4. 2015南阳CCPC L - Huatuo's Medicine 水题

    L - Huatuo's Medicine Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description Huatuo was a famous ...

  5. C#小常识集锦(一)--《更锋利的CSharp代码》读书笔记

    ❀.采用类似匈牙利命名法为控件命令,对于其他变量申明则不需要了 e.g. Button btnAdd; e.g. TextBox txtUsername; e.g. ListBox lstFileNa ...

  6. 关于java的JIT知识

    1.JIT的工作原理图  工作原理 当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器.JIT编译器将字节码编译成本机机器代码. 通常javac将程序源码编译, ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. linq小知识总结

    1linq的左连接查询 var boundList = from x in text.S_Outbound join y in text.S_Outbound_Per on x.Shipment_ID ...

  9. 使用Areas(区域)分离ASP.NET MVC 项目

    在使用Areas区域时,如果使用默认路由表,将造成路由表冲突,这种情况需要修改一下区域内<区域名称>AreaRegistration.cs和/App_Start/RouteConfig.a ...

  10. VBA Excel 打印

    1. 设置 页边距.打印区域 With .PageSetup .HeaderMargin = Application.CentimetersToPoints(0.5) .LeftMargin = Ap ...