Example #1
0
        private void ScheduleLoadedTrackFromFileEvent(string fileName, MediaPlayerMetadata mediaPlayerMetadata)
        {
            EventHandler handler = null;

            handler = (o, e) =>
            {
                LoadedTrackFromFile?.Invoke(this, new TrackLoadedFromFileEventArgs
                {
                    FileName = fileName,
                    Metadata = mediaPlayerMetadata ?? defaultMetadata
                });

                var eventInfo = o.GetType().GetEvent(startPlayingTrackEventName);
                eventInfo.RemoveEventHandler(o, handler);
            };

            StartPlayingTrack += handler;
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileName"></param>
        public void LoadFile(string fileName, MediaPlayerMetadata mediaPlayerMetadata = null)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                throw new ArgumentException("File name string specified has no value or is empty.");
            }
            else if (!File.Exists(fileName))
            {
                throw new ArgumentException(string.Format("File '{0}' does not exist.", fileName));
            }
            else if (File.ReadAllBytes(fileName).Count() == 0)
            {
                throw new ArgumentException(string.Format("File '{0}' contains no data!", fileName));
            }

            if (_stream != 0)
            {
                Bass.BASS_StreamFree(_stream);
            }

            _stream = 0;

            _fileName = fileName;

            if (_playbackThread != null)
            {
                _playbackThread.Abort();
            }

            ScheduleLoadedTrackFromFileEvent(fileName, mediaPlayerMetadata);

            _playbackThread = new Thread(PlayAudioFile);
            _playbackThread.Start();

            logger.InfoFormat("{0} loaded for playback by the media player", fileName);
        }
Example #3
0
        /// <summary>
        /// Preform an iteration of the play all tracks loop.
        /// </summary>
        /// <param name="random">Random number generator to be used if shuffle is on.</param>
        private void PlayAllTracksIteration(Random random)
        {
            if (!_forward && !_back)
            {
                // Load current track into media player.
                var currentTrack      = Tracks[GetCurrentTrackIndex()];
                var mediaPlayMetadata = new MediaPlayerMetadata
                {
                    AlbumName  = currentTrack.Album?.Name,
                    ArtistName = currentTrack.Artist?.Name,
                    TrackName  = currentTrack.Song.Title
                };

                _mediaPlayer.LoadFile(currentTrack.Song.FileName, mediaPlayMetadata);

                // Wait until media player thread has started playback.
                while (!_mediaPlayer.Playing)
                {
                    Thread.Sleep(10);
                }

                if (GetCurrentTrackIndex() != _lastTrack)
                {
                    _previousTracks.Push(GetCurrentTrackIndex());
                }

                _lastTrack = GetCurrentTrackIndex();
            }

            // While next and back are not pressed and the user is not finished with the song.
            while (!_forward && !_back && !_mediaPlayer.Finished)
            {
                Thread.Sleep(10);
            }

            // Move forward if forward motion has been indicated and shuffle is off.
            if (_forward && !Shuffle)
            {
                SetCurrentTrackIndex(GetCurrentTrackIndex() + 1);

                _forward = false;
            }
            else if (_back && !Shuffle) // Move back one song if indicated and shuffle is off.
            {
                SetCurrentTrackIndex(GetCurrentTrackIndex() - 1);

                _back = false;
            }
            else if (Shuffle && (!_back || _previousTracks.Count < 2)) // Pick random track for playback.
            {
                int nextTrack = random.Next(Tracks.Count);

                while (nextTrack == GetCurrentTrackIndex())
                {
                    nextTrack = random.Next(Tracks.Count);
                }

                SetCurrentTrackIndex(nextTrack);

                _forward = false;
                _back    = false;
            }
            else if (Shuffle && _back) // Play last played track.
            {
                int nextTrack = _previousTracks.Pop();
                nextTrack = _previousTracks.Pop();

                SetCurrentTrackIndex(nextTrack);

                _back = false;
            }
            else if (!Repeat) // Go forward if no actions have been indicated and repeat is off.
            {
                SetCurrentTrackIndex(GetCurrentTrackIndex() + 1);
            }

            // Keep rolling over to start of playlist if repeat all is on.
            if (RepeatAll)
            {
                if (GetCurrentTrackIndex() >= Tracks.Count)
                {
                    // Roll on to start of playlist.
                    SetCurrentTrackIndex(0);
                }
                else if (GetCurrentTrackIndex() < 0) // Roll off to end of playlist.
                {
                    SetCurrentTrackIndex(Tracks.Count - 1);
                }
            }
        }