Ejemplo n.º 1
0
        /// <summary>
        /// Get a cached songs details by searching the cache
        /// </summary>
        /// <param name="songID"></param>
        /// <returns></returns>
        public SongDetails Get(string songID)
        {
            var folder = Search(songID);

            if (folder == null)
            {
                if (Logger.logCache)
                {
                    Logger.Log("Cache does not contain {0}", songID);
                }

                return(null);
            }

            var cachedfile = folder + "/" + songID;

            SongDetails details = JsonConvert.DeserializeObject <SongDetails>(File.ReadAllText(cachedfile + ".json"));

            details.albumArt = Image.FromFile(cachedfile + ".jpeg");

            if (Logger.logCache)
            {
                Logger.Log("Read from cache: {0}/{1}", Path.GetFileName(folder), songID);
            }

            return(details);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Loads a cached version of a file
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public SongDetails Load(string filepath, string songID)
        {
            string cachedfile = cachedir + Path.DirectorySeparatorChar + SanitizeFilename(Path.GetFileNameWithoutExtension(filepath)) + Path.DirectorySeparatorChar + SanitizeFilename(songID);

            if (File.Exists(cachedfile + ".json"))
            {
                //Read song details from json
                SongDetails details = JsonConvert.DeserializeObject <SongDetails>(File.ReadAllText(cachedfile + ".json"));

                //Read album art from jpeg
                details.albumArt = Image.FromFile(cachedfile + ".jpeg");

                if (Logger.logCache)
                {
                    Logger.Log("Read from cache: {0}/{1}", Path.GetFileName(filepath), songID);
                }

                //Return loaded object
                return(details);
            }
            else if (Logger.logCache)
            {
                Logger.Log("Cache for {0} does not contain {1}", SanitizeFilename(Path.GetFileNameWithoutExtension(filepath)), SanitizeFilename(songID));
            }

            return(null);
        }
Ejemplo n.º 3
0
 public void Initialize()
 {
     _ = SongDetails.Init().ContinueWith(async x =>
     {
         this._songDetails = await x;
         this._init        = true;
     });
 }
Ejemplo n.º 4
0
        public static SongDetails createAsong(Mp3_Container container, DataGridViewRow row)
        {
            SongDetails song = new SongDetails(row.Cells[1].Value.ToString(), row.Cells[3].Value.ToString(), null,
                                               row.Cells[4].Value.ToString(), row.Cells[7].Value.ToString(), row.Cells[2].Value.ToString(),
                                               int.Parse(row.Cells[9].Value.ToString()), long.Parse(row.Cells[8].Value.ToString()),
                                               row.Cells[10].Value.ToString(), row.Cells[5].Value.ToString(), row.Cells[6].Value.ToString());

            return(song);
        }
Ejemplo n.º 5
0
    protected override void SelectItem(object sender, SelectionChangedEventArgs e)
    {
        MainWindow  window = (MainWindow)Application.Current.MainWindow;
        Songs       s      = (Songs)ItemsContainer.SelectedItem;
        SongDetails detail = new SongDetails(s.Id);
        MainView    view   = (MainView)window.MainFrame.Content;

        detail.setCurrentPlaylist((Playlists)view.PlaylistListBox.SelectedItem);
        view.ActivityFrame.Navigate(detail);
    }
Ejemplo n.º 6
0
        public HttpResponseMessage StartScrobble(SongDetails song)
        {
            if (!ModelState.IsValid)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            _lastFmService.StartScrobbleBash(song);
            return(new HttpResponseMessage(HttpStatusCode.OK));
        }
Ejemplo n.º 7
0
        public static string SongDetailsDisplay(SongDetails song)
        {
            string toReturn = "null";

            if (song != null)
            {
                toReturn = $"{song.ArtistName} - {song.SongName}";
            }

            return(toReturn);
        }
Ejemplo n.º 8
0
        public SongDetails Get(string SongID)
        {
            string q = @"SELECT * FROM songs WHERE songid = @songid LIMIT 1";

            using (var cmd = Connection.CreateCommand())
            {
                cmd.CommandText = q;
                cmd.Parameters.AddWithValue("@songid", SongID);

                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var sd = new SongDetails
                        {
                            psarcFileHash = ReadField <string>(reader, "psarcFileHash"),
                            songID        = ReadField <string>(reader, "songid"),
                            songName      = ReadField <string>(reader, "songname"),
                            artistName    = ReadField <string>(reader, "artistname"),
                            albumName     = ReadField <string>(reader, "albumname"),
                            songLength    = (float)ReadField <double>(reader, "songLength"),
                            albumYear     = (int)ReadField <long>(reader, "albumYear"),
                            arrangements  = JsonConvert.DeserializeObject <List <ArrangementDetails> >(ReadField <string>(reader, "arrangements")),
                            albumArt      = null,

                            toolkit = new ToolkitDetails
                            {
                                version         = ReadField <string>(reader, "toolkit_version"),
                                author          = ReadField <string>(reader, "toolkit_author"),
                                package_version = ReadField <string>(reader, "toolkit_package_version"),
                                comment         = ReadField <string>(reader, "toolkit_comment")
                            }
                        };

                        try
                        {
                            var blob = ReadField <byte[]>(reader, "album_art");

                            using (var ms = new MemoryStream(blob))
                            {
                                sd.albumArt = Image.FromStream(ms);
                            }
                        }
                        catch
                        {
                        }

                        return(sd);
                    }
                }
            }

            return(null);
        }
