예제 #1
0
        public AudioPlayer()
        {
            InitializeComponent();

            Rewind_Button.Opacity                  = 0;
            FastForward_Button.Opacity             = 0;
            RewindButton_Transform.TranslateX      = 44;
            FastForwardButton_Transform.TranslateX = -44;

            Position_Slider.AddHandler(PointerReleasedEvent,
                                       new PointerEventHandler((s, e) => PositionChanged?.Invoke(this, new PositionChangeEventArgs(true, Player.Position))),
                                       true);

            GlobalKeyNotifier.KeyDown += OnKeyDown;
            GlobalKeyNotifier.KeyUp   += OnKeyUp;
        }
        public CustomPlayerElement()
        {
            this.InitializeComponent();
            _configService = Ioc.Default.GetRequiredService <ConfigurationService>();
            _configService.PropertyChanged += ConfigService_PropertyChanged;

            WeakReferenceMessenger.Default.Register <CustomPlayerElement, string, string>(this, nameof(PlaybackListManageService), async(ctor, mes) =>
            {
                if (mes == "CurrentPlayChanged")
                {
                    var manageService  = Ioc.Default.GetRequiredService <MusicFileManageService>();
                    Cover_Image.Source = await manageService.GetCurrentPlayItem()?.GetCoverAsync();

                    ctor.Position_Slider.Maximum = _mediaPlayer.PlaybackSession.NaturalDuration.TotalMinutes;
                    ctor._mediaPlayer.PlaybackSession.PlaybackRate = _configService.PlaybackRate;

                    PlayList_ListView.ItemsSource = manageService.GetPlaybackList();

                    var item = Ioc.Default.GetRequiredService <PlaybackListManageService>().CurrentPlayItem;
                    if (item != null)
                    {
                        PlayList_ListView.SelectedIndex = item.TrackId;
                    }

                    if (ctor._mediaPlayer.PlaybackSession.PlaybackState != MediaPlaybackState.Playing)
                    {
                        ctor._mediaPlayer.Play();
                    }
                }

                if (mes == "ItemOpened")
                {
                    ctor.Position_Slider.Maximum = _mediaPlayer.PlaybackSession.NaturalDuration.TotalMinutes;
                    ctor._mediaPlayer.PlaybackSession.PlaybackRate = _configService.PlaybackRate;
                }
            });

            WeakReferenceMessenger.Default.Register <CustomPlayerElement, string, string>(this, "MediaPlayer", (ctor, mes) =>
            {
                string[] split = mes.Split(':');
                string key     = split[0];
                string value   = split[1];

                if (key == "RequestChangePosition")
                {
                    ctor._isPressSlider        = true;
                    ctor.Position_Slider.Value = double.Parse(value);
                    ctor.ReleasePositionSlider();
                }
            });

            _mediaPlayer                  = Ioc.Default.GetRequiredService <MediaPlayer>();
            _mediaPlayer.Source           = Ioc.Default.GetRequiredService <PlaybackListManageService>().GetPlaybackList();
            _mediaPlayer.Volume           = _configService.Volume;
            _mediaPlayer.IsLoopingEnabled = _configService.LoopingMode == LoopingModeEnum.Single;

            _mediaPlayer.PlaybackSession.PlaybackStateChanged += PlaybackSession_PlaybackStateChanged;
            _mediaPlayer.PlaybackSession.PositionChanged      += PlaybackSession_PositionChanged;

            Position_Slider.AddHandler(PointerPressedEvent, new PointerEventHandler((s, e) => PressPositionSlider()), true);
            Position_Slider.AddHandler(PointerReleasedEvent, new PointerEventHandler((s, e) => ReleasePositionSlider()), true);
            Position_Slider.GotFocus  += (s, e) => PressPositionSlider();
            Position_Slider.LostFocus += (s, e) => ReleasePositionSlider();
        }