private LyricInfo _GetLyric(string copyrightId, bool useCache = true)
 {
     if (!useCache || !LyricCache.ContainsKey(copyrightId))
     {
         LyricInfo lyric = MiguMusicApi.GetLyric(copyrightId);
         LyricCache[copyrightId] = lyric;
     }
     return(LyricCache[copyrightId]);
 }
 private LyricInfo _GetLyric(long id, bool useCache = true)
 {
     if (!useCache || !LyricCache.ContainsKey(id))
     {
         LyricInfo lyric = NeteaseMusicApi.GetLyric(id);
         LyricCache[id] = lyric;
     }
     return(LyricCache[id]);
 }
示例#3
0
 /// <summary>
 /// 改变歌词到指定索引
 /// </summary>
 /// <param name="lyricItems">歌词文本集合</param>
 /// <param name="index">索引</param>
 /// <param name="lyricInfo">歌词信息</param>
 internal static void ChangeLyric(Text[] lyricItems, int index, LyricInfo lyricInfo)
 {
     for (int i = 0; i < lyricItems.Length; i++)
     {
         int indexTemp = i - 3 + index;
         if (indexTemp < 0)
         {
             //歌名、歌手、专辑
             if (indexTemp == -3)
             {
                 if (!string.IsNullOrEmpty(lyricInfo.singerName))
                 {
                     lyricItems[i].text = lyricInfo.singerName;
                 }
                 else
                 {
                     lyricItems[i].text = string.Empty;
                 }
             }
             else if (indexTemp == -2)
             {
                 if (!string.IsNullOrEmpty(lyricInfo.songName))
                 {
                     lyricItems[i].text = lyricInfo.songName;
                 }
                 else
                 {
                     lyricItems[i].text = string.Empty;
                 }
             }
             else if (indexTemp == -1)
             {
                 if (!string.IsNullOrEmpty(lyricInfo.album))
                 {
                     lyricItems[i].text = lyricInfo.album;
                 }
                 else
                 {
                     lyricItems[i].text = string.Empty;
                 }
             }
         }
         else if (indexTemp >= lyricInfo.lyrics.Count)
         {
             lyricItems[i].text = string.Empty;
         }
         else
         {
             lyricItems[i].text = lyricInfo.lyrics[indexTemp].lyricContent;
         }
     }
 }
示例#4
0
 /// <summary>
 /// 下一句歌词
 /// </summary>
 /// <param name="lyricItems">歌词文本集合</param>
 /// <param name="index">索引</param>
 /// <param name="lyricInfo">歌词信息</param>
 internal static void NextLyric(Text[] lyricItems, int index, LyricInfo lyricInfo)
 {
     for (int i = 0; i < lyricItems.Length; i++)
     {
         if (i != lyricItems.Length - 1)
         {
             lyricItems[i].text = lyricItems[i + 1].text;
         }
         else
         {
             lyricItems[i].text = index + 4 >= lyricInfo.lyrics.Count ? string.Empty : lyricInfo.lyrics[index + 4].lyricContent;
         }
     }
 }
        protected override string GetLyricById(string copyrightId)
        {
            LyricInfo lyric = null;

            try
            {
                lyric = _GetLyric(copyrightId);
            }
            catch (Exception Ex)
            {
                Log($"获取歌词失败了喵:{Ex.Message}");
            }
            return(lyric?.GetLyricText());
        }
示例#6
0
        protected override string GetLyric(SongItem songItem)
        {
            LyricInfo lyric = null;

            try
            {
                lyric = _GetLyric(Convert.ToString(songItem.SongId));
            }
            catch (Exception Ex)
            {
                Log($"获取歌词失败了喵:{Ex.Message}");
            }
            return(lyric?.GetLyricText());
        }
        protected override string GetLyric(SongItem songItem)
        {
            LyricInfo lyric = null;

            try
            {
                lyric = _GetLyric(songItem.SongId);
            }
            catch (WebException e)
            {
                Log($"获取歌词失败了喵:{e.Message}\r\n这是由于网络原因导致获取失败, 如果多次出现, 请检查你的网络连接喵。");
            }
            catch (Exception e)
            {
                Log($"获取歌词失败了喵:{e.Message}");
            }
            return(lyric?.GetLyricText());
        }
        protected override string GetLyricById(string Id, string albumId = "")
        {
            long      id    = long.Parse(Id);
            LyricInfo lyric = null;

            try
            {
                lyric = _GetLyric(id);
            }
            catch (WebException e)
            {
                Log($"获取歌词失败了喵:{e.Message}\r\n这是由于网络原因导致获取失败, 如果多次出现, 请检查你的网络连接喵。");
            }
            catch (Exception e)
            {
                Log($"获取歌词失败了喵:{e.Message}");
            }
            return(lyric?.GetLyricText());
        }
