UWP Metronome App - MediaPlayerElement 传输控制和性能
Posted
技术标签:
【中文标题】UWP Metronome App - MediaPlayerElement 传输控制和性能【英文标题】:UWP Metronome App - MediaPlayerElement transport controls and performance 【发布时间】:2016-12-12 01:24:25 【问题描述】:我决定创建一个节拍器应用程序。所以,我是一个“初学者”,我做这个项目的目的是为了更多地了解 OOP 和其他东西。 我的应用程序运行良好,但是,我仍然有一些问题(小问题)。
我已使用 MediaPlayerElement 播放声音滴答声。我不希望在执行过程中出现媒体传输控件,为此,我写了
mediaPlayer.MediaPlayer.SystemMediaTransportControls.IsEnabled = false;
但媒体传输控件仍然启用。
另一个问题是应用程序在PC上运行得很好(也许有更多的处理能力),但是在智能手机上,啊,不好用!当 BPM 较高(大于 190 或 200)时,应用程序无法正确播放声音,几乎一直滞后。代码如下:
玩家来源
class Player
MediaPlayerElement mediaPlayer = new MediaPlayerElement();
public void Init()
try
Uri src = new Uri("ms-appx:///Assets/beep.wav");
mediaPlayer.Source = MediaSource.CreateFromUri(src);
mediaPlayer.MediaPlayer.SystemMediaTransportControls.IsEnabled = false;
catch (Exception e)
System.Diagnostics.Debug.WriteLine("Error!" + e);
public void Play()
mediaPlayer.MediaPlayer.Play();
public Player()
Init();
节拍器音源
class Metronome
private Player player = new Player();
private DispatcherTimer dispTimer = new DispatcherTimer();
private double interval;
public int Tempo get; set;
public bool IsActive get; set; //returns the state
private void Init()
interval = (double)60 / Tempo - 0.02;
dispTimer.Tick += DispTimer_Tick;
dispTimer.Interval = TimeSpan.FromSeconds(interval);
private void DispTimer_Tick(object sender, object e)
player.Play();
public void Start()
Init();
dispTimer.Start();
IsActive = true;
public void Stop()
dispTimer.Stop();
IsActive = false;
我有一个与 Tempo 属性关联的滑块,当用户按下开始按钮时,节拍器会播放声音。 这就像一个计时器,当达到指定的值时它会播放声音。
在计算机 (Core I3) 中,此应用程序最多使用 1.0% 的 CPU,我不知道智能手机 (Lumia 535) 中的 CPU 使用率。
** 我的 CPU 支持 VT-X,但我的芯片组不支持,所以,我尽我所能! :p
感谢您的帮助! :)
【问题讨论】:
【参考方案1】:您可以使用 BackgroundMediaPlayer 来代替 MediaPlayer。
Uri src = new Uri("ms-appx:///Assets/beep.wav");
BackgroundMediaPlayer.Current.SetUriSource(src);
另外... 每次 Init() 节拍器时,都会添加一个额外的事件处理程序。我假设您不是每次都创建一个新的节拍器这意味着当您单击开始,然后停止,然后重新开始时 - 每个滴答声都会调用 player.Play() 两次。这也是获得内存泄漏的好方法。我会取消订阅 Stop() 上的事件。更多关于 here (MSDN)。
dispTimer.Tick -= DispTimer_Tick;
祝你学习顺利。
【讨论】:
后台播放器运行良好,媒体传输控件被禁用。 SetUriSource 已过时”。应用程序在移动设备中的性能仍然相同,但我会为此搜索一些解决方案。谢谢!以上是关于UWP Metronome App - MediaPlayerElement 传输控制和性能的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UWP 视频 StorageFile 中保存 System.Media.DateEncoded
UWP 硬件视频解码 - DirectX12 与 Media Foundation
如何在没有拓扑的情况下将 Windows Media Foundation 与 UWP 结合使用