Xamarin节拍器实现卡顿问题求助及正确实现方案问询
Xamarin节拍器卡顿问题优化求助
我是Xamarin新手,正在开发一款音乐类APP,其中包含节拍器功能:支持输入BPM,通过单个按钮控制启停,使用SimpleAudioPlayer插件播放节拍音效。目前已完成基础实现,但节拍器存在卡顿延迟问题,不符合需求。
原实现代码
// OFF by default bool _MetronomeOn = false; async private void btnMetronome_Clicked(object sender, EventArgs e) { _MetronomeOn = !_MetronomeOn; // While Metronome is On while (_MetronomeOn) { // Get the bpm from ui double bpm; if (!Double.TryParse(entryMetronome.Text, out bpm)) bpm = 90; double secInterval = 60 / bpm; var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current; player.Load("metronome.mp3"); if (_MetronomeOn) { // NOTE : Added Xam.Plugin.SimpleAudioPlayer nugget package player.Play(); await Task.Delay(TimeSpan.FromSeconds(secInterval)); } } }
卡顿原因推测
我不确定卡顿具体原因,推测可能是循环实现方式或插件重复加载资源导致。
已完成的优化
已参考建议将音频播放器设为全局变量,在OnAppearing()方法中预加载音频文件,卡顿情况有所改善。下一步计划实现正确的定时器,寻求相关帮助。
优化后的代码片段:
public partial class MainPage : ContentPage { // NOTE : Added Xam.Plugin.SimpleAudioPlayer nugget package to the Android Solution // The sound itself is loaded (not played) in OnAppearing() Plugin.SimpleAudioPlayer.ISimpleAudioPlayer player; public MainPage() { InitializeComponent(); } // When the main view is launched and Shuffle Button animation protected override void OnAppearing() { base.OnAppearing(); // Load the mp3. It must be in : // Android : Asset folder and build action is AndroidAsset // iOS : Resource folder and build action is BundleResource player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current; player.Load("metronome.mp3"); ... } ... }
内容的提问来源于stack exchange,提问作者Beb
相关产品推荐
相关产品推荐

