/// <summary> /// /// </summary> private void PlayAudioFile() { // Create a stream channel from a file. if ((new FileInfo(_fileName)).Extension != ".cda") { _stream = Bass.BASS_StreamCreateFile(_fileName, 0L, 0L, BASSFlag.BASS_DEFAULT); } else { var driveIndex = _audioCdService.GetCdDriveIndex(_fileName[0]); var trackNumber = _audioCdService.GetTrackNumberFromCdaFilename(_fileName); _stream = BassCd.BASS_CD_StreamCreate(driveIndex, trackNumber, BASSFlag.BASS_DEFAULT); } if (_stream != 0) { if ((new FileInfo(_fileName)).Extension == ".cda") { Thread.Sleep(1000); } // Play the channel. Bass.BASS_ChannelPlay(_stream, false); Finished = false; Playing = true; Stopped = false; StartPlayingTrack.Invoke(this, EventArgs.Empty); } else // Error. { string msg = string.Format("Error playing file '{0}' [BASS error code: {1}]", _fileName.Split('\\').LastOrDefault(), Bass.BASS_ErrorGetCode().ToString()); logger.Error(msg); MessageBox.Show(msg, "Dukebox: Error Playing File", MessageBoxButton.OK, MessageBoxImage.Error); return; } // Maintain parent thread while audio is playing. while (Bass.BASS_ChannelIsActive(_stream) == BASSActive.BASS_ACTIVE_PLAYING && !Stopped) { // Pause audio if flagged to do so. if (!Playing && !Stopped) { Bass.BASS_ChannelPause(_stream); if (TrackPaused != null) { TrackPaused(this, EventArgs.Empty); } // Wait while audio is paused. while (!Playing && !Stopped) { Thread.Sleep(10); } // Resume playback if audio is not flagged to stop. if (!Stopped) { Bass.BASS_ChannelPlay(_stream, false); if (TrackResumed != null) { TrackResumed(this, EventArgs.Empty); } } } if (_newPosition != -1) { Bass.BASS_ChannelSetPosition(_stream, _newPosition); _newPosition = -1; } AudioPositionChanged?.Invoke(this, EventArgs.Empty); } if (Stopped) { // Stop audio before freeing channel. Bass.BASS_ChannelStop(_stream); } Finished = true; // Free the stream channel. if (_stream != 0) { Bass.BASS_StreamFree(_stream); _stream = 0; } Playing = false; Stopped = false; if (FinishedPlayingTrack != null) { FinishedPlayingTrack(this, EventArgs.Empty); } }
public void Handle(AudioPositionChanged message) { }