public Track GetTrackInfo(string path) { Process mplayer = new Process (); mplayer.StartInfo.CreateNoWindow = true; mplayer.StartInfo.UseShellExecute = false; mplayer.StartInfo.ErrorDialog = false; mplayer.StartInfo.RedirectStandardOutput = true; mplayer.StartInfo.RedirectStandardInput = true; mplayer.StartInfo.RedirectStandardError = true; mplayer.StartInfo.FileName = MPLAYER_COMMAND; mplayer.StartInfo.Arguments = "-vo null -ao null -frames 0 -identify " + path; //mplayer.StartInfo.Arguments = "-identify " + filename; mplayer.Start (); // DANGER! WOLVES AHEAD! //TODO: may take REALLY long time or never exit if the file is unreacheable through network for some reason mplayer.WaitForExit (); var result = new Track (); result.Source = path; while (!mplayer.StandardOutput.EndOfStream) { var line = mplayer.StandardOutput.ReadLine (); var tagLinePrefix = "ID_CLIP_INFO_NAME"; if (line.StartsWith (tagLinePrefix)) { int separatorPos = line.IndexOf ('='); // var tagId = line.Substring (tagLinePrefix.Length, separatorPos - tagLinePrefix.Length); var tagName = line.Substring (separatorPos + 1); line = mplayer.StandardOutput.ReadLine (); separatorPos = line.IndexOf ('='); var tagValue = line.Substring (separatorPos + 1); switch (tagName) { case "Title": result.Name = tagValue; break; case "Artist": result.Artist = tagValue; break; } } if (line.StartsWith ("ID_LENGTH")) { int separatorPos = line.IndexOf ('='); var seconds = Double.Parse (line.Substring (separatorPos + 1), System.Globalization.CultureInfo.InvariantCulture); result.Duration = TimeSpan.FromSeconds (seconds); } } if (!(result.Duration.TotalSeconds > 0)) result = null; return result; }
public async Task<IEnumerable<Track>> GetUserAudioList (int offset, int count) { // Create an HTTP web request using the URL: var request = new HttpClient(); var content = new FormUrlEncodedContent ( new Dictionary<string, string>() { {"owner_id", _user.VkUserInfo.VkUserId}, {"access_token", _user.VkUserInfo._token}, {"count", count.ToString ()} }); try { var responceRaw = await request.PostAsync (_baseUrl + "audio.get",content); var bytes = await responceRaw.Content.ReadAsByteArrayAsync(); var responceString = System.Text.Encoding.GetEncoding ("windows-1251").GetString (bytes, 0, bytes.Length); JArray VkAudioListJSon = (JArray)JObject.Parse (responceString) ["response"] ; var responce = new List<Track>(); foreach (var i in VkAudioListJSon.Skip (1)) { try { var track = new Track (); track.Id = (string)i ["aid"]; track.Artist = (string)i ["artist"]; track.Name = (string)i ["title"]; track.Duration = TimeSpan.FromSeconds((int)i ["duration"]); track.Source = (string)i ["url"]; track.SourceType = SourceType.VK; track.Genre = (string)i ["genre"]; responce.Add (track); } catch (Exception) { continue; } } return responce; } catch (Exception) { return new List<Track> (); } }
public PlaylistEntry QueueTrack(HubblUser user, Track track) { UpdateUserPriorities(); if (!_usersActivities.ContainsKey(user.Id)) { var newActivity = new UserActivitiesRecord { basePriority = 1.0, activitiesCount = 0, lastActivityTime = DateTime.Now }; _usersActivities.Add(user.Id, newActivity); } var activitiesRecord = _usersActivities[user.Id]; if (activitiesRecord.activitiesCount++ == 0) ++_activeUsersCount; var entry = new PlaylistEntry { User = user, Track = track, Id = _freeEntryId++, LikesNum = 0, DislikesNum = 0, Priority = activitiesRecord.basePriority }; activitiesRecord.basePriority *= Math.Pow(0.5, track.Duration.TotalMilliseconds/AVG_TRACK_LENGTH_MS); _usersMarkedByEntryId.Add(entry.Id, new List<string>()); _usersMarkedByEntryId[entry.Id].Add(user.Id); Playlist.Add(entry); Playlist.Sort(comparePlaylistEntries); _playlistEntries.Add(entry); if (!_playing) Play(); return entry; }
public MPlayerBackend() { _currentTrack = null; _currentTask = null; _taskCancellationTokenSource = new CancellationTokenSource (); }
void IMusicPlayerBackend.PlayTrack(Track track) { if (_currentTrack != null) _currentTrack = null; if (_currentTask != null) { _taskCancellationTokenSource.Cancel (); _currentTask = null; } if (track == null) return; var cancellationToken = _taskCancellationTokenSource.Token; _currentTrack = track; _currentTrackStartTime = new TimeSpan (); _currentTrack.Current = new TimeSpan(0); _currentTask = Task.Run (() => { Process mplayer = new Process (); mplayer.StartInfo.UseShellExecute = false; mplayer.StartInfo.ErrorDialog = false; mplayer.StartInfo.RedirectStandardOutput = true; mplayer.StartInfo.RedirectStandardInput = true; mplayer.StartInfo.RedirectStandardError = true; mplayer.StartInfo.FileName = MPLAYER_COMMAND; mplayer.StartInfo.Arguments = track.Source; // cancellationToken.ThrowIfCancellationRequested (); mplayer.Start (); // while (!(cancellationToken.IsCancellationRequested || mplayer.HasExited)) { while (!mplayer.HasExited) { Thread.Sleep (100); //MEGAZALEPA Console.WriteLine (mplayer.StandardOutput.ReadToEnd ()); } if (!mplayer.HasExited) mplayer.Kill (); }); }