Ejemplo n.º 9
0
        public async Task <string> UpdateNowPlaying()
        {
            var pandoraInfo = _playerService.GetCurrentSongInfo();
            var song        = new SongDetails()
            {
                Album  = pandoraInfo.Album,
                Artist = pandoraInfo.Artist,
                Song   = pandoraInfo.Song
            };

            return(await _lastFmService.UpdateNowPlaying(song));
        }
Ejemplo n.º 10
0
        public static SongDetails createSelectedSong(Mp3_Container container)
        {
            SongDetails song = new SongDetails(container.gui.songList.SelectedRows[0].Cells[1].Value.ToString(),
                                               container.gui.songList.SelectedRows[0].Cells[3].Value.ToString(), null,
                                               container.gui.songList.SelectedRows[0].Cells[4].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[7].Value.ToString(),
                                               container.gui.songList.SelectedRows[0].Cells[2].Value.ToString(),
                                               Convert.ToInt32(container.gui.songList.SelectedRows[0].Cells[9].Value.ToString()),
                                               Convert.ToInt64(container.gui.songList.SelectedRows[0].Cells[8].Value.ToString()), container.gui.songList.SelectedRows[0].Cells[10].Value.ToString(),
                                               container.gui.songList.SelectedRows[0].Cells[5].Value.ToString(), container.gui.songList.SelectedRows[0].Cells[6].Value.ToString());

            return(song);
        }
Ejemplo n.º 11
0
        public string StartScrobble()
        {
            var pandoraInfo = PandoraService.GetCurrentSongInfo();
            var song        = new SongDetails()
            {
                Album  = pandoraInfo.Album,
                Artist = pandoraInfo.Artist,
                Song   = pandoraInfo.Song
            };

            return(LastFMService.StartScrobbleBash(song));
        }
Ejemplo n.º 12
0
        public async Task <string> StartScrobble()
        {
            var pandoraInfo = _playerService.GetCurrentSongInfo();
            var song        = new SongDetails()
            {
                Album  = pandoraInfo.Album,
                Artist = pandoraInfo.Artist,
                Song   = pandoraInfo.Song
            };

            return(await _lastFmService.StartScrobble(song));
        }
