动态歌词Android,winform动态歌词显示控件(基于ListBox与Lable)

此博客主要用C#代码实现了歌词类及歌词文本类。歌词类包含曲名、艺术家等属性,有创建、加载、保存等方法;歌词文本类包含时间和文本属性,有将字符串转换为歌词文本对象的方法,可用于处理歌词数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[C#] 纯文本查看 复制代码///

/// 歌词类

///

[Serializable()]

public class Lyric

{

///

/// 曲名

///

public string Ti { get; set; }

///

/// 艺术家

///

public string Ar { get; set; }

///

/// 专辑

///

public string Al { get; set; }

///

/// 制作人

///

public string By { get; set; }

///

/// 时间补偿值

///

public int Offset { get; set; }

///

/// 行数

///

public int Count { get { return Words.Count; } }

///

/// 文本集

///

public List Words { get; set; }

///

/// 导出格式

///

public string Export

{

get

{

StringBuilder str = new StringBuilder("");

str.Append(string.Format("[ti:{0}]\n[ar:{1}]\n[al:{2}]\n[by:{3}]\n[offset:{4}]\r\n", Ti, Ar, Al, By, Offset));

foreach (LrcWord i in Words)

{ str.Append(i.Export); }

return str.ToString().Trim();

}

}

///

/// 文本

///

public string Text

{

get

{

StringBuilder str = new StringBuilder("");

foreach (LrcWord i in Words)

{ str.Append(i.Word + "\n"); }

return str.ToString().Trim();

}

}

///

/// Lyrec默认构造

///

public Lyric()

{

Words = new List();

}

///

/// 创建Lrcc歌词

///

///

///

public static Lyric Create(string[] text)

{

Lyric l = new Lyric();

foreach (string i in text)

{

l.Words.Add(new LrcWord(i));

}

return l;

}

///

/// 从字符串加载

///

public static Lyric Parse(string str)

{

str =str.Replace(@"\n", "\n");

string[] words = str.Split('\n');

Lyric l = new Lyric();

l.Ti = GetMiddleText(str, "[ti:", "]");

l.Ar = GetMiddleText(str, "[ar:", "]");

l.Al = GetMiddleText(str, "[al:", "]");

l.By = GetMiddleText(str, "[by:", "]");

l.Offset = ToInt32(GetMiddleText(str, "[offset:", "]"), 0);

l.Words = new List();

foreach (string i in words)

{

LrcWord lw = LrcWord.Parse(i);

if (lw != null)

{ l.Words.Add(lw); }

}

if (l.Words.Count == 0)

{ return null; }

return l;

}

///

/// 从文件加载

///

/// 路径

/// 编码

public static Lyric FromFile(string path, Encoding en)

{

string str = File.ReadAllText(path, en);

return Parse(str);

}

///

/// 保存歌词

///

/// 路径

/// 编码

public void Save(string path, Encoding en)

{

File.Delete(path);

File.AppendAllText(path, Export, en);

}

///

/// 保存为文本

///

/// 路径

/// 编码

public void SaveText(string path, Encoding en)

{

File.Delete(path);

File.AppendAllText(path, Text, en);

}

///

/// 取出中间字符串

///

/// 源字符串

/// 左

/// 右

/// 成功返回结果,失败返回空

private static string GetMiddleText(string str, string left, string right)

{

if (str == null || left == null || right == null) { return ""; }

if (str == "" || left == "" || right == "") { return ""; }

int a = str.IndexOf(left, 0);

int b = str.IndexOf(right, a + 1);

if (a < 0 || b < 0)

{ return ""; }

else

{

a = a + left.Length;

b = b - a;

if (a < 0 || b < 0)

{ return ""; }

return str.Substring(a, b);

}

}

///

/// 字符串转整数

///

/// 字符串

/// 默认值

/// 成功返回结果,失败返回默认值

private static int ToInt32(string str, int defultValue = 0)

{

try { return int.Parse(str); }

catch (Exception)

{ return defultValue; }

}

}

///

/// 歌词文本类

///

[Serializable()]

public class LrcWord

{

///

/// 时间

///

public double Time { get; set; }

///

/// 文本

///

public string Word { get; set; }

///

/// 导出格式

///

public string Export

{ get { return string.Format("[{0}:{1:f3}]{2}\n", ((int)Math.Floor(Time / 60)).ToString("00"), Time % 60, Word); } }

///

/// LrcWord有参构造

///

/// 时间

/// 文本

private LrcWord(double time, string word)

{

Time = time;

Word = word;

}

///

/// LrcWord有参构造

///

/// 文本

public LrcWord(string text)

{ Word = text; }

///

/// 将字符串转换为歌词文本对象

///

///

///

public static LrcWord Parse(string s)

{

try

{

Regex regex = new Regex(@"\[([0-9.:]*)\]+(.*)", RegexOptions.Compiled);

MatchCollection mc = regex.Matches(s.Trim());

double time = TimeSpan.Parse("00:" + mc[0].Groups[1].Value).TotalSeconds;

string word = mc[0].Groups[2].Value;

return new LrcWord(time, word);

}

catch (Exception)

{ return null; }

}

public override string ToString()

{

return Word;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值