示例#1
0
        //Playlist creation from Audio Features
        public async Task <ActionResult> NewAdvPlaylist(AdvTrackCalc adv)
        {
            var g = adv.GenreList.ToArray();

            var user = await GetCurrentUser();

            var advTrack = new AdvTrack()
            {
                Acousticness     = adv.AvgAcousticness,
                Danceability     = adv.AvgDance,
                Energy           = adv.AvgEnergy,
                Instrumentalness = adv.AvgInstrumentalness,
                Liveness         = adv.AvgLiveness,
                Loudness         = adv.AvgLoudness,
                Speechiness      = adv.AvgSpeechiness,
                Tempo            = adv.AvgTempo,
                Valence          = adv.AvgValence,
                UserId           = user.Id,
                GenreList        = adv.GenreList,
                Genre            = string.Join(",", g)
            };

            return(PartialView("_AdvTrackFeatures", advTrack));
        }
示例#2
0
        /// <summary>
        /// Get AdvTrackCalc from a playlist href
        /// </summary>
        /// <param name="href"></param>
        /// <returns></returns>
        public async Task <AdvTrackCalc> GetAdvAudioFeatures(string href)
        {
            var advTrackCalc = new AdvTrackCalc();
            var allArtId     = new List <string>();
            var allArt       = new List <ArtistFull>();
            var testTrack    = new List <AdvTrack>();
            var res          = await GetPlaylistTracks("https://api.spotify.com/v1/playlists/" + href);

            var tracks = new List <string>();

            foreach (var t in res)
            {
                tracks.Add(t.Track.Id);
                testTrack.Add(new AdvTrack()
                {
                    Id     = t.Track.Id,
                    Artist = t.Track.Artists.FirstOrDefault().Name,
                    Name   = t.Track.Name
                });
                allArtId.Add(t.Track.Artists.FirstOrDefault().Id);
            }

            foreach (var id in allArtId)
            {
                allArt.Add(await GetArtistFull(id));
            }

            foreach (var art in allArt)
            {
                foreach (var g in art.Genres)
                {
                    if (!advTrackCalc.GenreCount.ContainsKey(g))
                    {
                        advTrackCalc.GenreCount.Add(g, 0);
                    }
                    if (advTrackCalc.GenreCount.ContainsKey(g))
                    {
                        advTrackCalc.GenreCount[g]++;
                    }
                }
            }

            var genreList = advTrackCalc.GenreCount.ToList();

            genreList.Sort((x, y) => x.Value.CompareTo(y.Value));

            advTrackCalc.GenreCount.Clear();

            var limit = 5;

            if (genreList.Count > limit)
            {
                genreList.RemoveRange(0, genreList.Count - limit);
            }


            foreach (var g in genreList)
            {
                advTrackCalc.GenreCount.Add(g.Key, g.Value);
            }

            //Jesus this is ugly

            var advTracks = await GetAudioFeatures(tracks.ToArray());

            advTrackCalc.Total = advTracks.Count;
            foreach (var track in advTracks)
            {
                foreach (var t in testTrack)
                {
                    if (track.Id == t.Id)
                    {
                        track.Name   = t.Name;
                        track.Artist = t.Artist;
                    }
                }
                advTrackCalc.Acousticness.Add(track.Acousticness);
                advTrackCalc.TotAcousticness += track.Acousticness;
                advTrackCalc.Dance.Add(track.Danceability);
                advTrackCalc.TotDance += track.Danceability;
                advTrackCalc.Energy.Add(track.Energy);
                advTrackCalc.TotEnergy += track.Energy;
                advTrackCalc.Key.Add(track.Key);
                advTrackCalc.TotKey += track.Key;
                advTrackCalc.Mode.Add(track.Mode);
                advTrackCalc.TotMode += track.Mode;
                advTrackCalc.Loudness.Add(track.Loudness);
                advTrackCalc.TotLoudness += track.Loudness;
                advTrackCalc.Speechiness.Add(track.Speechiness);
                advTrackCalc.TotSpeechiness += track.Speechiness;
                advTrackCalc.Instrumentalness.Add(track.Instrumentalness);
                advTrackCalc.TotInstrumentalness += track.Instrumentalness;
                advTrackCalc.Liveness.Add(track.Liveness);
                advTrackCalc.TotLiveness += track.Liveness;
                advTrackCalc.Valence.Add(track.Valence);
                advTrackCalc.TotValence += track.Valence;
                advTrackCalc.Duration.Add(track.Duration_ms);
                advTrackCalc.TotDuration += track.Duration_ms;
                advTrackCalc.Tempo.Add(track.Tempo);
                advTrackCalc.TotTempo += track.Tempo;
            }
            advTrackCalc.Tracks = advTracks;

            advTrackCalc.AvgAcousticness     = (advTrackCalc.TotAcousticness / advTrackCalc.Total);
            advTrackCalc.AvgDance            = (advTrackCalc.TotDance / advTrackCalc.Total);
            advTrackCalc.AvgEnergy           = (advTrackCalc.TotEnergy / advTrackCalc.Total);
            advTrackCalc.AvgKey              = (advTrackCalc.TotKey / advTrackCalc.Total);
            advTrackCalc.AvgMode             = (advTrackCalc.TotMode / advTrackCalc.Total);
            advTrackCalc.AvgLoudness         = (advTrackCalc.TotLoudness / advTrackCalc.Total);
            advTrackCalc.AvgSpeechiness      = (advTrackCalc.TotSpeechiness / advTrackCalc.Total);
            advTrackCalc.AvgInstrumentalness = (advTrackCalc.TotInstrumentalness / advTrackCalc.Total);
            advTrackCalc.AvgLiveness         = (advTrackCalc.TotLiveness / advTrackCalc.Total);
            advTrackCalc.AvgLoudness         = (advTrackCalc.TotLoudness / advTrackCalc.Total);
            advTrackCalc.AvgValence          = (advTrackCalc.TotValence / advTrackCalc.Total);
            advTrackCalc.AvgDuration         = (advTrackCalc.TotDuration / advTrackCalc.Total);
            advTrackCalc.AvgTempo            = (advTrackCalc.TotTempo / advTrackCalc.Total);

            advTrackCalc.StdAcousticness     = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotAcousticness / advTrackCalc.Total, advTrackCalc.Acousticness);
            advTrackCalc.StdDance            = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotDance / advTrackCalc.Total, advTrackCalc.Dance);
            advTrackCalc.StdEnergy           = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotEnergy / advTrackCalc.Total, advTrackCalc.Energy);
            advTrackCalc.StdKey              = (int?)advTrackCalc.GetStdDev(advTrackCalc.TotKey / advTrackCalc.Total, advTrackCalc.Key);
            advTrackCalc.StdMode             = (int?)advTrackCalc.GetStdDev(advTrackCalc.TotMode / advTrackCalc.Total, advTrackCalc.Mode);
            advTrackCalc.StdLoudness         = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotLoudness / advTrackCalc.Total, advTrackCalc.Loudness);
            advTrackCalc.StdSpeechiness      = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotSpeechiness / advTrackCalc.Total, advTrackCalc.Speechiness);
            advTrackCalc.StdInstrumentalness = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotInstrumentalness / advTrackCalc.Total, advTrackCalc.Instrumentalness);
            advTrackCalc.StdLiveness         = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotLiveness / advTrackCalc.Total, advTrackCalc.Liveness);
            advTrackCalc.StdLoudness         = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotLoudness / advTrackCalc.Total, advTrackCalc.Loudness);
            advTrackCalc.StdValence          = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotValence / advTrackCalc.Total, advTrackCalc.Valence);
            advTrackCalc.StdDuration         = (int?)advTrackCalc.GetStdDev(advTrackCalc.TotDuration / advTrackCalc.Total, advTrackCalc.Duration);
            advTrackCalc.StdTempo            = (float?)advTrackCalc.GetStdDev(advTrackCalc.TotTempo / advTrackCalc.Total, advTrackCalc.Tempo);

            return(advTrackCalc);
        }