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]); }
/// <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; } } }
/// <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()); }
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()); }
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); } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }