Exemplo n.º 1
0
        public static HyPlayItem AppendNCPlayItem(NCPlayItem ncp)
        {
            AudioInfo ai = new AudioInfo()
            {
                Album                = ncp.Album.name,
                ArtistArr            = ncp.Artist.Select((artist => artist.name)).ToArray(),
                Artist               = string.Join(" / ", ncp.Artist.Select((artist => artist.name))),
                LengthInMilliseconds = ncp.LengthInMilliseconds,
                Picture              = ncp.Album.cover,
                SongName             = ncp.songname,
                tag = ncp.tag
            };
            HyPlayItem hpi = new HyPlayItem()
            {
                AudioInfo  = ai,
                isOnline   = true,
                ItemType   = HyPlayItemType.Netease,
                Name       = ncp.songname,
                NcPlayItem = ncp,
                Path       = ncp.url
            };

            List.Add(hpi);
            return(hpi);
        }
Exemplo n.º 2
0
        public static HyPlayItem AppendNCPlayItem(NCPlayItem ncp)
        {
            var hpi = LoadNCPlayItem(ncp);

            List.Add(hpi);
            return(hpi);
        }
Exemplo n.º 3
0
        private void ButtonPlayAll_OnClick(object sender, RoutedEventArgs e)
        {
            Task.Run((() =>
            {
                Common.Invoke((async() =>
                {
                    HyPlayList.RemoveAllSong();
                    (bool isok, JObject json) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.SongUrl,
                                                                                new Dictionary <string, object>()
                    {
                        { "id", string.Join(',', songs.Select(t => t.sid)) }, { "br", Common.Setting.audioRate }
                    });
                    if (isok)
                    {
                        List <JToken> arr = json["data"].ToList();
                        for (int i = 0; i < songs.Count; i++)
                        {
                            JToken token = arr.Find(jt => jt["id"].ToString() == songs[i].sid);
                            if (!token.HasValues)
                            {
                                continue;
                            }

                            NCSong ncSong = songs[i];

                            string tag = "";
                            if (token["type"].ToString().ToLowerInvariant() == "flac")
                            {
                                tag = "SQ";
                            }
                            else
                            {
                                tag = (token["br"].ToObject <int>() / 1000).ToString() + "k";
                            }
                            NCPlayItem ncp = new NCPlayItem()
                            {
                                tag = tag,
                                Album = ncSong.Album,
                                Artist = ncSong.Artist,
                                subext = token["type"].ToString(),
                                sid = ncSong.sid,
                                songname = ncSong.songname,
                                url = token["url"].ToString(),
                                LengthInMilliseconds = ncSong.LengthInMilliseconds,
                                size = token["size"].ToString(),
                                md5 = token["md5"].ToString()
                            };
                            HyPlayList.AppendNCPlayItem(ncp);
                        }
                        HyPlayList.SongAppendDone();

                        HyPlayList.SongMoveTo(0);
                    }
                }));
            }));
        }
Exemplo n.º 4
0
        public static async Task <HyPlayItem> LoadNCSong(NCSong ncSong)
        {
            (bool isOk, Newtonsoft.Json.Linq.JObject json) = await Common.ncapi.RequestAsync(
                CloudMusicApiProviders.SongUrl,
                new Dictionary <string, object>() { { "id", ncSong.sid }, { "br", Common.Setting.audioRate } });

            if (isOk)
            {
                try
                {
                    if (json["data"][0]["code"].ToString() != "200")
                    {
                        return(null); //未获取到
                    }

                    string tag = "";
                    if (json["data"][0]["type"].ToString().ToLowerInvariant() == "flac")
                    {
                        tag = "SQ";
                    }
                    else
                    {
                        tag = (json["data"][0]["br"].ToObject <int>() / 1000).ToString() + "k";
                    }

                    NCPlayItem ncp = new NCPlayItem()
                    {
                        bitrate              = json["data"][0]["br"].ToObject <int>(),
                        tag                  = tag,
                        Album                = ncSong.Album,
                        Artist               = ncSong.Artist,
                        subext               = json["data"][0]["type"].ToString().ToLowerInvariant(),
                        sid                  = ncSong.sid,
                        songname             = ncSong.songname,
                        url                  = json["data"][0]["url"].ToString(),
                        LengthInMilliseconds = ncSong.LengthInMilliseconds,
                        size                 = json["data"][0]["size"].ToString(),
                        md5                  = json["data"][0]["md5"].ToString()
                    };
                    return(LoadNCPlayItem(ncp));
                }
                catch
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 5
0
        private void ButtonPlayAll_OnClick(object sender, RoutedEventArgs e)
        {
            Task.Run((() =>
            {
                Invoke((async() =>
                {
                    HyPlayList.List.Clear();
                    HyPlayList.RequestSyncPlayList();
                    (bool isok, JObject json) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.SongUrl,
                                                                                new Dictionary <string, object>()
                    {
                        { "id", string.Join(',', songs.Select(t => t.sid)) }
                    });
                    if (isok)
                    {
                        List <JToken> arr = json["data"].ToList();
                        for (int i = 0; i < songs.Count; i++)
                        {
                            JToken token = arr.Find(jt => jt["id"].ToString() == songs[i].sid);
                            if (!token.HasValues)
                            {
                                continue;
                            }

                            NCSong ncSong = songs[i];
                            NCPlayItem ncp = new NCPlayItem()
                            {
                                Album = ncSong.Album,
                                Artist = ncSong.Artist,
                                subext = token["type"].ToString(),
                                sid = ncSong.sid,
                                songname = ncSong.songname,
                                url = token["url"].ToString(),
                                LengthInMilliseconds = ncSong.LengthInMilliseconds,
                                size = token["size"].ToString(),
                                md5 = token["md5"].ToString()
                            };
                            HyPlayList.AppendNCPlayItem(ncp);
                        }
                    }
                    HyPlayList.RequestSyncPlayList();
                }));
            }));
        }
Exemplo n.º 6
0
        public static async void AddDownload(List <NCSong> songs)
        {
            if (!CheckDownloadAbilityAndToast())
            {
                return;
            }
            var(isok, json) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.SongUrl, new Dictionary <string, object>() { { "id", string.Join(',', songs.Select(t => t.sid)) } });

            if (isok)
            {
                if (json["data"][0]["code"].ToString() != "200")
                {
                    return; //未获取到
                }

                int    i        = 0;
                string FileName = "";
                foreach (JToken jToken in json["data"])
                {
                    var song = songs.Find(t => t.sid == jToken["id"].ToString());
                    FileName = string.Join(';', song.Artist.Select(t => t.name)) + " - " + song.songname + "." + jToken["type"].ToString().ToLowerInvariant();
                    var        dop = Downloader.CreateDownload(new Uri(jToken["url"].ToString()), await(await StorageFolder.GetFolderFromPathAsync(Common.Setting.downloadDir)).CreateFileAsync(FileName, CreationCollisionOption.ReplaceExisting));
                    NCPlayItem ncp = new NCPlayItem()
                    {
                        bitrate              = jToken["br"].ToObject <int>(),
                        tag                  = "下载",
                        Album                = song.Album,
                        Artist               = song.Artist,
                        subext               = jToken["type"].ToString().ToLowerInvariant(),
                        sid                  = song.sid,
                        songname             = song.songname,
                        url                  = jToken["url"].ToString(),
                        LengthInMilliseconds = song.LengthInMilliseconds,
                        size                 = jToken["size"].ToString(),
                        md5                  = jToken["md5"].ToString()
                    };
                    DownloadLists[dop] = ncp;
                    var process = new Progress <DownloadOperation>(ProgressCallback);
                    _ = dop.StartAsync().AsTask(process);
                    i++;
                }
                DownloadStartToast(FileName + " 等 " + i.ToString() + " 个文件");
            }
        }
Exemplo n.º 7
0
        /********        播放文件相关        ********/

        public static async Task <HyPlayItem> AppendNCSong(NCSong ncSong)
        {
            (bool isOk, Newtonsoft.Json.Linq.JObject json) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.SongUrl,
                                                                                             new Dictionary <string, object>() { { "id", ncSong.sid }, { "br", 320000 } });

            if (isOk)
            {
                try
                {
                    if (json["data"][0]["code"].ToString() != "200")
                    {
                        return(null); //未获取到
                    }

                    NCPlayItem ncp = new NCPlayItem()
                    {
                        Album                = ncSong.Album,
                        Artist               = ncSong.Artist,
                        subext               = json["data"][0]["type"].ToString(),
                        sid                  = ncSong.sid,
                        songname             = ncSong.songname,
                        url                  = json["data"][0]["url"].ToString(),
                        LengthInMilliseconds = ncSong.LengthInMilliseconds,
                        size                 = json["data"][0]["size"].ToString(),
                        md5                  = json["data"][0]["md5"].ToString()
                    };
                    return(AppendNCPlayItem(ncp));
                }
                catch
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 8
0
        private async void ButtonHeartBeat_OnClick(object sender, RoutedEventArgs e)
        {
            HyPlayList.RemoveAllSong();
            (bool isOk, JObject jsona) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.PlaymodeIntelligenceList,
                                                                         new Dictionary <string, object>() { { "pid", playList.plid }, { "id", intelsong } });

            if (isOk)
            {
                List <NCSong> Songs = new List <NCSong>();
                foreach (JToken token in jsona["data"])
                {
                    NCSong ncSong = new NCSong()
                    {
                        Album = new NCAlbum()
                        {
                            cover = token["songInfo"]["al"]["picUrl"].ToString(),
                            id    = token["songInfo"]["al"]["id"].ToString(),
                            name  = token["songInfo"]["al"]["name"].ToString()
                        },
                        Artist = new List <NCArtist>(),
                        LengthInMilliseconds = double.Parse(token["songInfo"]["dt"].ToString()),
                        sid      = token["songInfo"]["id"].ToString(),
                        songname = token["songInfo"]["name"].ToString()
                    };
                    token["songInfo"]["ar"].ToList().ForEach(t =>
                    {
                        ncSong.Artist.Add(new NCArtist()
                        {
                            id   = t["id"].ToString(),
                            name = t["name"].ToString()
                        });
                    });
                    Songs.Add(ncSong);
                }

                (bool isok, JObject json) = await Common.ncapi.RequestAsync(CloudMusicApiProviders.SongUrl,
                                                                            new Dictionary <string, object>() { { "id", string.Join(",", Songs.Select(t => t.sid)) }, { "br", Common.Setting.audioRate } });

                ;
                if (isok)
                {
                    List <JToken> arr = json["data"].ToList();
                    for (int i = 0; i < Songs.Count; i++)
                    {
                        JToken token = arr.Find(jt => jt["id"].ToString() == Songs[i].sid);
                        if (!token.HasValues)
                        {
                            continue;
                        }

                        NCSong ncSong = Songs[i];

                        string tag = "";
                        if (token["type"].ToString().ToLowerInvariant() == "flac")
                        {
                            tag = "SQ";
                        }
                        else
                        {
                            tag = (token["br"].ToObject <int>() / 1000).ToString() + "k";
                        }

                        NCPlayItem ncp = new NCPlayItem()
                        {
                            tag                  = tag,
                            Album                = ncSong.Album,
                            Artist               = ncSong.Artist,
                            subext               = token["type"].ToString(),
                            sid                  = ncSong.sid,
                            songname             = ncSong.songname,
                            url                  = token["url"].ToString(),
                            LengthInMilliseconds = ncSong.LengthInMilliseconds,
                            size                 = token["size"].ToString(),
                            md5                  = token["md5"].ToString()
                        };
                        HyPlayList.AppendNCPlayItem(ncp);
                    }

                    HyPlayList.SongAppendDone();

                    HyPlayList.SongMoveTo(0);
                }
            }
        }