示例#9
0
        void lrcDld_SelectSong(object sender, EventArgs e)
        {
            XmlNodeList list = sender as XmlNodeList;

            AddItemToListBox(this.matchedLrcListBox, "id                    歌手                  歌名", new SolidColorBrush(Colors.DarkGreen), false);
            if (list != null)
            {
                foreach (XmlNode node in list)
                {
                    LyricInfo l = new LyricInfo(node);
                    LyricList.Add(l);
                    AddItemToListBox(this.matchedLrcListBox, l.ToString(), new SolidColorBrush(Colors.Blue), true);
                }
                if (matchedLrcListBox.Items.Count == 1)
                {
                    AddItemToListBox(this.matchedLrcListBox, "没有搜索到歌词", new SolidColorBrush(Colors.Red), false);
                }
            }
        }
示例#10
0
 /// <summary>
 /// 初始化歌词
 /// </summary>
 /// <param name="lyricItems">歌词文本集合</param>
 /// <param name="lyricInfo">歌词信息</param>
 internal static void InitLyric(Text[] lyricItems, LyricInfo lyricInfo)
 {
     if (!string.IsNullOrEmpty(lyricInfo.singerName))
     {
         lyricItems[0].text = lyricInfo.singerName;
     }
     if (!string.IsNullOrEmpty(lyricInfo.songName))
     {
         lyricItems[1].text = lyricInfo.songName;
     }
     if (!string.IsNullOrEmpty(lyricInfo.album))
     {
         lyricItems[2].text = lyricInfo.album;
     }
     for (int i = 3; i < lyricItems.Length; i++)
     {
         //安全检查:防止歌词少于3句
         int index = i - 3;
         lyricItems[i].text = lyricInfo.lyrics[index] == null ? string.Empty : lyricInfo.lyrics[index].lyricContent;
     }
 }
 protected override SongInfo Search(string keyword)
 {
     try
     {
         MiguMusic.SongInfo song  = MiguMusicApi.SearchSong(keyword);
         LyricInfo          lyric = null;
         try
         {
             lyric = _GetLyric(song.CopyrightId);
         }
         catch (Exception Ex)
         {
             Log($"获取歌词失败了喵:{Ex.Message}");
         }
         return(new SongInfo(this, song.CopyrightId, song.Name, new string[] { song.Artist }, lyric?.GetLyricText()));
     }
     catch (Exception Ex)
     {
         Log($"搜索单曲失败了喵:{Ex.Message}");
     }
     return(null);
 }
示例#12
0
        /// <summary>
        /// 改变歌词
        /// </summary>
        /// <param name="songtime">歌曲时间</param>
        internal static void ChangeLyric(float songtime)
        {
            LyricInfo lyricInfo = ModelManager.Instance.GetLogicDatas.LyricInfo;
            int       index     = -1;

            for (int i = 0; i < lyricInfo.lyrics.Count; i++)
            {
                if (lyricInfo.lyrics[i].lyricTime >= songtime)
                {
                    index = i;
                    break;
                }
            }
            if (index == -1)
            {
                return;
            }
            LogicDatas  logicDatas  = ModelManager.Instance.GetLogicDatas;
            ScenesDatas scenesDatas = ModelManager.Instance.GetScenesDatas;

            logicDatas.Index = index;
            UILyricControl.ChangeLyric(scenesDatas.LyricItems, logicDatas.Index, logicDatas.LyricInfo);
        }
