コード例 #1
0
        public async Task <PlaybackService> InitializeAsync()
        {
            // Initialize Setting
            //Setting.InitializeSettingBinary(RepeatMode, nameof(RepeatMode), MediaRepeatMode.None);
            //Setting.InitializeSetting(EnableShuffle, nameof(EnableShuffle), false);

            Player             = new MediaPlayer();
            _playlistContainer = new PlaylistContainer();

            Setting.Playback.Volume
            .Subscribe(x => Player.Volume = x / 100d);

            Observable.FromEventPattern <TypedEventHandler <MediaPlayer, object>, object>(
                h => Player.MediaEnded += h, h => Player.MediaEnded -= h)
            .Subscribe(async _ =>
            {
                IsPlaying.OnNext(false);

                if (_playlistContainer.RepeatMode == MediaRepeatMode.Track)
                {
                    await PlayAsyncInner(_playlistContainer.CurrentTrack);
                    return;
                }

                if (_playlistContainer.HasNext())
                {
                    await PlayAsyncInner(_playlistContainer.Next());
                }
            });

            Observable.Timer(TimeSpan.Zero, TimeSpan.FromMilliseconds(500))
            .SkipUntil(IsPlaying.DistinctUntilChanged().Where(x => x))
            .TakeUntil(IsPlaying.DistinctUntilChanged().Where(x => !x))
            .Repeat()
            .Subscribe(_ =>
            {
                PlaybackPosition.OnNext(Player.PlaybackSession);
            });

            NewTrackPlayed
            .Do(x => WriteSmtcThumbnail(x.PlaybackItem, x.Track))
            .ObserveOnCoreDispatcher()
            .Subscribe(x =>
            {
                if (_previousTrack != null)
                {
                    _previousTrack.IsPlaying = false;
                }
                x.Track.IsPlaying = true;
                _previousTrack    = x.Track;
            });

            return(await Task.FromResult(this));
        }
コード例 #2
0
ファイル: Animation.cs プロジェクト: tkapustina/osu-framework
        private void updateFrameIndex()
        {
            switch (PlaybackPosition.CompareTo(frameData[CurrentFrameIndex].DisplayStartTime))
            {
            case -1:
                while (CurrentFrameIndex > 0 && PlaybackPosition < frameData[CurrentFrameIndex].DisplayStartTime)
                {
                    CurrentFrameIndex--;
                    currentFrameCache.Invalidate();
                }

                break;

            case 1:
                while (CurrentFrameIndex < frameData.Count - 1 && PlaybackPosition >= frameData[CurrentFrameIndex].DisplayEndTime)
                {
                    CurrentFrameIndex++;
                    currentFrameCache.Invalidate();
                }

                break;
            }
        }
コード例 #3
0
 protected override void PlaybackPositionChanged(TimeSpan playbackPosition)
 {
     Debug.WriteLine(nameof(MockMediaSession) + ": Playback Position - " + PlaybackPosition.ToString("hh\\:mm\\:ss"));
 }