public static AlbumList QueryFiles(string query = "") { try { string[] allFiles = { }; MbApi.Library_QueryFilesEx(query, ref allFiles); MetaDataType[] fields = { MetaDataType.Album, MetaDataType.AlbumArtist, MetaDataType.Artist, MetaDataType.TrackNo, MetaDataType.Rating, MetaDataType.TrackTitle, MetaDataType.RatingLove, }; List <TrackData> allTrackData = new List <TrackData>(); for (int i = 0; i < allFiles.Length; i++) { string[] fileTags = { }; MbApi.Library_GetFileTags(allFiles[i], fields, ref fileTags); allTrackData.Add(new TrackData() { FilePath = allFiles[i], Album = fileTags[0], AlbumArtist = fileTags[1], Artist = fileTags[2], TrackNo = fileTags[3], Rating = fileTags[4], TrackTitle = fileTags[5], Loved = fileTags[6], }); } var GroupedTrackList = allTrackData.GroupBy(t => new { t.Album, t.AlbumArtist }).Select( albm => new AlbumData() { Album = albm.Key.Album, AlbumArtist = albm.Key.AlbumArtist, TrackList = albm.ToList(), }).OrderBy(x => x.Album).ToList(); AlbumList trackLists = new AlbumList() { callback_function = "fileQueryComplete", AlbumLists = GroupedTrackList }; return(trackLists); } catch (Exception e) { throw e; } }
private static void GetSimilarArtists(string value) { try { SimilarArtists similarArtistList = new SimilarArtists(); similarArtistList.Data = MbApi.Library_QuerySimilarArtists(value, 0.2).Split('\u0000'); similarArtistList.callback_function = "updateSimilarArtistList"; WsRef.SendMessage(Util.Serialize(similarArtistList)); } catch (Exception) { } }
public static AlbumList GetNowPlaylist() { string[] allFiles = { }; MbApi.NowPlayingList_QueryFilesEx("", ref allFiles); MetaDataType[] fields = { MetaDataType.Album, MetaDataType.AlbumArtist, MetaDataType.Artist, MetaDataType.TrackNo, MetaDataType.Rating, MetaDataType.TrackTitle, MetaDataType.RatingLove, }; List <TrackData> allTrackData = new List <TrackData>(); for (int i = 0; i < allFiles.Length; i++) { string[] fileTags = { }; MbApi.Library_GetFileTags(allFiles[i], fields, ref fileTags); allTrackData.Add(new TrackData() { FilePath = allFiles[i], Album = fileTags[0], AlbumArtist = fileTags[1], Artist = fileTags[2], TrackNo = fileTags[3], Rating = fileTags[4], TrackTitle = fileTags[5], Loved = fileTags[6], }); } var GroupedTrackList = allTrackData.GroupBy(t => new { t.Album, t.AlbumArtist }).Select( albm => new AlbumData() { Album = albm.Key.Album, AlbumArtist = albm.Key.AlbumArtist, TrackList = albm.ToList(), }).ToList(); return(new AlbumList() { callback_function = "updatePlaylistData", AlbumLists = GroupedTrackList }); }
/// <summary> /// Generates serialized JSON object with Now playing data to send to the browser /// </summary> /// <param name="isForcedOnce">Should we send the artwork data</param> /// <returns>Serialized json data</returns> public static string GetNowPlayingData(bool isForcedOnce) { try { float currentPos = MbApi.Player_GetPosition(); float totalTime = MbApi.NowPlaying_GetDuration(); float completed = currentPos / totalTime * 100; if (data == null) { data = new NowPlayingData(); } string oldHash = Util.CreateMD5(data.CurrentTrackTitle + data.CurrentTrackArtist).ToLower(); string curHash = Util.CreateMD5(MbApi.NowPlaying_GetFileTag(MetaDataType.TrackTitle) + MbApi.NowPlaying_GetFileTag(MetaDataType.Artist)).ToLower(); bool TrackChanged = (curHash != oldHash); data.HasTrackChanged = (TrackChanged || isForcedOnce); data.CurrentTrackTitle = MbApi.NowPlaying_GetFileTag(MetaDataType.TrackTitle); data.CurrentTrackArtist = MbApi.NowPlaying_GetFileTag(MetaDataType.Artist); data.CurrentPlayerState = MbApi.Player_GetPlayState().ToString(); data.CurrentTrackSize = totalTime; data.CurrentTrackPosition = currentPos; data.CurrentTrackCompleted = completed; data.CurrentTrackSizeReadable = Util.FormattedMills(totalTime); data.CurrentTrackPositionReadable = Util.FormattedMills(currentPos); data.CurrentTrackAlbum = MbApi.NowPlaying_GetFileTag(MetaDataType.Album); data.CurrentTrackGenre = MbApi.NowPlaying_GetFileTag(MetaDataType.Genres); data.ArtworkPath = (TrackChanged || isForcedOnce) ? MbApi.NowPlaying_GetFileUrl() : string.Empty; data.CurrentVolume = MbApi.Player_GetVolume(); var allfile = MbApi.NowPlayingList_QueryGetNextFile(); data.NextQueueTrack = allfile; data.ArtistDataset = (TrackChanged || isForcedOnce) ? GetArtistData(MbApi.NowPlaying_GetFileTag(MetaDataType.Artist)) : new ArtistData(); data.callback_function = "refreshPlayerControl"; return(Util.Serialize(data)); } catch (Exception) { } return(string.Empty); }
/// <summary> /// Calls MusicBee api function depending on the response /// </summary> /// <param name="response"></param> public static void HandleResponse(string response) { if (response is null) { return; } switch (response) { case "toggleplay": MbApi.Player_PlayPause(); break; case "playprev": MbApi.Player_PlayPreviousTrack(); break; case "playnext": MbApi.Player_PlayNextTrack(); break; case "queryFiles": QueryFiles(); break; default: break; } //if the response contains "/" backslash then it contain multiple values if (response.Contains("/")) { //Create an array of responses string[] responseArray = response.Split('/'); if (responseArray.Length == 2) { //Array of values that are passed with the request var value = responseArray[1]; switch (responseArray[0]) { case "settrackpos": SetPlayerTrackPos(float.Parse(value, CultureInfo.InvariantCulture.NumberFormat)); break; case "setvol": SetVolume(float.Parse(value, CultureInfo.InvariantCulture.NumberFormat)); break; case "getSimilarArtist": GetSimilarArtists(value); break; case "queryFiles": QueryFiles(value); break; default: break; } } } }
/// <summary> /// Sets the MusicBee's volume with the value /// </summary> /// <param name="value"></param> private static void SetVolume(float value) { //MusicBee uses 0 to 1 volume range so clamp the values value = Mathf.Range(value, 0, 1); MbApi.Player_SetVolume(value); }
public static void PlayTrack(string url) { MbApi.NowPlayingList_PlayNow(url); }
private static void SetPlayerTrackPos(float pos) { int position = Convert.ToInt32(pos / 100 * MbApi.NowPlaying_GetDuration()); MbApi.Player_SetPosition(position); }
public static Stream GetCurrentArtwork() { return(GetArtwork(MbApi.NowPlaying_GetFileUrl())); }