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(); }
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); }
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); } }
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); } }
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); } }
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; } }
/// <summary> /// Popagate new playback state. /// </summary> /// <param name="state">The new state</param> void HandlePlaybackStateChanged(MLMusicService.PlaybackStateType state) { OnPlaybackStateChanged?.Invoke(state); }
private void OnPlaybackStalled(int handle, int channel, int data, IntPtr user) { PlaybackState = PlaybackStates.STALLED; OnPlaybackStateChanged?.Invoke(this, PlaybackStates.STALLED); }