Esempio n. 1
0
 public void MoveNext()
 {
     _trackQueue.MoveNext();
     CurrentTrackChanged?.Invoke(_trackQueue.CurrentTrack);
 }
Esempio n. 2
0
 public void MovePrevious()
 {
     _trackQueue.MovePrevious();
     CurrentTrackChanged?.Invoke(_trackQueue.CurrentTrack);
 }
Esempio n. 3
0
        private void _Initialize(bool isAutoSubscribing, int pollingIntervalMilliseconds)
        {
            IsAutoSubscribing = isAutoSubscribing;

            // ポーリング
            _Polling          = new System.Timers.Timer(pollingIntervalMilliseconds);
            _Polling.Elapsed += (s, e) =>
            {
                var isRunning = Helper.AimpRemoteWindowHandle != IntPtr.Zero;

                // 通知が購読されていない
                if (!IsSubscribed)
                {
                    if (isRunning && IsAutoSubscribing)
                    {
                        // 通知を購読
                        Subscribe();
                    }
                }

                // 通知が購読されている
                else
                {
                    if (isRunning)
                    {
                        // PositionProperty
                        var position = Helper.SendPropertyMessage(PlayerProperty.Position, PropertyAccessMode.Get).ToInt32();
                        PositionPropertyChanged?.Invoke(position);
                    }
                    else
                    {
                        // AIMPが終了した
                        Unsubscribe();
                    }
                }
            };
            _Polling.Start();

            _Receiver = new MessageReceiver();
            _Receiver.MessageReceived += (message, wParam, lParam) =>
            {
                // NotifyMessageReceived を発行
                if (message == (WindowMessage)AimpWindowMessage.Notify)
                {
                    NotifyMessageReceived?.Invoke((NotifyType)wParam, lParam);
                }
            };

            NotifyMessageReceived += (type, lParam) =>
            {
                // PropertyChanged を発行
                if (type == NotifyType.Property)
                {
                    PropertyChanged?.Invoke((PlayerProperty)lParam);
                }

                // CurrentTrackChanged を発行
                else if (type == NotifyType.TrackStart)
                {
                    CurrentTrackChanged?.Invoke(Helper.ReadTrackInfo());
                }

                else if (type == NotifyType.TrackInfo)
                {
                }

                else
                {
                    throw new ApplicationException($"NotifyType '{type}' is undefined value");
                }
            };

            PropertyChanged += (type) =>
            {
                var propertyValue = Helper.SendPropertyMessage(type, PropertyAccessMode.Get).ToInt32();

                // DurationPropertyChanged を発行
                if (type == PlayerProperty.Duration)
                {
                    DurationPropertyChanged?.Invoke(TimeSpan.FromMilliseconds(propertyValue));
                }

                // IsMutePropertyChanged を発行
                else if (type == PlayerProperty.IsMute)
                {
                    IsMutePropertyChanged?.Invoke(propertyValue != 0);
                }

                // IsRepeatPropertyChanged を発行
                else if (type == PlayerProperty.IsRepeat)
                {
                    IsRepeatPropertyChanged?.Invoke(propertyValue != 0);
                }

                // IsShufflePropertyChanged を発行
                else if (type == PlayerProperty.IsShuffle)
                {
                    IsShufflePropertyChanged?.Invoke(propertyValue != 0);
                }

                // PositionPropertyChanged を発行
                else if (type == PlayerProperty.Position)
                {
                    PositionPropertyChanged?.Invoke(propertyValue);
                }

                // StatePropertyChanged を発行
                else if (type == PlayerProperty.State)
                {
                    StatePropertyChanged?.Invoke((PlayerState)propertyValue);
                }

                // VolumePropertyChanged を発行
                else if (type == PlayerProperty.Volume)
                {
                    VolumePropertyChanged?.Invoke(propertyValue);
                }

                else
                {
                    throw new ApplicationException($"PropertyType '{type}' is undefined value");
                }
            };
        }