Ejemplo n.º 13
0
        public async Task SongChange(DeezerState deezerState)
        {
            if (File.Exists("deezer.json"))
            {
                var lastSong = _playerFactoryService.GetCurrentSongInfo();

                if ((DateTime.UtcNow - lastSong.LastModifed) > TimeSpan.FromMinutes(1))
                {
                    await _lastFMService.StartScrobble(new SongDetails
                    {
                        Album  = lastSong.Album,
                        Song   = lastSong.Song,
                        Artist = lastSong.Artist
                    });
                }
            }

            var context = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext <ServerHub>();

            if (context == null)
            {
                return;
            }

            var pandoraInfo = new PandoraResult
            {
                Album       = deezerState.AlbumName,
                AlbumUri    = deezerState.AlbumUri,
                Artist      = deezerState.ArtistName,
                IsPlaying   = deezerState.IsPlaying,
                LastModifed = deezerState.UpdatedUtc,
                Loved       = false,
                Radio       = deezerState.StreamName,
                Song        = deezerState.SongName
            };

            RabbitMqService.SongChange(pandoraInfo);
            context.Clients.All.pandoraRefresh(pandoraInfo);

            var song = new SongDetails()
            {
                Album  = pandoraInfo.Album,
                Artist = pandoraInfo.Artist,
                Song   = pandoraInfo.Song
            };

            await _lastFMService.UpdateNowPlaying(song);

            var json = JsonConvert.SerializeObject(deezerState);

            File.WriteAllText("deezer.json", json, Encoding.UTF8);
        }
Ejemplo n.º 14
0
        private void Sniffer_OnCurrentSongChanged(object sender, OnSongChangedArgs args)
        {
            details = args.songDetails;

            //Write album art
            if (details.albumArt != null)
            {
                WriteImageToFileLocking("output/album_cover.jpeg", details.albumArt);
            }
            else
            {
                WriteImageToFileLocking("output/album_cover.jpeg", defaultAlbumCover);
            }
        }
Ejemplo n.º 15
0
        //
        // GET: /Song/Details/5

        public ActionResult Details(int id = invalidId)
        {
            if (id == invalidId)
            {
                return(NoId());
            }

            WebHelper.VerifyUserAgent(Request);
            SetSearchEntryType(EntryType.Song);

            var model = new SongDetails(Service.GetSongDetails(id, WebHelper.IsValidHit(Request) ? WebHelper.GetRealHost(Request) : string.Empty));

            return(View(model));
        }
Ejemplo n.º 16
0
    protected override void SelectItem(object sender, SelectionChangedEventArgs e)
    {
        if (ItemsContainer.SelectedIndex == -1)
        {
            return;
        }
        MainWindow window = (MainWindow)Application.Current.MainWindow;
        Songs      s      = (Songs)ItemsContainer.SelectedItem;

        ItemsContainer.SelectedIndex = -1;
        SongDetails detail = new SongDetails(s.Id);
        MainView    view   = (MainView)window.MainFrame.Content;

        view.ActivityFrame.Navigate(detail);
    }
Ejemplo n.º 17
0
 public static bool xmlContainsSong(Mp3_Container container, SongDetails song)
 {
     bool isFound = false;
     if (container.xmlFile.xml.ChildNodes[1].ChildNodes[0].ChildNodes[0].HasChildNodes)
     {
         foreach (XmlNode xn in container.xmlFile.xml.ChildNodes[1].ChildNodes[0].ChildNodes[0])
         {
             if (xn.ChildNodes[9].InnerText.Equals(song.Path))
             {
                 isFound = true;
                 break;
             }
         }
     }
     return isFound;
 }
Ejemplo n.º 18
0
        //
        // GET: /Song/Details/5

        public ActionResult Details(int id = invalidId, int albumId = 0)
        {
            if (id == invalidId)
            {
                return(NoId());
            }

            WebHelper.VerifyUserAgent(Request);
            SetSearchEntryType(EntryType.Song);

            var model = new SongDetails(Service.GetSongDetails(id, albumId, WebHelper.IsValidHit(Request) ? WebHelper.GetRealHost(Request) : string.Empty));

            PageProperties.Description = model.Notes.Original;

            return(View(model));
        }
