예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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();
        }
예제 #3
0
파일: Lrc.cs 프로젝트: hxdnshx/DMPlugin_DGJ
        /// <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);
        }
예제 #4
0
 /// <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);
 }