Beispiel #1
0
        public PlaybackStatus Create(Guid id)
        {
            PlaybackStatus mine = new PlaybackStatus();

            mine.Id = id;
            return(mine);
        }
        public void Update(Track track, PlaybackStatus status)
        {
            string activity = string.Empty;
            string state    = string.Empty;

            switch (status)
            {
            case PlaybackStatus.Playing:
                activity = "play";
                state    = $"by {track.Artist}";
                break;

            case PlaybackStatus.Paused:
                activity = "pause";
                state    = "Paused";
                break;

            case PlaybackStatus.Stopped:
                activity = "idle";
                state    = "Idle";
                break;
            }
            client?.SetPresence(new RichPresence
            {
                Details = TruncateBytes(track.Title, 120),
                State   = TruncateBytes(state, 120),
                Assets  = new Assets
                {
                    LargeImageKey = "icon",
                    SmallImageKey = activity
                },
                Timestamps = Timestamps.Now
            });
        }
Beispiel #3
0
 private void OnStatusUpdateReceived(PlaybackStatus status)
 {
     if (StatusUpdateReceived != null)
     {
         StatusUpdateReceived(status);
     }
 }
        public async void Update(IMetadataProvider track, PlaybackStatus status)
        {
            smtc.PlaybackStatus = (MediaPlaybackStatus)status;
            var updater = smtc.DisplayUpdater;

            updater.Type = MediaPlaybackType.Music;
            updater.MusicProperties.Artist          = string.Join(", ", track.Artists);
            updater.MusicProperties.AlbumTitle      = track.Album;
            updater.MusicProperties.TrackNumber     = (uint)track.TrackNumber;
            updater.MusicProperties.AlbumTrackCount = (uint)track.TrackTotal;
            if (track.CoverArt != null)
            {
                var decoder = await BitmapDecoder.CreateAsync(new MemoryStream(track.CoverArt).AsRandomAccessStream());

                var transcodedImage = new InMemoryRandomAccessStream();

                BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(transcodedImage, decoder);

                await encoder.FlushAsync();

                transcodedImage.Seek(0);
                updater.Thumbnail = RandomAccessStreamReference.CreateFromStream(transcodedImage);
            }
            else
            {
                updater.Thumbnail = null;
            }

            updater.MusicProperties.Title = track.Title;
            updater.Update();
        }
Beispiel #5
0
 //function for the thread that interrupts a playback sequence.
 private void abortWrapper()
 {
     //block until the macro is hit, then set flags to stop the interpreter.
     raController.interruptInterpreterSequence(macroVKs);
     //clean up
     isPlayingBack = false;
     status        = PlaybackStatus.Nothing;
 }
 private void Pause()
 {
     if (playbackStatus == PlaybackStatus.Playing)
     {
         wavePlayer.Pause();
         playbackStatus = PlaybackStatus.Paused;
     }
 }