Ejemplo n.º 19
0
        //
        // GET: /Song/Details/5

        public ActionResult Details(int id = invalidId, int albumId = 0)
        {
            if (id == invalidId)
            {
                return(NoId());
            }

            WebHelper.VerifyUserAgent(Request);

            var contract = queries.GetSongDetails(id, albumId, GetHostnameForValidHit(), null, WebHelper.GetUserLanguageCodes(Request));
            var model    = new SongDetails(contract, PermissionContext);

            var hasDescription = !model.Notes.IsEmpty;
            var prop           = PageProperties;

            prop.GlobalSearchType = EntryType.Song;
            prop.Title            = model.Name;
            prop.Description      = hasDescription ?
                                    markdownParser.GetPlainText(model.Notes.EnglishOrOriginal) :
                                    new SongDescriptionGenerator().GenerateDescription(contract.Song, Translate.SongTypeNames);
            prop.OpenGraph.ShowTwitterCard = true;

            string titleAndArtist;

            if (!string.IsNullOrEmpty(model.ArtistString))
            {
                titleAndArtist = string.Format("{0} - {1}", model.Name, model.ArtistString);
            }
            else
            {
                titleAndArtist = model.Name;
            }
            prop.PageTitle = titleAndArtist;

            prop.Subtitle = string.Format("{0} ({1})", model.ArtistString, Translate.SongTypeNames[model.SongType]);

            if (!string.IsNullOrEmpty(model.ThumbUrlMaxSize))
            {
                prop.OpenGraph.Image = model.ThumbUrlMaxSize;
            }

            prop.CanonicalUrl    = VocaUriBuilder.CreateAbsolute(Url.Action("Details", new { id })).ToString();
            prop.OpenGraph.Title = hasDescription ? string.Format("{0} ({1})", titleAndArtist, Translate.SongTypeNames[model.SongType]) : model.Name;
            prop.OpenGraph.Type  = OpenGraphTypes.Song;

            return(View(model));
        }
