Esempio n. 1
0
        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;
        }
Esempio n. 2
0
		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> ();
			}


			}
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
 public MPlayerBackend()
 {
     _currentTrack = null;
     _currentTask = null;
     _taskCancellationTokenSource = new CancellationTokenSource ();
 }
Esempio n. 5
0
        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 ();
            });
        }