Exemplo n.º 9
0
        public static async Task <bool> AppendFile(StorageFile sf, bool nocheck163 = false)
        {
            The163KeyStruct mi;

            if (nocheck163 ||
                !The163KeyHelper.TryGetMusicInfo(TagLib.File.Create(new UwpStorageFileAbstraction(sf)).Tag, out mi))
            {
                //TagLib.File afi = TagLib.File.Create(new UwpStorageFileAbstraction(sf), ReadStyle.Average);
                var mdp = await sf.Properties.GetMusicPropertiesAsync();

                string[] contributingArtistsKey = { "System.Music.Artist" };
                IDictionary <string, object> contributingArtistsProperty =
                    await mdp.RetrievePropertiesAsync(contributingArtistsKey);

                string[] contributingArtists = contributingArtistsProperty["System.Music.Artist"] as string[];
                if (contributingArtists is null)
                {
                    contributingArtists = new[] { "未知歌手" };
                }

                AudioInfo ai = new AudioInfo()
                {
                    tag       = "本地",
                    Album     = string.IsNullOrEmpty(mdp.Album) ? "未知专辑" : mdp.Album,
                    ArtistArr = contributingArtists,
                    Artist    = string.IsNullOrEmpty(string.Join('/', contributingArtists))
                        ? "未知歌手"
                        : string.Join('/', contributingArtists),
                    LengthInMilliseconds = mdp.Duration.TotalMilliseconds,
                    SongName             = string.IsNullOrEmpty(mdp.Title) ? sf.DisplayName : mdp.Title,
                    LocalSongFile        = sf
                };

                //记载歌词
                try
                {
                    StorageFile lrcfile =
                        await(await sf.GetParentAsync()).GetFileAsync(Path.ChangeExtension(sf.Name, "lrc"));
                    ai.Lyric = await FileIO.ReadTextAsync(lrcfile);
                }
                catch (Exception)
                {
                }

                HyPlayItem hyPlayItem = new HyPlayItem()
                {
                    AudioInfo = ai,
                    isOnline  = false,
                    ItemType  = HyPlayItemType.Local,
                    Name      = ai.SongName,
                    Path      = sf.Path
                };

                List.Add(hyPlayItem);
                return(true);
            }
            else
            {
                if (string.IsNullOrEmpty(mi.musicName))
                {
                    return(await AppendFile(sf, true));
                }

                NCPlayItem hpi = new NCPlayItem()
                {
                    Album = new NCAlbum()
                    {
                        name  = mi.album,
                        id    = mi.albumId.ToString(),
                        cover = mi.albumPic
                    },
                    bitrate              = mi.bitrate,
                    hasLocalFile         = true,
                    LocalStorageFile     = sf,
                    LengthInMilliseconds = mi.duration,
                    sid      = mi.musicId.ToString(),
                    Artist   = null,
                    md5      = null,
                    size     = sf.GetBasicPropertiesAsync().GetAwaiter().GetResult().Size.ToString(),
                    songname = mi.musicName,
                    tag      = "本地"
                };
                hpi.Artist = mi.artist.Select(t => new NCArtist()
                {
                    name = t[0].ToString(), id = t[1].ToString()
                })
                             .ToList();
                AppendNCPlayItem(hpi);
                return(true);
            }
        }