示例#13
0
        /// <summary>
        /// 获取给定单曲ID的歌词
        /// </summary>
        /// <exception cref="NotImplementedException"/>
        /// <param name="songId">单曲ID</param>
        public static LyricInfo GetLyric(long songId)
        {
            IDictionary <string, object> data = new Dictionary <string, object>
            {
                ["csrf_token"] = "",
                ["id"]         = songId.ToString(),
                ["lv"]         = -1,
                ["tv"]         = -1
            };

            CryptoHelper.Encrypted encrypted = CryptoHelper.WebApiEncrypt(data);
            string  json = HttpHelper.HttpPost("https://music.163.com/weapi/song/lyric", encrypted.GetFormdata(), userAgent: DefaultUserAgent);
            JObject j    = JObject.Parse(json);

            if (j["code"].ToObject <int>() == 200)
            {
                string    lyricText           = j["lrc"]?["lyric"]?.ToString();
                string    translatedLyricText = j["tlyric"]?["lyric"]?.ToString();
                LyricInfo lyric = null;
                if (!string.IsNullOrEmpty(lyricText))
                {
                    lyric = new LyricInfo(lyricText);
                }
                if (!string.IsNullOrEmpty(translatedLyricText))
                {
                    lyric.AppendLrc(translatedLyricText);
                }
                return(lyric);
            }
            else
            {
                NotImplementedException exception = new NotImplementedException($"未知的服务器返回");
                exception.Data.Add("Response", j.ToString());
                throw exception;
            }
        }
 protected override SongInfo Search(string keyword)
 {
     try
     {
         NeteaseMusic.SongInfo[] songs = MainConfig.Instance.LoginSession.LoginStatus ?
                                         NeteaseMusicApi.SearchSongs(MainConfig.Instance.LoginSession, keyword, 1) :
                                         NeteaseMusicApi.SearchSongs(keyword, 1);
         NeteaseMusic.SongInfo song = songs.FirstOrDefault();
         if (song?.CanPlay == true)
         {
             LyricInfo lyric = null;
             try
             {
                 lyric = _GetLyric(song.Id);
             }
             catch (Exception e)
             {
                 Log($"获取歌词失败了喵:{e.Message}");
             }
             return(new SongInfo(this, PlatformType.NeteaseMusic, song.Id.ToString(), song.Name, song.Artists.Select(p => p.Name).ToArray(), Convert.ToString(song.Album.Id), lyric?.GetLyricText()));
         }
         else
         {
             Log($"{song.ArtistNames} - {song.Name} : 暂无版权喵");
         }
     }
     catch (WebException e)
     {
         Log($"搜索单曲失败了喵:{e.Message}\r\n这是由于网络原因导致搜索失败, 如果多次出现, 请检查你的网络连接喵。");
     }
     catch (Exception e)
     {
         Log($"搜索单曲失败了喵:{e.Message}");
     }
     return(null);
 }
示例#15
0
        /// <summary>
        /// 解析函数
        /// </summary>
        /// <param name="content">文件绝对路径</param>
        internal static LyricInfo ParseLyricFunc(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                return(null);
            }
            string[]     lyricsTemp     = ParseLyric.SplitString(content);
            string       singerNameTemp = string.Empty;
            string       songNameTemp   = string.Empty;
            string       albumTemp      = string.Empty;
            List <Lyric> lyrics         = new List <Lyric>();

            Lyric  lyricTemp = new Lyric();
            int    leftTag;
            int    rightTag;
            string timeTemp;

            string[] arrayTime;
            float    temp;
            bool     isResult;

            for (int i = 0; i < lyricsTemp.Length; i++)
            {
                //歌手
                if (lyricsTemp[i].Contains(AR))
                {
                    singerNameTemp = lyricsTemp[i].Substring(4, lyricsTemp[i].Length - 5);
                }
                //歌名
                else if (lyricsTemp[i].Contains(TI))
                {
                    songNameTemp = lyricsTemp[i].Substring(4, lyricsTemp[i].Length - 5);
                }
                //专辑
                else if (lyricsTemp[i].Contains(AL))
                {
                    albumTemp = lyricsTemp[i].Substring(4, lyricsTemp[i].Length - 5);
                }
                //歌词
                else if (lyricsTemp[i].Contains(LEFTSQUAREBRZCKETS))
                {
                    leftTag  = lyricsTemp[i].IndexOf(LEFTSQUAREBRZCKETS);
                    rightTag = lyricsTemp[i].IndexOf(RIGHTSQUAREBRZCKETS);
                    if (lyricsTemp[i].Length - 1 <= rightTag)
                    {
                        continue;
                    }

                    timeTemp     = lyricsTemp[i].Substring(leftTag + 1, rightTag - (leftTag + 1));
                    arrayTime    = new string[3];
                    arrayTime[0] = timeTemp.Substring(0, 2);
                    arrayTime[1] = timeTemp.Substring(3, 2);
                    arrayTime[2] = timeTemp.Substring(6, 2);
                    lyricTemp    = new Lyric();

                    //分
                    isResult             = float.TryParse(arrayTime[0], out temp);
                    lyricTemp.lyricTime += isResult ? temp * 60f : 0f;

                    //秒
                    isResult             = float.TryParse(arrayTime[1], out temp);
                    lyricTemp.lyricTime += isResult ? temp : 0f;

                    //毫秒
                    isResult             = float.TryParse(arrayTime[2], out temp);
                    lyricTemp.lyricTime += isResult ? temp * 0.01f : 0f;

                    if (lyricsTemp[i].Length <= rightTag + 1)
                    {
                        lyricTemp.lyricContent = string.Empty;
                    }
                    else
                    {
                        lyricTemp.lyricContent = lyricsTemp[i].Substring(rightTag + 1, lyricsTemp[i].Length - (rightTag + 1));
                    }
                    lyrics.Add(lyricTemp);
                }
            }

            LyricInfo lyricInfo = new LyricInfo(singerNameTemp, songNameTemp, albumTemp, lyrics);

            return(lyricInfo);
        }