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); } }
public Mp3Player() { PlaybackState = PlaybackStates.STOPPED; tmrUpdatePosition = new Timer(1000); tmrUpdatePosition.Elapsed += TmrUpdatePosition_Elapsed; if (!Bass.BASS_Init(-1, 44100, 0, IntPtr.Zero)) { OnException?.Invoke(this, new Exception("Failed to initialize audio device.")); } playbackStopped = OnPlaybackStopped; playbackStalled = OnPlaybackStalled; }
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; } }
private void OnPlaybackStalled(int handle, int channel, int data, IntPtr user) { PlaybackState = PlaybackStates.STALLED; OnPlaybackStateChanged?.Invoke(this, PlaybackStates.STALLED); }