终于把歌词搞定了,先说说逻辑吧,当加载每一首歌的时候都需要用正则表达式去判断歌词,如果存在则进行时间段取词保存,当需要播放或者列表循环,单曲播放等只要是自动播放或者手动点击加载歌曲是就需要去获取列表中的歌词数值,如果为零则无歌词,如果不为零则加载歌词,显示使用的事textblock,需要出现滚动效果的话就需要匹配时间,根据时间戳去获取歌词,然后向上滚动歌词。上图贴码了:
不过今天晚上对以前的进行了优化,把menu改成了tabcontrol,因为nemu不方面各种功能的实现,把tabcontrol的边框消隐,查了好久才查到这个属性。
不多说了看效果:
前台界面
通过获取歌词和对应的时间保存在结果体中
将歌词路径保存在对应的歌路径文件中
/// <summary>
不过今天晚上对以前的进行了优化,把menu改成了tabcontrol,因为nemu不方面各种功能的实现,把tabcontrol的边框消隐,查了好久才查到这个属性。
不多说了看效果:
前台界面
<Grid >
<Canvas Background="Transparent" >
<Image Source="/MyMusic;component/Images/jun.jpg" Width="396" VerticalAlignment="Stretch" Height="210" Opacity="0.3" Canvas.Left="-12" Canvas.Top="0">
</Image>
<TextBlock Canvas.Left="6" Canvas.Top="225" Height="33" Name="textBlock2" Text="" Width="378" Background="Transparent" TextAlignment="Center" FontWeight="Bold" FontStyle="Italic" FontSize="13" Foreground="Red"><TextBlock.OpacityMask><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="#78DD3E27" Offset="0.041" /><GradientStop Color="Black" Offset="0.976" /></LinearGradientBrush></TextBlock.OpacityMask></TextBlock>
<TextBlock Canvas.Left="6" Canvas.Top="273" Height="32" Name="textBlock3" Text="" Width="378" Background="Transparent" FontWeight="Bold" FontStyle="Italic" TextAlignment="Center" FontSize="13"><TextBlock.Foreground><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="Red" Offset="0.081" /><GradientStop Color="#7FFF0005" Offset="0.878" /></LinearGradientBrush></TextBlock.Foreground></TextBlock>
<TextBlock Canvas.Left="6" Canvas.Top="311" Height="45" Name="textBlock4" Text="" Width="378" Background="Transparent" FontSize="15" TextAlignment="Center" FontStyle="Italic" FontWeight="Bold" Foreground="#FFFFD000"></TextBlock>
<TextBlock Canvas.Left="6" Canvas.Top="362" Height="38" Name="textBlock5" Text="" Width="378" Background="Transparent" FontSize="13" FontStyle="Italic" FontWeight="Bold" TextAlignment="Center"><TextBlock.Foreground><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="White" Offset="0" /><GradientStop Color="#FFDA0020" Offset="1" /></LinearGradientBrush></TextBlock.Foreground></TextBlock>
<TextBlock Canvas.Left="0" Canvas.Top="406" Height="40" Name="textBlock6" Text="" Width="384" Background="Transparent" FontSize="13" TextAlignment="Center" FontStyle="Italic" FontWeight="Bold"><TextBlock.Foreground><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="NavajoWhite" Offset="0.016" /><GradientStop Color="Red" Offset="1" /></LinearGradientBrush></TextBlock.Foreground></TextBlock>
</Canvas>
</Grid>
后台代码
通过获取歌词和对应的时间保存在结果体中
//读取lrc文件
private void ReadLyric(ref finfo f, string filelyric)
{
string lrc = File.ReadAllText(filelyric, System.Text.Encoding.GetEncoding("GB2312"));
Regex rx = new Regex(@"(?<=^\[)(\d+:\d+\.\d+).(.+)(?=$)", RegexOptions.Multiline);
//匹配表达式
foreach (Match x in rx.Matches(lrc))
{
try
{
//读取时间
TimeSpan ti = new TimeSpan(0, int.Parse(x.Value.Substring(0, 2)),
int.Parse(x.Value.Substring(3, 2)));//int.Parse(x.Value.Substring(6, 2))
//读取歌词
string ly = x.Value.Substring(9);
f.Lyric.Add(new lyricinfo() { time = ti, lrc = ly });
}
catch
{
//continue;
}
}
//保存歌词文件
SaveLyric(f.Filename, filelyric);
}
将歌词路径保存在对应的歌路径文件中
/// <summary>
/// 保存歌词路径
/// </summary>