private async void PlaybackSession_PositionChanged(MediaPlaybackSession sender, object args) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { MediaPlayerViewModel.UpdatePosition(); }); }
public void LoadAndPlayFile_FolderHasNonAsciiCharacter_Plays() { var source = MediaFileInfoTests.GetShortTestAudioFile(); using (var folder = new TemporaryFolder("Ń„Ń„SayMoreMediaModelTest")) { var pathname = Path.Combine(folder.Path, "normal.wav"); if (File.Exists(pathname)) { File.Delete(pathname); } File.Move(source, pathname); _model.LoadFile(pathname); _model.SetVolume(0.01f); var logger = new DebugLogger(); ReflectionHelper.SetProperty(_model, "DebugOutput", logger); _model.PlaybackEnded += delegate { _model = null; File.Delete(pathname); }; _model.Play(); while (_model != null) { Thread.Sleep(10); } Assert.IsTrue(logger.GetText().Contains("Starting playback...")); } }
public void MakeTimeString_WithSSms_VerifyCorrect() { var ts = new TimeSpan(0, 0, 0, 47, 368); var seconds = float.Parse(ts.TotalSeconds.ToString()); Assert.AreEqual("47.4", MediaPlayerViewModel.MakeTimeString(seconds)); }
public void MakeTimeString_WithHHMMSSms_VerifyCorrect() { var ts = new TimeSpan(0, 2, 32, 54, 430); var seconds = float.Parse(ts.TotalSeconds.ToString()); Assert.AreEqual("02:32:54.4", MediaPlayerViewModel.MakeTimeString(seconds)); }
public void MakeTimeString_WithMMSSms_VerifyCorrect() { var ts = new TimeSpan(0, 0, 16, 23, 560); var seconds = float.Parse(ts.TotalSeconds.ToString()); Assert.AreEqual("16:23.6", MediaPlayerViewModel.MakeTimeString(seconds)); }
/// ------------------------------------------------------------------------------------ public TextAnnotationEditorGrid(Font transcriptionFont, Font translationFont) { Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; Margin = new Padding(0); VirtualMode = true; ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders; AllowUserToResizeRows = false; RowHeadersVisible = false; EditMode = DataGridViewEditMode.EditOnEnter; ClipboardCopyMode = DataGridViewClipboardCopyMode.Disable; FullRowFocusRectangleColor = DefaultCellStyle.SelectionBackColor; DefaultCellStyle.SelectionForeColor = DefaultCellStyle.ForeColor; DefaultCellStyle.SelectionBackColor = ColorHelper.CalculateColor(Color.White, DefaultCellStyle.SelectionBackColor, 140); RowTemplate.Height = 25; RowTemplate.MinimumHeight = 24; PlayerViewModel = new MediaPlayerViewModel(); PlayerViewModel.SetVolume(100); PlayerViewModel.SetSpeed(Settings.Default.AnnotationEditorPlaybackSpeedIndex); SetColumnFonts(transcriptionFont, translationFont); }
public void TestMediaPlayerViewModelCreation() { // This test is trivial. Add your own tests for the logic you add to the ViewModel. var vm = new MediaPlayerViewModel(); Assert.NotNull(vm); }
protected override void SetValueImpl(object target, object value) { _droppedFrameRequestSubscription?.Dispose(); _droppedFrameRequestSubscription = null; _playRequestSubscription?.Dispose(); _playRequestSubscription = null; _stopRequestSubscription?.Dispose(); _stopRequestSubscription = null; _progressTimer?.Dispose(); _progressTimer = null; MediaPlayerViewModel = value as MediaPlayerViewModel; if (MediaPlayerViewModel == null) { return; } if (MediaPlayerViewModel.CanReportProgress) { _progressTimer = new Timer(OnProgressTimer, null, ProgressTimerStep, Timeout.Infinite); } _stopRequestSubscription = MediaPlayerViewModel.WeakSubscribe(nameof(MediaPlayerViewModel.StopRequest), StopRequestHandler); _playRequestSubscription = MediaPlayerViewModel.WeakSubscribe <MediaPlayerViewModel, PlaybackModel>(nameof(MediaPlayerViewModel.PlayRequest), PlayRequestHandler); _droppedFrameRequestSubscription = MediaPlayerViewModel.WeakSubscribe(nameof(MediaPlayerViewModel.DroppedFrameRequest), DroppedFrameRequestHandler); }
private void MediaPlayer_MediaOpened(MediaPlayer sender, object args) { App.RunOnUIThread(() => { MediaPlayerViewModel.LoadMediaPlayer(sender); BindingViewModel(); }); }
private async void MediaPlayer_MediaOpened(FrameMediaPlayer sender, object args) { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { BindingViewModel(); MediaPlayerViewModel.LoadMediaPlayer(sender); System.Diagnostics.Debug.WriteLine("Media Opened"); }); }
/// ------------------------------------------------------------------------------------ protected virtual void UpdateStatusLabelsDisplay() { _labelSegmentXofY.Visible = false; _labelSegmentNumber.Visible = true; _labelSegmentNumber.Text = string.Format(_segmentNumberFormat, _viewModel.GetSegmentCount()); _labelTimeDisplay.Text = MediaPlayerViewModel.GetTimeDisplay( (float)GetCurrentTimeForTimeDisplay().TotalSeconds, (float)_viewModel.OrigWaveStream.TotalTime.TotalSeconds); }
/// <summary> /// Inicializa las librerĂas /// </summary> public override void InitLibraries(IHostPluginsController hostPluginsController) { MainInstance = this; HostPluginsController = hostPluginsController; Name = "MediaPlayer"; ViewModelManager = new MediaPlayerViewModel("MediaPlayer", HostPluginsController.HostViewModelController, HostPluginsController.ControllerWindow, hostPluginsController.DialogsController, ViewsController, GetRouteIcons()); ViewModelManager.InitModule(); }
/// ------------------------------------------------------------------------------------ private void HandleCursorTimeChanged(Media.Audio.WaveControlBasic ctrl, TimeSpan cursorTime) { if (InvokeRequired) { Invoke(new Action(() => HandleCursorTimeChanged(ctrl, cursorTime))); return; } _labelCursorTime.Text = MediaPlayerViewModel.GetTimeDisplay( (float)cursorTime.TotalSeconds, (float)_oralAnnotationWaveViewer.AudioLength.TotalSeconds); }
/// ------------------------------------------------------------------------------------ public NewSessionsFromFilesDlg(NewSessionsFromFileDlgViewModel viewModel) { Logger.WriteEvent("NewSessionsFromFilesDlg constructor"); InitializeComponent(); var selectedCol = new DataGridViewCheckBoxColumn(); selectedCol.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; selectedCol.DataPropertyName = "Selected"; selectedCol.HeaderText = string.Empty; selectedCol.Name = "selectedCol"; selectedCol.Resizable = DataGridViewTriState.False; selectedCol.SortMode = DataGridViewColumnSortMode.Automatic; _gridFiles.Grid.Columns.Insert(0, selectedCol); _chkBoxColHdrHandler = new CheckBoxColumnHeaderHandler(selectedCol); _gridFiles.InitializeGrid("NewSessionsFromFilesDlg"); _gridFiles.AfterComponentSelectionChanged = HandleComponentFileSelected; Controls.Add(_panelProgress); _labelIncomingFiles.Font = Program.DialogFont; _labelInstructions.Font = Program.DialogFont; _linkFindFiles.Font = Program.DialogFont; _labelSourceFolder.Font = new Font(Program.DialogFont, FontStyle.Bold); _panelProgress.Visible = false; if (Settings.Default.NewSessionsFromFilesDlg == null) { StartPosition = FormStartPosition.CenterScreen; Settings.Default.NewSessionsFromFilesDlg = FormSettings.Create(this); } _folderMissingMsgCtrl = new NewSessionsFromFilesDlgFolderNotFoundMsg(); _gridFiles.Controls.Add(_folderMissingMsgCtrl); _folderMissingMsgCtrl.BringToFront(); _mediaPlayerPanel.BorderStyle = BorderStyle.None; _mediaPlayerViewModel = new MediaPlayerViewModel(); _mediaPlayerViewModel.SetVolume(Settings.Default.MediaPlayerVolume); _mediaPlayer = new MediaPlayer(_mediaPlayerViewModel); _mediaPlayer.Dock = DockStyle.Fill; _mediaPlayerPanel.Controls.Add(_mediaPlayer); DialogResult = DialogResult.Cancel; _viewModel = viewModel; _viewModel.FilesChanged += UpdateDisplay; _viewModel.FileLoadingStarted += InitializeProgressIndicatorForFileLoading; _viewModel.FilesLoaded += UpdateFileLoadingProgress; _viewModel.FileLoadingCompleted += FileLoadingProgressComplete; _viewModel.Initialize(this); }
public MediaMessengerController(MediaPlayerViewModel mainViewModel) { // Asigna el controlador principal MainViewModel = mainViewModel; // Asinga los manejadores de events MainViewModel.HostController.Messenger.Sent += (sender, evntArgs) => { if (evntArgs != null && evntArgs.MessageSent is MessagePlayMedia message) { TreatMessagePlayMedia(message); } }; }
/// ------------------------------------------------------------------------------------ protected virtual void OnPlayingback(WaveControlBasic ctrl, TimeSpan current, TimeSpan total) { if (InvokeRequired) { Invoke(new Action(() => OnPlayingback(ctrl, current, total))); } else { _labelTimeDisplay.Text = MediaPlayerViewModel.GetTimeDisplay( (float)current.TotalSeconds, (float)total.TotalSeconds); } }
public void setNowPlayingCallback(MediaPlayerViewModel vm) { NSNotificationCenter.DefaultCenter.AddObserver( MPMusicPlayerController.NowPlayingItemDidChangeNotification, (notification) => Callback(notification, vm)); NSNotificationCenter.DefaultCenter.AddObserver( MPMusicPlayerController.PlaybackStateDidChangeNotification, (notification) => Callback(notification, vm)); NSNotificationCenter.DefaultCenter.AddObserver( MPMusicPlayerController.VolumeDidChangeNotification, (notification) => Callback(notification, vm)); //MPMusicPlayerController.SystemMusicPlayer.BeginGeneratingPlaybackNotifications (); }
/// ------------------------------------------------------------------------------------ public AudioVideoPlayer(ComponentFile file, string imageKey) : base(file, null, imageKey) { Logger.WriteEvent("AudioVideoPlayer constructor. file = {0}; imageKey = {1}", file, imageKey); InitializeComponent(); Name = "AudioVideoPlayer"; _mediaPlayerViewModel = new MediaPlayerViewModel(); _mediaPlayer = new MediaPlayer(_mediaPlayerViewModel); _mediaPlayer.Dock = DockStyle.Fill; Controls.Add(_mediaPlayer); FinishInitializing(file); }
/// ------------------------------------------------------------------------------------ public SegmenterDlgBase(SegmenterDlgBaseViewModel viewModel) : this() { _viewModel = viewModel; _viewModel.UpdateDisplayProvider = UpdateDisplay; _viewModel.OralAnnotationWaveAreaRefreshAction = () => _waveControl.InvalidateBottomReservedArea(); if (!_moreReliableDesignMode && FormSettings == null) { StartPosition = FormStartPosition.CenterScreen; FormSettings = FormSettings.Create(this); } _labelTimeDisplay.Text = MediaPlayerViewModel.GetTimeDisplay(0f, (float)_viewModel.OrigWaveStream.TotalTime.TotalSeconds); }
private void _mediaElement_MediaEnded(object sender, RoutedEventArgs e) { MediaPlayerViewModel dataContext = (MediaPlayerViewModel)base.DataContext; if (dataContext.ContentType == ContentType.Video) { dataContext.MediaElementState = MediaElementState.Stop; return; } if (!dataContext.CanGetNextFile(null)) { dataContext.MediaElementState = MediaElementState.Stop; return; } dataContext.GetNextFile.Execute(null); }
public void NavigatePage(string _pageName, string parameters, string callingPage) { _navigationStack.Add(_pageName); MessageBox.Show("added " + _pageName + " to stack"); CurrentPage = _pageName; switch (_pageName) { case "MediaPlayer": if (MediaPlayer == null) { MediaPlayerVM = new MediaPlayerViewModel(parameters); MediaPlayer = new MediaPlayer(parameters, callingPage); } MediaPlayer.DataContext = MediaPlayerVM; Navigator.NavigationService.Navigate(MediaPlayer); break; } }
public void LoadAndPlayFile_FileNameHasAsciiCharacter_Plays() { var pathname = MediaFileInfoTests.GetShortTestAudioFile(); _model.LoadFile(pathname); _model.SetVolume(0.01f); var logger = new DebugLogger(); ReflectionHelper.SetProperty(_model, "DebugOutput", logger); _model.PlaybackEnded += delegate { _model = null; File.Delete(pathname); }; _model.Play(); while (_model != null) { Thread.Sleep(10); } Assert.IsTrue(logger.GetText().Contains("Starting playback...")); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); ViewModel = new MediaPlayerViewModel(); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); toolbar = FindViewById <Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); if (toolbar != null) { SetSupportActionBar(toolbar); SupportActionBar.SetDisplayHomeAsUpEnabled(true); SupportActionBar.SetHomeButtonEnabled(true); } var exoPlayer = new ExoPlayerAudioImplementation(((MediaManagerImplementation)CrossMediaManager.Current).MediaSessionManager); exoPlayer.RequestHeaders = new Dictionary <string, string> { { "Test", "1234" } }; CrossMediaManager.Current.AudioPlayer = exoPlayer; //new AudioPlayerImplementation<ExoPlayerAudioService>(MediaSessionManager));} var previous = FindViewById <ImageButton>(Resource.Id.btnPrevious); previous.Click += async(sender, args) => { await ViewModel.MediaPlayer.PlayPrevious(); }; var playpause = FindViewById <ToggleButton>(Resource.Id.btnPlayPause); playpause.Click += async(sender, args) => { await ViewModel.MediaPlayer.PlayPause(); }; var next = FindViewById <ImageButton>(Resource.Id.btnNext); next.Click += async(sender, args) => { await ViewModel.MediaPlayer.PlayNext(); }; var position = FindViewById <TextView>(Resource.Id.textview_position); var duration = FindViewById <TextView>(Resource.Id.textview_duration); var seekbar = FindViewById <SeekBar>(Resource.Id.player_seekbar); seekbar.ProgressChanged += (sender, args) => { if (args.FromUser) { ViewModel.MediaPlayer.Seek(TimeSpan.FromSeconds(args.Progress)); } }; ViewModel.MediaPlayer.PlayingChanged += (sender, e) => { RunOnUiThread(() => { try { seekbar.Max = Convert.ToInt32(e.Duration.TotalSeconds); seekbar.Progress = Convert.ToInt32(Math.Floor(e.Position.TotalSeconds)); position.Text = $"{e.Position.Minutes:00}:{e.Position.Seconds:00}"; duration.Text = $"{e.Duration.Minutes:00}:{e.Duration.Seconds:00}"; } catch (Exception ex) { Console.WriteLine($"Exception : PlayingChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.BufferingChanged += (sender, args) => { RunOnUiThread(() => { try { Console.WriteLine($"BufferingChanged: {args.BufferedTime.TotalSeconds}"); seekbar.SecondaryProgress = Convert.ToInt32(args.BufferedTime.TotalSeconds); } catch (Exception ex) { Console.WriteLine($"Exception : BufferingChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.StatusChanged += (sender, e) => { Console.WriteLine($"StausChanged {e.Status}"); RunOnUiThread(() => { try { playpause.Checked = e.Status == MediaPlayerStatus.Playing || e.Status == MediaPlayerStatus.Loading || e.Status == MediaPlayerStatus.Buffering; if (e.Status == MediaPlayerStatus.Stopped || e.Status == MediaPlayerStatus.Failed || e.Status == MediaPlayerStatus.Loading) { seekbar.Progress = 0; seekbar.SecondaryProgress = 0; position.Text = "00:00"; duration.Text = "00:00"; } } catch (Exception ex) { Console.WriteLine($"Exception : StausChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.MediaFailed += (sender, e) => { try { Console.WriteLine($"Media failed => {e.Description}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFailed: {ex.Message}"); } }; ViewModel.MediaPlayer.MediaFileFailed += (sender, e) => { try { Console.WriteLine($"Media file ({e.File.Url}) failed: Message => {e.MediaExeption.Message}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileFailed: {ex.Message}"); } }; var title = FindViewById <TextView>(Resource.Id.textview_title); var subtitle = FindViewById <TextView>(Resource.Id.textview_subtitle); ViewModel.MediaPlayer.MediaFileChanged += (sender, args) => { try { Console.WriteLine($"File changed: {args.File.Metadata.Title}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileChanged: {ex.Message}"); } RunOnUiThread(() => { try { if (args.File.Url == ViewModel.Queue.Current.Url) { title.Text = args.File.Metadata.Title; subtitle.Text = args.File.Metadata.Artist; var cover = FindViewById <ImageView>(Resource.Id.imageview_cover); cover.SetImageBitmap(args.File.Metadata.AlbumArt as Bitmap); } } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileChangedUI: {ex.Message}"); } }); }; ViewModel.Queue.Clear(); ViewModel.Queue.Add(new MediaFile() { Type = MediaFileType.AudioUrl, Url = "https://ia800806.us.archive.org/15/items/Mp3Playlist_555/AaronNeville-CrazyLove.mp3" }); ViewModel.Queue.Add(new MediaFile() { Type = MediaFileType.AudioUrl, Url = "http://www.bensound.org/bensound-music/bensound-goinghigher.mp3" }); ViewModel.Queue.Add(new MediaFile() { Type = MediaFileType.AudioUrl, Url = "http://www.montemagno.com/sample.mp3" }); ViewModel.Queue.Add(new MediaFile() { Type = MediaFileType.AudioUrl, Url = "http://www.bensound.org/bensound-music/bensound-tenderness.mp3" }); }
/// ------------------------------------------------------------------------------------ private void UpdateRecordingDuration(TimeSpan duration) { _labelRecLength.Text = string.Format(_recordedLengthLabelFormat, MediaPlayerViewModel.MakeTimeString((float)duration.TotalSeconds)); }
// Method style void Callback(NSNotification notification, MediaPlayerViewModel vm) { Console.WriteLine("Received a notification MPMusicPlayerController", notification); //vm.updateRunNow(); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); ViewModel = new MediaPlayerViewModel(); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); toolbar = FindViewById <Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); if (toolbar != null) { SetSupportActionBar(toolbar); SupportActionBar.SetDisplayHomeAsUpEnabled(true); SupportActionBar.SetHomeButtonEnabled(true); } if (ShouldUseExoPlayer) { ((MediaManagerImplementation)CrossMediaManager.Current).MediaSessionManager = new MediaSessionManager(Application.Context, typeof(ExoPlayerAudioService)); var exoPlayer = new ExoPlayerAudioImplementation(((MediaManagerImplementation)CrossMediaManager.Current).MediaSessionManager); CrossMediaManager.Current.AudioPlayer = exoPlayer; } CrossMediaManager.Current.AudioPlayer.RequestHeaders = new Dictionary <string, string> { { "Test", "1234" } }; var previous = FindViewById <ImageButton>(Resource.Id.btnPrevious); previous.Click += async(sender, args) => { await PlaybackController.PlayPreviousOrSeekToStart(); }; var playpause = FindViewById <ToggleButton>(Resource.Id.btnPlayPause); playpause.Click += async(sender, args) => { await PlaybackController.PlayPause(); }; var next = FindViewById <ImageButton>(Resource.Id.btnNext); next.Click += async(sender, args) => { await PlaybackController.PlayNext(); }; var position = FindViewById <TextView>(Resource.Id.textview_position); var duration = FindViewById <TextView>(Resource.Id.textview_duration); var seekbar = FindViewById <SeekBar>(Resource.Id.player_seekbar); seekbar.ProgressChanged += (sender, args) => { if (args.FromUser) { PlaybackController.SeekTo(args.Progress); } }; ViewModel.MediaPlayer.PlayingChanged += (sender, e) => { RunOnUiThread(() => { try { seekbar.Max = Convert.ToInt32(e.Duration.TotalSeconds); seekbar.Progress = Convert.ToInt32(Math.Floor(e.Position.TotalSeconds)); position.Text = $"{e.Position.Minutes:00}:{e.Position.Seconds:00}"; duration.Text = $"{e.Duration.Minutes:00}:{e.Duration.Seconds:00}"; } catch (Exception ex) { Console.WriteLine($"Exception : PlayingChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.BufferingChanged += (sender, args) => { RunOnUiThread(() => { try { Console.WriteLine($"BufferingChanged: {args.BufferedTime.TotalSeconds}"); seekbar.SecondaryProgress = Convert.ToInt32(args.BufferedTime.TotalSeconds); } catch (Exception ex) { Console.WriteLine($"Exception : BufferingChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.StatusChanged += (sender, e) => { Console.WriteLine($"StausChanged {e.Status}"); RunOnUiThread(() => { try { playpause.Checked = e.Status == MediaPlayerStatus.Playing || e.Status == MediaPlayerStatus.Loading || e.Status == MediaPlayerStatus.Buffering; if (e.Status == MediaPlayerStatus.Stopped || e.Status == MediaPlayerStatus.Failed || e.Status == MediaPlayerStatus.Loading) { seekbar.Progress = 0; seekbar.SecondaryProgress = 0; position.Text = "00:00"; duration.Text = "00:00"; } } catch (Exception ex) { Console.WriteLine($"Exception : StausChanged: {ex.Message}"); } }); }; ViewModel.MediaPlayer.MediaFailed += (sender, e) => { try { Console.WriteLine($"Media failed => {e.Description}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFailed: {ex.Message}"); } }; ViewModel.MediaPlayer.MediaFileFailed += (sender, e) => { try { Console.WriteLine($"Media file ({e.File.Url}) failed: Message => {e.MediaExeption.Message}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileFailed: {ex.Message}"); } }; var title = FindViewById <TextView>(Resource.Id.textview_title); var subtitle = FindViewById <TextView>(Resource.Id.textview_subtitle); ViewModel.MediaPlayer.MediaFileChanged += (sender, args) => { try { Console.WriteLine($"File changed: {args.File.Metadata.Title}"); } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileChanged: {ex.Message}"); } RunOnUiThread(() => { try { if (args.File.Url == ViewModel.Queue.Current.Url) { title.Text = args.File.Metadata.Title; subtitle.Text = args.File.Metadata.Artist; var cover = FindViewById <ImageView>(Resource.Id.imageview_cover); cover.SetImageBitmap(args.File.Metadata.AlbumArt as Bitmap); } } catch (Exception ex) { Console.WriteLine($"Exception : MediaFileChangedUI: {ex.Message}"); } }); }; ViewModel.Init(); }
public MusicPlayerPage() { this.InitializeComponent(); this.BindingContext = this.vm = App.Container.Resolve <MediaPlayerViewModel>(); this.vm.Playback.PlaybackStatusChanged += this.Playback_PlaybackStatusChanged; }
public void InitDataContext(MediaPlayerViewModel viewModel) { DataContext = viewModel; ViewModel.PlayerController.OnStateChanged += Player_OnStateChanged; }
public void Setup() { _model = new MediaPlayerViewModel(); _stream = new MemoryStream(); _model.SetStdInForTest(new StreamWriter(_stream)); }
private void DispatcherTimer_Tick(object sender, object e) { MediaPlayerViewModel.UpdatePosition(); }