gpt4 book ai didi

c# - UWP Metronome App - MediaPlayerElement 传输控制和性能

转载 作者:行者123 更新时间:2023-12-03 00:36:08 28 4
gpt4 key购买 nike

我已决定创建一个节拍器应用程序。所以,我是一个“初学者”,我制作这个项目的目的是为了更多地了解 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 属性关联的 slider ,当用户按下开始按钮时,节拍器会播放声音。
这就像一个计时器,当达到指定的值时它会播放声音。

在计算机 (Core I3) 中,此应用程序最多使用 1.0% 的 CPU,我不知道智能手机 (Lumia 535) 中的 CPU 使用率。

** 我的 CPU 支持 VT-X,但我的芯片组不支持,所以,我尽我所能! :p

谢谢您的帮助! :)

最佳答案

代替 MediaPlayer,您可以使用 BackgroundMediaPlayer。

Uri src = new Uri("ms-appx:///Assets/beep.wav");
BackgroundMediaPlayer.Current.SetUriSource(src);

另外...每次 Init() 节拍器时,您都在添加一个额外的事件处理程序。我假设您不是每次都创建一个新的节拍器这意味着当您单击开始,然后停止,然后重新开始时 - 每个滴答声都会调用 player.Play() 两次。这也是获得内存泄漏的好方法。我会取消订阅 Stop() 上的事件。更多关于 here (MSDN)。
dispTimer.Tick -= DispTimer_Tick;

祝你学习顺利。

关于c# - UWP Metronome App - MediaPlayerElement 传输控制和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41093014/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com