Ejemplo n.º 20
0
        internal void OnCurrentSongChanged(object sender, OnSongChangedArgs args)
        {
            songDetails = args.songDetails;

            jsResp.songDetails = songDetails;

            try {
                if (songDetails.albumArt != null)
                {
                    using (MemoryStream ms = new MemoryStream()) {
                        jsResp.songDetails.albumArt.Save(ms, ImageFormat.Jpeg);
                        jsResp.albumCoverBase64 = Convert.ToBase64String(ms.ToArray());
                    }
                }
            } catch {
                //Catch all errors related to album art
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 根据歌曲获得最多不超过六个的专辑封面地址(分别根据专辑名 *10 、歌手名、歌曲名+专辑名、歌曲名+歌手名获取)
        /// </summary>
        /// <param name="SelectedIndex"></param>
        /// <returns></returns>
        private string[] GetTotalAlbumPictures(SongDetails SongDetail)
        {
            string[] Results = new string[13];
            string   Result  = string.Empty;


            string[] TmpResult = GetMultiAlbumPictures(string.IsNullOrEmpty(SongDetail.Album) ? SongDetail.Title : SongDetail.Album);

            int i = -1;

            if (TmpResult != null)
            {
                for (i = 0; i < TmpResult.Length; i++)
                {
                    Results[i] = TmpResult[i];
                }
            }


            //Warning: 虽然这样可以提高专辑封面的匹配准确度,但是会被豆瓣API封,测试过程中暂不开放

            /*
             * i++;
             * Result = GetSingleAlbumPicture(SongDetail.Artist);
             * Results[i] = Result;
             * i++;
             * Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Album);
             * Results[i] = Result;
             * i++;
             * Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Artist);
             * Results[i] = Result;
             */

            List <string> list = new List <string>();

            for (int j = 0; j < Results.Length; j++)
            {
                if ((!string.IsNullOrEmpty(Results[j])) && (list.IndexOf(Results[j].ToLower()) == -1) && (Results[j].IndexOf("music-default") == -1))
                {
                    list.Add(Results[j]);
                }
            }
            return(list.ToArray());
        }
Ejemplo n.º 22
0
        public ActionResult SongDetails(int?id)
        {
            var song = libContext.Songs.Find(id);

            if (id == null || song == null)
            {
                return(RedirectToAction("Index"));   /// httpnotfoundresult
            }

            var songDetails = new SongDetails
            {
                Artist = libContext.Artists.Find(song.ArtistId).Name,   //  !!!!
                Name   = song.Name,
                Cover  = song.Cover,
                Src    = song.Src
            };

            return(View(songDetails));
        }
Ejemplo n.º 23
0
        public static bool songListContains(Mp3_Container container, SongDetails song)
        {
            bool isFound = false;
            foreach (DataGridViewRow row in container.gui.songList.Rows)
            {
                if (row.Cells[0].Value == null && row.Cells[1].Value == null && row.Cells[2].Value == null &&
                    row.Cells[3].Value == null && row.Cells[4].Value == null && row.Cells[5].Value == null &&
                    row.Cells[6].Value == null && row.Cells[7].Value == null && row.Cells[8].Value == null)
                {
                    break;
                }
                if (row.Cells[1].Value.ToString() == song.SongName && row.Cells[2].Value.ToString() == song.Length && row.Cells[3].Value.ToString() == song.Artist && row.Cells[4].Value.ToString() == song.Genre)
                {
                    isFound = true;
                    break;
                }
            }

            return isFound;
        }
        // executes when top 40 xml data has been downloaded

        // you can directly manipulate the xml file via XDocument xdox if you wish

        void svc_GetTop40Completed(object sender, GetTop40CompletedEventArgs e)
        {

            // parse downloaded xml into an instance of Xdocument called xdoc

            XDocument xdoc = XDocument.Parse(e.Result);

            // Create new list for songs in SongDetails class

            

            // For each top 40 'song' read in downloaded xml file add it to list

            // Use linq query to find each song in xml file

            // Use XElement method to parse xml to get to 'alt' and 'source' attributes of element 'img'



            foreach (XElement item in xdoc.Elements("query").Elements("results").Elements("img"))
            {

                // Create new song for each one in Top 40 (track name and cover art URL) and add to contentList list

                SongDetails content = new SongDetails();

                content.SongName = item.FirstAttribute.Value;

                content.ImageSource = item.FirstAttribute.NextAttribute.Value;

                content.SongArtist = item.NextNode.ToString().TrimStart("<a>".ToCharArray()).TrimEnd("</a>".ToCharArray());

                contentList.Add(content);

            }

            // add songs to ListBox for displaying from contentList list

            songList.ItemsSource = contentList.ToList();

        }
Ejemplo n.º 25
0
        private SongPlayInstance ParseSongPlayInstance(SQLiteDataReader reader)
        {
            SongPlayInstance toReturn = null;

            var songDetails = new SongDetails
            {
                songID       = ReadField <string>(reader, "songid"),
                songName     = ReadField <string>(reader, "songname"),
                artistName   = ReadField <string>(reader, "artistname"),
                albumName    = ReadField <string>(reader, "albumname"),
                songLength   = (float)ReadField <double>(reader, "songLength"),
                albumYear    = (int)ReadField <long>(reader, "albumYear"),
                arrangements = JsonConvert.DeserializeObject <List <ArrangementDetails> >(ReadField <string>(reader, "arrangements")),
                albumArt     = null
            };

            //try
            //{
            //    byte[] blob = ReadField<byte[]>(reader, "album_art");
            //    songDetails.albumArt = this.DeserializeImage(blob);
            //}
            //catch
            //{

            //}

            var noteDetails = new LearnASongNoteData();

            DateTime startTime = ReadField <DateTime>(reader, "start_time");
            DateTime endTime   = ReadField <DateTime>(reader, "end_time");

            toReturn = new SongPlayInstance(songDetails, noteDetails, startTime, endTime);

            toReturn.NotesHit         = (int)ReadField <long>(reader, "notes_hit");
            toReturn.NotesMissed      = (int)ReadField <long>(reader, "notes_missed");
            toReturn.TotalNotes       = (int)ReadField <long>(reader, "total_notes");
            toReturn.HighestHitStreak = (int)ReadField <long>(reader, "max_streak");
            return(toReturn);
        }
Ejemplo n.º 26
0
        /// <summary>
        /// Reads psarc file from filepath and populates details with information
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="details"></param>
        internal static Dictionary <string, SongDetails> ReadPSARCHeaderData(FileInfo fileInfo)
        {
            //Wait for the file to exist
            WaitForFile(fileInfo);

            if (!fileInfo.Exists)
            {
                Logger.LogError("Warning! Psarc file {0} does not exist!", fileInfo.FullName);
                return(null);
            }

            var sw = new Stopwatch();

            sw.Start();

            string fileHash = GetFileHash(fileInfo);

            var detailsDict = new Dictionary <string, SongDetails>();

            using (PsarcFile loader = new PsarcFile(fileInfo))
            {
                //Extract toolkit info
                var tkInfo = loader.ExtractToolkitInfo();

                List <SongArrangement> manifests;

                try
                {
                    manifests = loader.ExtractArrangementManifests();
                }
                catch (Exception e)
                {
                    Logger.LogError("Warning! Could not parse psarc file {0}: {1}", fileInfo.Name, e.Message);
                    return(null);
                }

                //Extract all arrangements
                foreach (var v in manifests)
                {
                    if (v == null)
                    {
                        Logger.LogError("Unable to process JSON manifest for {0}", fileInfo.Name);
                        continue;
                    }

                    var arrangement    = v.Attributes;
                    var arrangement_id = arrangement.PersistentID;

                    var             arrangementSng  = loader.InflateEntry <SngAsset>(a => a.Path.Equals($"songs/bin/generic/{arrangement.SongXml.Substring(20)}.sng"));
                    ArrangementData arrangementData = new ArrangementData(arrangementSng);

                    if (arrangement.Phrases != null)
                    {
                        if (!detailsDict.ContainsKey(arrangement.SongKey))
                        {
                            detailsDict[arrangement.SongKey] = new SongDetails();
                        }

                        SongDetails details = detailsDict[arrangement.SongKey];

                        if (details.albumArt == null)
                        {
                            try
                            {
                                details.albumArt = loader.ExtractAlbumArt(arrangement).Bitmap;
                            }
                            catch (Exception e)
                            {
                                Logger.LogError("Warning: couldn't extract album art for {0}", arrangement.SongName);
#if DEBUG
                                Logger.LogException(e);
#endif

                                details.albumArt = new Bitmap(1, 1);
                            }
                        }

                        //Get a list of all sections
                        var sections = new List <ArrangementDetails.SectionDetails>();
                        Dictionary <string, int> sectionCounts = new Dictionary <string, int>();

                        foreach (var sect in arrangement.Sections)
                        {
                            if (!sectionCounts.ContainsKey(sect.Name))
                            {
                                sectionCounts[sect.Name] = 1;
                            }

                            var sectionDetails = new ArrangementDetails.SectionDetails
                            {
                                name      = $"{sect.Name} {sectionCounts[sect.Name]}",
                                startTime = sect.StartTime,
                                endTime   = sect.EndTime
                            };

                            sections.Add(sectionDetails);

                            sectionCounts[sect.Name]++;
                        }


                        //Get a list of all phraseIterations
                        var phraseIterations = new List <ArrangementDetails.PhraseIterationDetails>();
                        Dictionary <string, int> phraseIterationCounts = new Dictionary <string, int>();

                        foreach (var phrI in arrangement.PhraseIterations)
                        {
                            if (!phraseIterationCounts.ContainsKey(phrI.Name))
                            {
                                phraseIterationCounts[phrI.Name] = 1;
                            }

                            var phraseIterationDetails = new ArrangementDetails.PhraseIterationDetails
                            {
                                name          = $"{phrI.Name} {phraseIterationCounts[phrI.Name]}",
                                phraseId      = phrI.PhraseIndex,
                                maxDifficulty = phrI.MaxDifficulty,
                                startTime     = phrI.StartTime,
                                endTime       = phrI.EndTime
                            };

                            phraseIterations.Add(phraseIterationDetails);

                            phraseIterationCounts[phrI.Name]++;
                        }

                        //Build arrangement details
                        var arrangementDetails = new ArrangementDetails
                        {
                            name                   = arrangement.ArrangementName,
                            arrangementID          = arrangement_id,
                            sections               = sections,
                            phraseIterations       = phraseIterations,
                            data                   = arrangementData,
                            isBonusArrangement     = (arrangement.ArrangementProperties.BonusArr == 1),
                            isAlternateArrangement = (arrangement.ArrangementProperties.Represent == 0)
                        };

                        //Determine path type
                        if (arrangement.ArrangementProperties.PathLead == 1)
                        {
                            arrangementDetails.type = "Lead";
                        }
                        else if (arrangement.ArrangementProperties.PathRhythm == 1)
                        {
                            arrangementDetails.type = "Rhythm";
                        }
                        else if (arrangement.ArrangementProperties.PathBass == 1)
                        {
                            arrangementDetails.type = "Bass";
                        }

                        arrangementDetails.tuning = new ArrangementTuning(arrangement.Tuning, (int)arrangement.CentOffset, (int)arrangement.CapoFret);


                        //file hash
                        details.psarcFileHash = fileHash;

                        //Get general song information
                        details.songID     = arrangement.SongKey;
                        details.songLength = arrangement.SongLength;
                        details.songName   = arrangement.SongName;
                        details.artistName = arrangement.ArtistName;
                        details.albumName  = arrangement.AlbumName;
                        details.albumYear  = arrangement.SongYear;
                        details.arrangements.Add(arrangementDetails);

                        //Apply toolkit information
                        details.toolkit = new ToolkitDetails
                        {
                            version         = tkInfo.PackageVersion,
                            author          = tkInfo.PackageAuthor,
                            comment         = tkInfo.PackageComment,
                            package_version = tkInfo.PackageVersion
                        };
                    }
                }

                sw.Stop();

                Logger.Log("Parsed {0} ({1}mb) in {2}ms and found {3} songs", fileInfo.Name, fileInfo.Length / 1024 / 1024, sw.ElapsedMilliseconds, detailsDict.Count);

                return(detailsDict);
            }
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Reads psarc file from filepath and populates details with information
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="details"></param>
        internal static Dictionary <string, SongDetails> ReadPSARCHeaderData(string filepath)
        {
            //Check that the file exists, just in case
            if (!File.Exists(filepath))
            {
                Logger.LogError("Warning! Psarc file {0} does not exist!", filepath);
                return(null);
            }

            var sw = new Stopwatch();

            sw.Start();

            //If its big, print a warning
            var  fileinfo = new FileInfo(filepath);
            long size     = fileinfo.Length;

            var detailsDict = new Dictionary <string, SongDetails>();

            using (LazyPsarcLoader loader = new LazyPsarcLoader(filepath))
            {
                //Extract toolkit info
                var tkInfo = loader.ExtractToolkitInfo();

                //Extract all arrangements
                foreach (var v in loader.ExtractJsonManifests())
                {
                    var attr = v.Entries.ToArray()[0].Value.ToArray()[0].Value;

                    if (attr.Phrases != null)
                    {
                        if (!detailsDict.ContainsKey(attr.SongKey))
                        {
                            detailsDict[attr.SongKey] = new SongDetails();
                        }

                        SongDetails details = detailsDict[attr.SongKey];

                        if (details.albumArt == null)
                        {
                            try
                            {
                                details.albumArt = ExtractAlbumArt(loader, attr.AlbumArt);
                            }
                            catch (Exception e)
                            {
                                Logger.LogError("Warning: couldn't extract album art for {0}", attr.SongName);

                                details.albumArt = new Bitmap(1, 1);
                            }
                        }

                        details.songID     = attr.SongKey;
                        details.songLength = (float)(attr.SongLength ?? 0);
                        details.songName   = attr.SongName;
                        details.artistName = attr.ArtistName;
                        details.albumName  = attr.AlbumName;
                        details.albumYear  = attr.SongYear ?? 0;
                        details.numArrangements++;

                        details.toolkit = new ToolkitDetails
                        {
                            version         = tkInfo.PackageVersion,
                            author          = tkInfo.PackageAuthor,
                            comment         = tkInfo.PackageComment,
                            package_version = tkInfo.PackageVersion
                        };
                    }
                }

                sw.Stop();

                Logger.Log("Parsed {0} ({1}mb) in {2}ms and found {3} songs", fileinfo.Name, fileinfo.Length / 1024 / 1024, sw.ElapsedMilliseconds, detailsDict.Count);

                return(detailsDict);
            }
        }
 private void SnifferService_SongEnded(object sender, RockSnifferLib.Events.OnSongEndedArgs args)
 {
     this.songDetails = new SongDetails();
     this.ssvm.Reset();
 }
 private void SnifferService_SongStarted(object sender, RockSnifferLib.Events.OnSongStartedArgs args)
 {
     this.songDetails   = args.song;
     this.ssvm.Sections = new List <ArrangementDetails.SectionDetails>();
 }
Ejemplo n.º 30
0
 public void UpdateSong(SongDetails songDetails)
 {
     this.npvm.SongDetails = songDetails;
 }
Ejemplo n.º 31
0
        internal void OnCurrentSongChanged(object sender, OnSongChangedArgs args)
        {
            songDetails = args.songDetails;

            jsResp.songDetails = songDetails;
        }
Ejemplo n.º 32
0
        /// <summary>
        /// 根据歌曲获得最多不超过六个的专辑封面地址(分别根据专辑名 *10 、歌手名、歌曲名+专辑名、歌曲名+歌手名获取)
        /// </summary>
        /// <param name="SelectedIndex"></param>
        /// <returns></returns>
        private string[] GetTotalAlbumPictures(SongDetails SongDetail)
        {
            string[] Results = new string[13];
            string Result = string.Empty;

            string[] TmpResult = GetMultiAlbumPictures(string.IsNullOrEmpty(SongDetail.Album) ? SongDetail.Title : SongDetail.Album);

            int i = -1;
            if (TmpResult != null)
            {
                for (i = 0; i < TmpResult.Length; i++)
                {
                    Results[i] = TmpResult[i];
                }
            }

            //Warning: 虽然这样可以提高专辑封面的匹配准确度,但是会被豆瓣API封,测试过程中暂不开放
            /*
            i++;
            Result = GetSingleAlbumPicture(SongDetail.Artist);
            Results[i] = Result;
            i++;
            Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Album);
            Results[i] = Result;
            i++;
            Result = GetSingleAlbumPicture(SongDetail.Title + " " + SongDetail.Artist);
            Results[i] = Result;
            */

            List<string> list = new List<string>();
            for (int j = 0; j < Results.Length; j++)
            {
                if ((!string.IsNullOrEmpty(Results[j])) && (list.IndexOf(Results[j].ToLower()) == -1) && (Results[j].IndexOf("music-default") == -1))
                    list.Add(Results[j]);
            }
            return list.ToArray();
        }