android 读取歌词.qrc,Unity读取lrc歌词并显示出来
为什么做lrc歌词呢,其他精确的qrc之类的都是加密的,读取出来是乱码,参照了https://blog.csdn.net/chuan403082010/article/details/61912873
以下是效果,具体没对上的应该是lrc歌词的问题
12.png
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
public class ReadLRC : MonoBehaviour
{
private Text lrcText;
public float offest = 0.1f;
private void Start()
{
lrcText = GetComponent();
GetLrcFile(Application.streamingAssetsPath + "/邓紫棋-盲点.lrc");
}
public List GetLyricListAndTimeList(string lyricText, out List timeA, out List titleA)
{
List lyricArray = new List();
timeA = new List();
titleA = new List();
string[] lineArray = lyricText.Split('\n');//根据分隔出行
for (int i = 0; i < lineArray.Length; i++)
{
string lineStr = lineArray[i];
if (lineStr.Contains("ti") || lineStr.Contains("ar") || lineStr.Contains("al") || lineStr.Contains("by") || lineStr.Contains("offset"))
{//标题
string[] array = lineStr.Split('[', ':', ']');
float f;
if (!float.TryParse(array[array.Length - 2], out f) && array[array.Length - 2] != null)
{
titleA.Add(array[array.Length - 2]);
}
}
else
{//歌词
string[] contentArray = lineStr.Split('[', ']');
for (int j = contentArray.Length - 1; j >= 0; j--)
{
string subStr = contentArray[j];
string newSubStr = subStr.Replace(":", "");
float temp;
if (float.TryParse(newSubStr, out temp))
{
string[] time = subStr.Split(':');
float min;
float.TryParse(time[0], out min);
float sec;
float.TryParse(time[1], out sec);
subStr = string.Format("{0}", (sec + 60 * min));
}
float num = 0f;
if (float.TryParse(subStr, out num))
{
timeA.Add(num);
if (float.TryParse(contentArray[contentArray.Length - 1], out num))
{
lyricArray.Add("");
}
else
{
lyricArray.Add(contentArray[contentArray.Length - 1]);
}
}
}
}
}
return lyricArray;
}
public List SortLyricListAndTimeList(List lyricA, List timeA, out List timeArray)
{
for (int i = 0; i < timeA.Count - 1; i++)
{
for (int j = 0; j < timeA.Count - 1 - i; j++)
{
if (timeA[j] > timeA[j + 1])
{
float temp = timeA[j];
timeA[j] = timeA[j + 1];
timeA[j + 1] = temp;
string tempLyric = lyricA[j];
lyricA[j] = lyricA[j + 1];
lyricA[j + 1] = tempLyric;
}
}
}
timeArray = timeA;
return lyricA;
}
/*
[ti:盲点] 1
[ar:G.E.M. 邓紫棋]2
[al:新的心跳]3
[t_time:(04:36)] 4
[00:00.50]盲点 - G.E.M. 邓紫棋
[00:03.40]词:G.E.M. 邓紫棋
[00:05.55]曲:G.E.M. 邓紫棋
[00:07.45]编曲:Lupo Groinig
[00:09.25]监制:Lupo Groinig
[00:13.70]我数着脚步的声音
[00:20.57]漫无目的地前进
[00:26.50]回家或到处散散心
[00:32.90]我也做不了决定
[00:39.40]生活事业社交关系
[00:45.90]明明都努力上进
[00:52.50]但望着繁忙行事历
[00:57.65]只感觉到空洞的心
[01:03.90]世界我看得再远
*/
//读取lrc歌词文件
public void GetLrcFile(string file)
{
StreamReader sr = new StreamReader(file, Encoding.Default);
string str = sr.ReadToEnd();
List a = new List(); //取得了时间点
List b = new List(); //多少行标题
List c = new List();
List d = new List();//歌词
List e = new List();
d = GetLyricListAndTimeList(str, out a, out b); //输出了时间点和 歌词list
e = SortLyricListAndTimeList(d, a, out c);//得到了每行歌词 和时间点
//这里很乱,我是先达到具体目的,优化以后再考虑
StartCoroutine(ShowLrc(e, c));
}
IEnumerator ShowLrc(List lrc, List t)
{
lrcText.text = lrc[0];
yield return new WaitForSeconds(t[0]);
for (int i = 1; i < lrc.Count; i++)
{
float ts = t[i] - t[i - 1]-offest; //偏移量
yield return new WaitForSeconds(ts);
lrcText.text = lrc[i];
}
}
}
2020年3月5日
有网友反映乱码,那是因为unity的中文 编码必须为UTF-8,在qq音乐下载的lrc歌词需要另存为一下
image.png
@择一城终老_1557
处理乱码这是基础知识吧
android 读取歌词.qrc,Unity读取lrc歌词并显示出来相关推荐
- 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- Android自定义View来实现解析lrc歌词同步滚动、上下拖动、缩放歌词等功能
http://blog.csdn.net/ouyang_peng/article/details/50813419 前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌 ...
- Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
原文地址https://blog.csdn.net/qq446282412/article/details/50813419 前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 ...
- 我的Android进阶之旅------gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能[转]
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- 【我的Android进阶之旅】Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词、卡拉OK高亮的功能
文章目录 前言 一.LRC歌词文件简介 1.什么是LRC歌词文件 2.LRC歌词文件的格式 LRC歌词文件的标签类型 1.标识标签 2.时间标签 二.解析LRC歌词 1.读取出歌词文件 2.解析得到的 ...
- php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是"乱码",自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐 ...
- 学猫叫用计算机歌词,学猫叫歌词 学猫叫Lrc歌词
[ti:学猫叫] [ar:小潘潘/小峰峰] [al:学猫叫] [by:] [offset:0] [00:00.21]学猫叫 - 小潘潘/小峰峰 [00:01.91]词:小峰峰 [00:02.98]曲: ...
- Python将lrc歌词转换为srt字幕格式
使用Python将lrc歌词转换为srt字幕格式 思路 比较简单的文本处理问题 主要注意点: 1. 存在空白时间和无空白时间两种形式的lrc文件,需要分别处理 2. 最后一句的时间段需要单独计算 源码 ...
最新文章
- PHP编译为静态库,Linux下将Tinyxml编译为静态库
- 发布html页面图像不显示不出来,图像不显示htmlimg/
- 给eth0增加一个IP
- IOC容器和Bean的配置实例
- esp32搭建文件服务器,ESP32入门示例 - SD卡Web服务器
- mysql 循环创建列_mysql – 查询列中的循环值
- Spring+Hessian搭建远程方法调用
- UI素材干货|听说UI设计师更喜欢Sketch
- bitnami下mysql配置-包含phpMyAdmin配置
- 框架设计---主体函数
- 朴素贝叶斯模型、推导、拉普拉斯平滑
- 用Java简单实现验证码功能以及校验
- python打印质数(素数)
- 工科数学分析部分知识点整理
- 计算机词汇 音标,计算机词汇带音标word版本.pdf
- Gan 和 StyleGAN 架构
- python小游戏1:大鱼吃小鱼
- ping无盘服务器值高,服务器PING值过高的原因
- 用Python批处理将WORD文件转换成PDF格式(工具:win32com模块)
- 搜狗输入法 - 自定义短语