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
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); }
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 }
private void PlayProgress_Click(object sender, EventArgs e) { player.SetPositionAsync((int)PlayProgress.CalculateRelativeValue()); }