Example #1
0
        public async Task <int> StartPlayTask(string fileName, IProgress <PlayProgress> progessReporter)
        {
            int     iCurrentPosition = 0;
            NSUrl   url;
            NSData  data;
            NSError err;

            if (_mediaPlayer != null)      //already loaded so restart if paused
            {
                if (_fileName == fileName) //check we havent change tracks
                {
                    _mediaPlayer.Play();
                }
                else
                {
                    //track change, reset player:
                    _fileName = fileName;
                    url       = NSUrl.FromString(fileName);
                    data      = NSData.FromUrl(url);
                    err       = null;

                    _mediaPlayer = AVAudioPlayer.FromData(data, out err);
                    if (_mediaPlayer != null)
                    {
                        _mediaPlayer.Play();
                    }
                }
            }
            else
            {
                //new player:
                _fileName = fileName;
                url       = NSUrl.FromString(fileName);
                data      = NSData.FromUrl(url);
                err       = null;

                _mediaPlayer = AVAudioPlayer.FromData(data, out err);
                if (_mediaPlayer != null)
                {
                    _mediaPlayer.Play();
                }
            }
            while (_mediaPlayer.Playing) //update play progress
            {
                if (progessReporter != null)
                {
                    iCurrentPosition = (int)_mediaPlayer.CurrentTime;
                    PlayProgress args = new PlayProgress(fileName, iCurrentPosition, (int)_mediaPlayer.Duration);
                    progessReporter.Report(args);
                    await Task.Yield();
                }
            }
            return(iCurrentPosition);
        } //StartPlayTask
Example #2
0
        public async Task <int> StartPlayTask(string fileName, IProgress <PlayProgress> progessReporter)
        {
            int iCurrentPosition = 0;

            Android.Net.Uri uri2Play = Android.Net.Uri.Parse(fileName);

            if (_mediaPlayer != null)      //already loaded so restart if paused
            {
                if (_fileName == fileName) //check we havent change tracks
                {
                    _mediaPlayer.Start();
                }
                else
                {
                    //track change, reset player:
                    _fileName    = fileName;
                    _mediaPlayer = MediaPlayer.Create(global::Android.App.Application.Context, uri2Play);
                    _mediaPlayer.Start();
                }
            }
            else
            {
                //new player:
                _mediaPlayer = MediaPlayer.Create(global::Android.App.Application.Context, uri2Play);
                _mediaPlayer.Start();
            }
            while (_mediaPlayer.IsPlaying) //update play progress
            {
                if (progessReporter != null)
                {
                    iCurrentPosition = _mediaPlayer.CurrentPosition;
                    PlayProgress args = new PlayProgress(fileName, iCurrentPosition, _mediaPlayer.Duration);
                    progessReporter.Report(args);
                    await Task.Yield();
                }
            }
            return(iCurrentPosition);
        }
Example #3
0
        private static void RegisterSingletons(IUnityContainer container)
        {
            container.RegisterSingleton <IPlaylist, Playlist>();
            container.RegisterSingleton <IPlaySettings, PlaySettings>();
            container.RegisterSingleton <ILastFmApiClientService, LastFmApiClientService>();
            container.RegisterSingleton <Interfaces.ILibraryService, Services.LibraryService>();

            var playProgress = new PlayProgress();

            container.RegisterInstance <IPlayProgress>(playProgress);
            container.RegisterInstance <IUpdatePlayProgress>(playProgress);

#if DEBUG
            container.RegisterSingleton <IPlayer, DebugPlayer>();
#else
            container.RegisterSingleton <IPlayer, WebScrobblingPlayer>(
                new InjectionConstructor(
                    container.Resolve <ICurrentDateTime>(),
                    container.Resolve <IScrobblingRules>(),
                    container.Resolve <IScrobbler>(),
                    container.Resolve <IPlayProgress>()
                    ));
#endif
        }
Example #4
0
 private void PlayProgress_Click(object sender, EventArgs e)
 {
     player.SetPositionAsync((int)PlayProgress.CalculateRelativeValue());
 }