android 音乐播放器关于歌词的处理

本文介绍了在Android音乐播放器中处理歌词的方法,包括解析.lrc和.txt格式的歌词文件,创建Lyrc类保存数据,按时间戳排序,并计算每行歌词停留时间。通过自定义TextView实现歌词高亮显示,以及如何在歌词处理中适应快进、快退和倍速播放。提供了一个可直接使用的歌词处理方案。
摘要由CSDN通过智能技术生成

         当我们制作音乐播放器中我觉得歌词的处理是比较难的一块, 对于音乐播放和媒体控制我们可以使用MediaPlayer来搞定,它提供了媒体控制的接口,使得我们对于媒体控制来说变得比较简单。但对于显示歌词来说就比较复杂了一点,例如让歌词一个字一个字高亮、快进时控制歌词处理或者倍速播放时歌词的处理等等, 这里我想介绍简单让一行歌词高亮显示, 等这行歌词唱完,让下一行歌词高亮显示。

1. 解析歌词文件

常见的歌词文件有:.lrc 和 .txt格式, 内容格式为:[00:02.59] 飘洋过海来看你

所以我们先要去解析歌词文件, 定义一个类去保存每行解析出来的数据。

public class Lyric {
	public String lricString;
	public int sleepTime;
	public int timePoint;
}
我们对照着 "[00:02.59] 飘洋过海来看你" 来看, lrcString保存的是"飘洋过海来看你", sleepTime保存的是这句歌词播放时间, 就是下一句歌词开始播的时间减去本句歌词播放的时间,timePoint就是将 “[00:02.59]” 时间文本解析出来转换成的秒数。


现在我们开始解析歌词文件然后将数据保存到Lyrc中

public class LrcUtils {
	private static List<Lyric> lyricList;

	/**
	 * 读取文件
	 */
	public static List<Lyric> readLRC(File f) {
		try {
			if (f == null || !f.exists()) {
				lyricList = null;
			} else {
				lyricList = new Vector<Lyric>();
				InputStream is = new BufferedInputStream(new FileInputStream(f));
				BufferedReader br = new BufferedReader(new InputStreamReader(
						is, getCharset(f)));
				String strTemp = "";
				while ((strTemp = br.readLine()) != null) {
					strTemp = <span style="font-family:Arial, Helvetica, sans-serif;font-size:10px;">processLRC</span>(strTemp);
				}
				br.close();
				is.close();
				// 对歌词进行排序
				Collections.sort(lyricList, new Sort());
				// 计算每行歌词的停留时间
				for (int i = 0; i < lyricList.size(); i++) {

					Lyrc one = lyricList.get(i);
					if (i + 1 < lyricList.size()) {
						Lyric two = lyricList.get(i + 1);
						one.sleepTime = two.timePoint - one.timePoint;
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return lyricList;
	}

	/**
	 * 处理一行内容
	 */
	private static String processLRC(String text) {
		try {
			int pos1 = text.indexOf("[");
			int pos2 = text.indexOf("]");

			if (pos1 >= 0 && pos2 != -1) {
				Long time[] = new Long[getPossiblyTagCount(te
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值