Beispiel #1
0
        public void PlayUrl(string url)
        {
            if (playbackStarting)
            {
                return;
            }

            playbackStarting = true;
            Bass.BASS_ChannelStop(streamHandle);

            new Thread(() =>
            {
                streamHandle = Bass.BASS_StreamCreateURL(url, (int)BASSFlag.BASS_DEFAULT, (int)BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);

                if (streamHandle == 0)
                {
                    OnException?.Invoke(this, new Exception(Bass.BASS_ErrorGetCode().ToString()));
                    return;
                }

                Bass.BASS_ChannelSetSync(streamHandle, BASSSync.BASS_SYNC_END, 1, playbackStopped, IntPtr.Zero);
                Bass.BASS_ChannelSetSync(streamHandle, BASSSync.BASS_SYNC_STALL, 1, playbackStalled, IntPtr.Zero);
                Bass.BASS_ChannelPlay(streamHandle, false);
                tmrUpdatePosition.Start();

                PlaybackState = PlaybackStates.PLAYING;
                OnPlaybackStateChanged?.Invoke(this, PlaybackStates.PLAYING);
                playbackStarting = false;
            }).Start();
        }
Beispiel #2
0
 private void OnPlaybackStopped(int handle, int channel, int data, IntPtr user)
 {
     OnPlaybackEnded?.Invoke(this, null);
     tmrUpdatePosition.Stop();
     PlaybackState = PlaybackStates.STOPPED;
     OnPlaybackStateChanged?.Invoke(this, PlaybackStates.STOPPED);
 }
Beispiel #3
0
 public void Pause()
 {
     if (Bass.BASS_ChannelIsActive(streamHandle) == BASSActive.BASS_ACTIVE_PLAYING)
     {
         Bass.BASS_ChannelPause(streamHandle);
         tmrUpdatePosition.Stop();
         PlaybackState = PlaybackStates.PAUSED;
         OnPlaybackStateChanged?.Invoke(this, PlaybackStates.PAUSED);
     }
 }
Beispiel #4
0
 public void Play()
 {
     if (Bass.BASS_ChannelIsActive(streamHandle) == BASSActive.BASS_ACTIVE_PAUSED)
     {
         Bass.BASS_ChannelPlay(streamHandle, false);
         tmrUpdatePosition.Start();
         PlaybackState = PlaybackStates.PLAYING;
         OnPlaybackStateChanged?.Invoke(this, PlaybackStates.PLAYING);
     }
 }
Beispiel #5
0
            private void OnPlaybackInfoChanged(GlobalSystemMediaTransportControlsSession session, PlaybackInfoChangedEventArgs args = null)
            {
                var props = session.GetPlaybackInfo();

                if (props.PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Closed)
                {
                    session.PlaybackInfoChanged    -= OnPlaybackInfoChanged;
                    session.MediaPropertiesChanged -= OnSongChange;
                    RemoveSession(this);
                }
                else
                {
                    OnPlaybackStateChanged?.Invoke(this, props);
                }
            }
Beispiel #6
0
        public void PlayPause()
        {
            switch (Bass.BASS_ChannelIsActive(streamHandle))
            {
            case BASSActive.BASS_ACTIVE_STOPPED:
            case BASSActive.BASS_ACTIVE_PAUSED:
            case BASSActive.BASS_ACTIVE_STALLED:
                if (streamHandle != 0)
                {
                    Bass.BASS_ChannelPlay(streamHandle, false);
                    PlaybackState = PlaybackStates.PLAYING;
                    OnPlaybackStateChanged?.Invoke(this, PlaybackStates.PLAYING);
                }
                break;

            case BASSActive.BASS_ACTIVE_PLAYING:
                Bass.BASS_ChannelPause(streamHandle);
                PlaybackState = PlaybackStates.PAUSED;
                OnPlaybackStateChanged?.Invoke(this, PlaybackStates.PAUSED);
                break;
            }
        }
Beispiel #7
0
 /// <summary>
 /// Popagate new playback state.
 /// </summary>
 /// <param name="state">The new state</param>
 void HandlePlaybackStateChanged(MLMusicService.PlaybackStateType state)
 {
     OnPlaybackStateChanged?.Invoke(state);
 }
Beispiel #8
0
 private void OnPlaybackStalled(int handle, int channel, int data, IntPtr user)
 {
     PlaybackState = PlaybackStates.STALLED;
     OnPlaybackStateChanged?.Invoke(this, PlaybackStates.STALLED);
 }