Beispiel #7
0
        public void PlayPrepare(string fileName)
        {
            try
            {
                var filePath = _Storage.GetPath(fileName);
                var url      = NSUrl.FromFilename(filePath);

                if (_Player == null)
                {
                    _Player = new AVPlayer();
                }

                if (_PlayerItem != null)
                {
                    _Player.RemoveTimeObserver(_TimeChanged); // for skipping 1-2 extra triggering for new item creation code below
                    CleanPlayerItem();
                }

                PlayerReady = false;
                _Asset      = AVAsset.FromUrl(url);
                _PlayerItem = new AVPlayerItem(_Asset);
                _PlayerItem.AddObserver(this, _status, NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, _Player.Handle);
                _PlayerItem.AddObserver(this, _error, NSKeyValueObservingOptions.Initial | NSKeyValueObservingOptions.New, _Player.Handle);
                _Player.ReplaceCurrentItemWithPlayerItem(_PlayerItem);
                _Player.Rate = 1;
                _Player.Pause(); // HACK: stop autoplaying after recording

                _TimeChanged = _Player.AddPeriodicTimeObserver(new CMTime(1, 1), DispatchQueue.MainQueue, time => {
                    // skip restart event
                    if (_isRestart)
                    {
                        _isRestart = false;

                        return;
                    }

                    if (_PlayerItem != null && _PlayerItem.Duration != CMTime.Indefinite)
                    {
                        var stopped = time == _PlayerItem.Duration;
                        PlaybackStatus?.Invoke(this, new PlaybackEventArgs {
                            CurrentTime = time.Seconds,
                            Duration    = _PlayerItem.Duration.Seconds,
                            Stopped     = stopped
                        });

                        if (stopped)
                        {
                            _isRestart = true;
                            _Player.Seek(CMTime.Zero);
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(string.Format("*** AudioService.PlayPrepare - Exception: {0}", ex));
            }
        }
Beispiel #8
0
 protected override void WndProc(ref Message m)
 {
     if (m.Msg == WinmmHook.WM_USER + 1)
     {
         PlaybackStatus status = (PlaybackStatus)(int)m.WParam;
         playbackUpdate(status);
     }
     base.WndProc(ref m);
 }
Beispiel #9
0
 private void PlaybackMediaEnded(MediaPlayer sender, object args)
 {
     _playbackTimer.Stop();
     PlaybackStatus?.Invoke(this, new PlaybackEventArgs {
         Stopped     = true,
         CurrentTime = sender.PlaybackSession.NaturalDuration.TotalSeconds,
         Duration    = sender.PlaybackSession.NaturalDuration.TotalSeconds
     });
 }
Beispiel #10
0
 public PlaybackForm(RAController rac)
 {
     raController = rac;
     InitializeComponent();
     speed  = 1;
     loops  = 1;
     status = PlaybackStatus.Nothing;
     this.Show();
     this.Hide();
 }
        public void TestWatchedIsFiredCorrectly()
        {
            var stat = new PlaybackStatus();

            stat.WasPlayedChanged += new EventHandler <EventArgs>(stat_OnWatchedChanged);
            played         = stat.WasPlayed;
            stat.PlayCount = 1;
            Assert.IsTrue(played);
            stat.PlayCount = 0;
            Assert.IsFalse(played);
        }
Beispiel #12
0
        private void UpdateCans()
        {
            PlaybackStatus playbackStatus = this._statusSubject.Value;

            this._canLoadSubject.OnNext(PlaybackStatusHelper.LoadablePlaybackStatuses.Contains(playbackStatus));
            this._canPlaySubject.OnNext(PlaybackStatusHelper.PlayablePlaybackStatuses.Contains(playbackStatus));
            this._canPauseSubject.OnNext(PlaybackStatusHelper.PausablePlaybackStatuses.Contains(playbackStatus));
            this._canResumeSubject.OnNext(PlaybackStatusHelper.ResumablePlaybackStatuses.Contains(playbackStatus));
            this._canStopSubject.OnNext(PlaybackStatusHelper.StoppablePlaybackStatuses.Contains(playbackStatus));
            this._canSeekSubject.OnNext(PlaybackStatusHelper.SeekablePlaybackStatuses.Contains(playbackStatus));
        }
Beispiel #13
0
        /// <summary>
        /// Called when [media state changed].
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="oldValue">The old value.</param>
        /// <param name="newValue">The new value.</param>
        public void OnMediaStateChanged(MediaEngine sender, PlaybackStatus oldValue, PlaybackStatus newValue)
        {
            if (Parent == null)
            {
                return;
            }

            Parent?.PostMediaStateChangedEvent(
                (System.Windows.Controls.MediaState)oldValue,
                (System.Windows.Controls.MediaState)newValue);
        }
 public void SetIntegrations(PlaybackStatus status)
 {
     if (Environment.OSVersion.Version.Major >= 10 && App.Config.IntegrateSMTC)
     {
         smtcIntegration?.Update(CurrentTrack, status);
     }
     if (App.Config.IntegrateDiscordRPC)
     {
         discordIntegration?.Update(CurrentTrack, status);
     }
 }
Beispiel #15
0
 private void PlaybackMediaOpened(MediaPlayer sender, object args)
 {
     PlayerReady = true;
     PlaybackStatus?.Invoke(this, new PlaybackEventArgs {
         Stopped     = true,
         CurrentTime = 0,
         Duration    = sender.PlaybackSession.NaturalDuration.TotalSeconds,
         IsNew       = true
     });
     PlayerStatus?.Invoke(this, new EventArgs());
 }
        private void UpdateCans()
        {
            PlaybackStatus playbackStatus = this._statusSubject.Value;

            this._canLoadSubject.OnNext(PlaybackStatusHelper.CanLoadPlaybackStatuses.Contains(playbackStatus));
            this._canPlaySubject.OnNext(PlaybackStatusHelper.CanPlayPlaybackStatuses.Contains(playbackStatus));
            this._canPauseSubject.OnNext(PlaybackStatusHelper.CanPausePlaybackStatuses.Contains(playbackStatus));
            this._canResumeSubject.OnNext(PlaybackStatusHelper.CanResumePlaybackStatuses.Contains(playbackStatus));
            this._canStopSubject.OnNext(PlaybackStatusHelper.CanStopPlaybackStatuses.Contains(playbackStatus));
            this._canSeekSubject.OnNext(PlaybackStatusHelper.CanSeekPlaybackStatuses.Contains(playbackStatus));
        }
Beispiel #17
0
 public void Init(string path)
 {
     sinfo  = new StreamInfo(path);
     _mixer = new WaveMixerStream32();
     _mixer.AddInputStream(sinfo.Stream);
     _wavePlayer = new WaveOut();
     _wavePlayer.Init(_mixer);
     _mixer.AutoStop = false;
     _skipSeconds    = 3;
     Status          = PlaybackStatus.Stopped;
 }
Beispiel #18
0
 private void PlaybackMediaFailed(MediaPlayer sender, MediaPlayerFailedEventArgs args)
 {
     _playbackTimer.Stop();
     PlayerReady = false;
     PlaybackStatus?.Invoke(this, new PlaybackEventArgs {
         Stopped     = true,
         Duration    = 0,
         CurrentTime = 0,
         HasError    = true
     });
 }
        public void Update(Track track, PlaybackStatus status)
        {
            smtc.PlaybackStatus = (MediaPlaybackStatus)status;
            var updater = smtc.DisplayUpdater;

            updater.Type = MediaPlaybackType.Music;
            updater.MusicProperties.Artist      = track.Artist;
            updater.MusicProperties.AlbumArtist = track.AlbumArtist;
            updater.MusicProperties.Title       = track.Title;
            updater.Update();
        }
Beispiel #20
0
 public void Stop()
 {
     if (Status != PlaybackStatus.Stopped)
     {
         if (_wavePlayer != null)
         {
             _wavePlayer.Stop();
             _mixer.CurrentTime = TimeSpan.Zero;
             Status             = PlaybackStatus.Stopped;
         }
     }
 }
Beispiel #21
0
        private void PlaybackStateChanged(MediaPlayer sender, object args)
        {
            if (!PlayerReady)
            {
                return;
            }

            PlaybackStatus.Invoke(this, new PlaybackEventArgs {
                Stopped     = sender.PlaybackSession.PlaybackState != MediaPlaybackState.Playing && sender.PlaybackSession.PlaybackState != MediaPlaybackState.Paused,
                CurrentTime = sender.PlaybackSession.Position.TotalSeconds,
                Duration    = sender.PlaybackSession.NaturalDuration.TotalSeconds
            });
        }
 private void Stop()
 {
     if (playbackStatus != PlaybackStatus.Stopped)
     {
         if (wavePlayer != null)
         {
             wavePlayer.Stop();
             playbackStatus = PlaybackStatus.Stopped;
             timer1.Stop();
         }
         Rewind();
     }
 }
Beispiel #23
0
        /// <summary>
        /// Called when [media state changed].
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="oldValue">The old value.</param>
        /// <param name="newValue">The new value.</param>
        public void OnMediaStateChanged(MediaEngine sender, PlaybackStatus oldValue, PlaybackStatus newValue)
        {
            if (Parent == null)
            {
                return;
            }

            // Force a reportable position when the media state changes
            Parent.ReportablePosition = sender.State.Position;
            Parent?.PostMediaStateChangedEvent(
                (System.Windows.Controls.MediaState)oldValue,
                (System.Windows.Controls.MediaState)newValue);
        }
Beispiel #24
0
        /// <summary>
        /// Called when [media state changed].
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="oldValue">The old value.</param>
        /// <param name="newValue">The new value.</param>
        /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
        public Task OnMediaStateChanged(MediaEngine sender, PlaybackStatus oldValue, PlaybackStatus newValue)
        {
            if (Parent == null)
            {
                return(Task.CompletedTask);
            }

            // Force a reportable position when the media state changes
            Parent.ReportablePosition = sender.State.Position;
            return(Parent.RaiseMediaStateChangedEvent(
                       (System.Windows.Controls.MediaState)oldValue,
                       (System.Windows.Controls.MediaState)newValue));
        }
Beispiel #25
0
 public void Play(PlaybackStatus playstate, bool resume)
 {
     this.PlayState = playstate;
     this.Prepare(resume);
     if (this is PlayableCollection && (this.PlayableItems == null || this.PlayableItems.Count() < 1))
     {
         Microsoft.MediaCenter.MediaCenterEnvironment ev = Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment;
         ev.Dialog(Application.CurrentInstance.StringData("NoContentDial"), Application.CurrentInstance.StringData("Playstr"), Microsoft.MediaCenter.DialogButtons.Ok, 500, true);
     }
     else
     {
         PlayInternal(resume);
     }
 }
Beispiel #26
0
 internal void OnPlayStateSaved(BaseItem media, PlaybackStatus playstate)
 {
     // Fire off event in async so we don't tie anything up
     if (_PlayStateSaved != null)
     {
         Async.Queue("OnPlayStateSaved", () =>
         {
             _PlayStateSaved(this, new PlayStateSaveEventArgs()
             {
                 PlaybackStatus = playstate, Item = media
             });
         });
     }
 }
Beispiel #27
0
        internal void EnsurePlayStateChangesBoundToUI()
        {
            if (playstate == null)
            {
                Media media = baseItem as Media;

                if (media != null)
                {
                    playstate = media.PlaybackStatus;
                    // if we want any chance to reclaim memory we are going to have to use
                    // weak event handlers
                    playstate.WasPlayedChanged += new EventHandler <EventArgs>(PlaybackStatusPlayedChanged);
                    PlaybackStatusPlayedChanged(this, null);
                }
            }
        }
 private void Play()
 {
     if (playbackStatus != PlaybackStatus.Playing)
     {
         if (playbackStatus != PlaybackStatus.Paused)
         {
             Rewind();
         }
         if (wavePlayer == null)
         {
             wavePlayer = new WaveOut();
             wavePlayer.Init(mixer);
         }
         wavePlayer.Play();
         playbackStatus = PlaybackStatus.Playing;
         timer1.Start();
     }
 }
Beispiel #29
0
        protected override void InternalStatusChange(PlaybackStatus oldStatus, PlaybackStatus newStatus)
        {
            switch (newStatus)
            {
            case PlaybackStatus.NotPlaying:
                _playWait.Reset();
                break;

            case PlaybackStatus.Paused when oldStatus == PlaybackStatus.Playing:
                _playWait.Reset();
                _layerContext.Stop();
                break;

            case PlaybackStatus.Playing:
                _playWait.Set();
                break;
            }
        }
Beispiel #30
0
        public void Forward()
        {
            if (_mixer == null)
            {
                return;
            }
            if (Status == PlaybackStatus.Playing)
            {
                _mixer.CurrentTime += TimeSpan.FromSeconds(_skipSeconds);
            }

            if (_mixer.CurrentTime < _mixer.TotalTime)
            {
                return;
            }
            _wavePlayer.Stop();
            _mixer.CurrentTime = TimeSpan.Zero;
            Status             = PlaybackStatus.Stopped;
        }
Beispiel #31
0
 public void ChangePlaybackStatus(PlaybackStatus playing)
 {
     _trackHandler.ChangePlaybackStatus(playing);
 }
Beispiel #32
0
 private void Pause()
 {
     if (playbackStatus == PlaybackStatus.Playing)
     {
         wavePlayer.Pause();
         playbackStatus = PlaybackStatus.Paused;
     }
 }
 public PlaybackStatusEventArgs(PlaybackStatus status)
 {
     this.status = status;
 }
Beispiel #34
0
 private void Play()
 {
     if (playbackStatus != PlaybackStatus.Playing)
     {
         if (playbackStatus != PlaybackStatus.Paused)
         {
             Rewind();
         }
         if (wavePlayer == null)
         {
             wavePlayer = new WaveOut();
             wavePlayer.Init(mixer);                
         }
         wavePlayer.Play();
         playbackStatus = PlaybackStatus.Playing;
         timer1.Start();
     }
 }
Beispiel #35
0
 /*
 ==================  UI Update Helpers  ====================
 */
 public void playbackUpdate(PlaybackStatus update)
 {
     System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Mixer));
     switch (update) {
         case PlaybackStatus.Playing:
             btnPlay.Enabled = true;
             btnPlay.Image = Comp3931_Project_JoePelz.Properties.Resources.btnPause;
             btnStop.Enabled = true;
             btnStop.Image = Comp3931_Project_JoePelz.Properties.Resources.btnStop;
             btnRecord.Enabled = false;
             btnRecord.Image = Comp3931_Project_JoePelz.Properties.Resources.btnRecordDisabled;
             btnNew.Enabled = false;
             btnNew.Image = Comp3931_Project_JoePelz.Properties.Resources.btnNewDisabled;
             btnOpen.Enabled = false;
             btnOpen.Image = Comp3931_Project_JoePelz.Properties.Resources.btnOpenDisabled;
             btnSave.Enabled = false;
             btnSave.Image = Comp3931_Project_JoePelz.Properties.Resources.btnSaveDisabled;
             break;
         case PlaybackStatus.Paused:
             btnPlay.Image = Comp3931_Project_JoePelz.Properties.Resources.btnPlay;
             break;
         case PlaybackStatus.Recording:
             btnPlay.Enabled = false;
             btnPlay.Image = Comp3931_Project_JoePelz.Properties.Resources.btnPlayDisabled;
             btnStop.Enabled = false;
             btnStop.Image = Comp3931_Project_JoePelz.Properties.Resources.btnStopDisabled;
             btnRecord.Enabled = true;
             btnRecord.Image = Comp3931_Project_JoePelz.Properties.Resources.btnRecord;
             btnNew.Enabled = false;
             btnNew.Image = Comp3931_Project_JoePelz.Properties.Resources.btnNewDisabled;
             btnOpen.Enabled = false;
             btnOpen.Image = Comp3931_Project_JoePelz.Properties.Resources.btnOpenDisabled;
             btnSave.Enabled = false;
             btnSave.Image = Comp3931_Project_JoePelz.Properties.Resources.btnSaveDisabled;
             break;
         case PlaybackStatus.Stopped:
             btnPlay.Enabled = true;
             btnPlay.Image = Comp3931_Project_JoePelz.Properties.Resources.btnPlay;
             btnStop.Enabled = true;
             btnStop.Image = Comp3931_Project_JoePelz.Properties.Resources.btnStop;
             btnRecord.Enabled = true;
             btnRecord.Image = Comp3931_Project_JoePelz.Properties.Resources.btnRecord;
             btnNew.Enabled = true;
             btnNew.Image = Comp3931_Project_JoePelz.Properties.Resources.btnNew;
             btnOpen.Enabled = true;
             btnOpen.Image = Comp3931_Project_JoePelz.Properties.Resources.btnOpen;
             btnSave.Enabled = true;
             btnSave.Image = Comp3931_Project_JoePelz.Properties.Resources.btnSave;
             break;
         case PlaybackStatus.Disabled:
             btnPlay.Enabled = false;
             btnPlay.Image = Comp3931_Project_JoePelz.Properties.Resources.btnPlayDisabled;
             btnStop.Enabled = true;
             btnStop.Image = Comp3931_Project_JoePelz.Properties.Resources.btnStop;
             btnRecord.Enabled = true;
             btnRecord.Image = Comp3931_Project_JoePelz.Properties.Resources.btnRecord;
             btnNew.Enabled = true;
             btnNew.Image = Comp3931_Project_JoePelz.Properties.Resources.btnNew;
             btnOpen.Enabled = true;
             btnOpen.Image = Comp3931_Project_JoePelz.Properties.Resources.btnOpen;
             btnSave.Enabled = true;
             btnSave.Image = Comp3931_Project_JoePelz.Properties.Resources.btnSave;
             break;
     }
 }
Beispiel #36
0
 private void Stop()
 {
     if (playbackStatus != PlaybackStatus.Stopped)
     {
         if (wavePlayer != null)
         {
             wavePlayer.Stop();
             playbackStatus = PlaybackStatus.Stopped;
             timer1.Stop();
         }
         Rewind();
     }
 }
Beispiel #37
0
 public void SetPlaybackStatus(PlaybackStatus playbackStatus)
 {
     switch (playbackStatus)
     {
         case PlaybackStatus.Playing:
             _spotifyWrapper.Play(true);
             break;
         case PlaybackStatus.Paused:
             _spotifyWrapper.Play(false);
             break;
     }
 }