Android音乐播放器中的歌词同步学习分析

本文介绍了如何在Android音乐播放器中实现歌词同步,包括使用子线程处理歌词显示,解析.lrc文件格式,自定义控件的ondraw方法进行歌词刷新,并通过SeekBar控制歌词位置。还讨论了将中文歌曲名转化为拼音以匹配歌词。
摘要由CSDN通过智能技术生成

在网上查了一下资料,感谢 http://www.cr173.com/html/20184_1.html 给了我思路,可以说他提供了最基本的歌词同步的功能,我在其上面添加了自己的修改的代码。

主要是自己为了实现歌词同步,并且通过移动seekbar,改变歌曲的歌词位置。当然还有自己不一样的地方。

首先歌词播放,是要一个子线程来操作,这个子线程负责在找到两段歌词之间的时间差,然后显示当前正在播放的歌词。

1

歌词部分

1.歌词的格式为.lrc 这是有一定格式的,最重要的是[MM:ss,mm]

以白玫瑰.lrc歌词为例


需要对歌词进行解析,歌词的实体类。

MyLrc.java

public class MyLrc implements Comparable<Object>{
	private int time;
	private String lyric;
	public int getTime() {
		return time;
	}
	public void setTime(int time) {
		this.time = time;
	}
	public String getLyric() {
		return lyric;
	}
	public void setLyric(String lyric) {
		this.lyric = lyric;
	}
	//放在set集合中可以看下面要求进行排序
	@Override
	public int compareTo(Object arg0) {
		int later=0;
		if(arg0 instanceof MyLrc)
		{
			later=((MyLrc)arg0).getTime();
		}
		return this.time-later;
	}
	@Override
	public String toString() {
		return this.time+""+this.lyric;
	}
	
}

 实现comparaTo的方法的目的是在把对象放入TreeSet中的时候,按照歌词时间的循序放入,方便之后拿出来。比较使用(我觉得这部很重要,因为后期需要判断拉动SeekBar的时候找到对应的时间的位置)

LrcUtil.java

//对歌词进行解析
public class LrcUtil {

	private static TreeSet<MyLrc> tree;

	// 将对应的lrc文件转化为treeMap,分别对应的时间以及歌词
	public LrcUtil(InputStream musicTitle) {
		TreeSet<MyLrc> treeset = new TreeSet<MyLrc>();
		// 用来存放歌曲的时间和对应的歌词
		InputStreamReader inReader = null;
		BufferedReader reader = null;
		try {
			inReader = new InputStreamReader(musicTitle);
			reader = new BufferedReader(inReader);
			String line = "";
			while ((line = reader.readLine()) != null) {
				// 对那行歌词进行分割,判断,然后存储
				String[] substr = line.split("\\]");
				for (String ss : subs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值