/// <summary> /// 关闭歌曲流并释放资源 /// </summary> private static void UnLoad() { timer.Stop(); if (waveout != null) { waveout.Stop(); waveout.Dispose(); } if (FileReader != null) { FileReader.Dispose(); } setVolumeDelegate = null; waveout = null; FileReader = null; lrc = null; TimeSpan t = TimeSpan.FromTicks(0); Center.Mainw.setDisplayTime(t, t); Config.setPlayTime(t, t); Center.Mainw.setPlayPauseButtonIcon(!PlayControl.isPause); }
/// <summary> /// 加载歌曲 /// </summary> /// <param name="itemm">要加载的歌曲</param> private static void Load(SongItem itemm) { if (Config.ControlOtherPlayer) { API.SendKey(System.Windows.Input.Key.MediaStop); } DanmukuReceiver.VoteUids.Clear(); waveout = Create(); FileReader = new Mp3FileReader(itemm._FilePath); var sampleChannel = new SampleChannel(FileReader, true); setVolumeDelegate = vol => sampleChannel.Volume = vol; var postVolumeMeter = new MeteringSampleProvider(sampleChannel); waveout.Init(postVolumeMeter); waveout.PlaybackStopped += Waveout_PlaybackStopped; SetVol(); lrc = itemm._FLyric ?? itemm.getFLyric(); }
/// <summary> /// 获得歌词信息 /// </summary> /// <param name="LrcText">歌词文本</param> /// <returns>返回歌词信息(Lrc实例)</returns> public static Lrc InitLrc(string LrcText) { Lrc lrc = new Lrc(); Dictionary <double, string> dicword = new Dictionary <double, string>(); string[] lines = LrcText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); foreach (string line in lines) { if (line.StartsWith("[ti:")) { lrc.Title = SplitInfo(line); } else if (line.StartsWith("[ar:")) { lrc.Artist = SplitInfo(line); } else if (line.StartsWith("[al:")) { lrc.Album = SplitInfo(line); } else if (line.StartsWith("[by:")) { lrc.LrcBy = SplitInfo(line); } else if (line.StartsWith("[offset:")) { lrc.Offset = SplitInfo(line); } else { try { Regex regexword = new Regex(@".*\](.*)"); Match mcw = regexword.Match(line); string word = mcw.Groups[1].Value; if (word.Replace(" ", "") == "") { continue; // 如果为空歌词则跳过不处理 } Regex regextime = new Regex(@"\[([0-9.:]*)\]", RegexOptions.Compiled); MatchCollection mct = regextime.Matches(line); foreach (Match item in mct) { double time = TimeSpan.Parse("00:" + item.Groups[1].Value).TotalSeconds; dicword.Add(time, word); } } catch { continue; } } } lrc.LrcWord = dicword.OrderBy(t => t.Key).ToDictionary(t => t.Key, p => p.Value); return(lrc); }
/// <summary> /// 从文本歌词解析歌词 /// </summary> /// <param name="lyric"></param> /// <returns>结果</returns> internal Lrc getFLyric(string lyric = "") { if (lyric == "") { lyric = _Lyric; } if (lyric == "") { _FLyric = null; } else { Lrc l = Lrc.InitLrc(lyric); _FLyric = l; } return(_FLyric); }