You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms如何在单个页面中实现多个音频文件播放

单页面多音频独立播放解决方案

核心问题说明

你当前代码仅调用了Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current全局单实例播放器,因此仅支持单音频控制。要实现3路音频独立播放、暂停、循环控制,需要为每一路音频创建独立的播放器实例,分别绑定对应控件的事件即可。

修改后的完整后台代码

using Plugin.SimpleAudioPlayer;

public partial class HeadProjectAudioPage : ContentPage
{
    // 为每个音频声明独立的播放器实例
    private readonly ISimpleAudioPlayer _player1;
    private readonly ISimpleAudioPlayer _player2;
    private readonly ISimpleAudioPlayer _player3;

    public HeadProjectAudioPage()
    {
        InitializeComponent();

        // 初始化第一个播放器(对应running.mp3)
        _player1 = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        _player1.Load("running.mp3");
        _player1.PlaybackEnded += (sender, e) =>
        {
            btnPlay.IsVisible = true;
            btnPause.IsVisible = false;
        };
        // 绑定第一个播放器控件事件
        btnPlay.Clicked += BtnPlay1Clicked;
        btnPause.Clicked += BtnPause1Clicked;
        switchLoop.Toggled += SwitchLoop1Toggled;

        // 初始化第二个播放器(替换为你第二个音频的文件名)
        _player2 = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        _player2.Load("audio2.mp3");
        _player2.PlaybackEnded += (sender, e) =>
        {
            btnPlaytwo.IsVisible = true;
            btnPausetwo.IsVisible = false;
        };
        // 绑定第二个播放器控件事件
        btnPlaytwo.Clicked += BtnPlay2Clicked;
        btnPausetwo.Clicked += BtnPause2Clicked;
        switchLooptwo.Toggled += SwitchLoop2Toggled;

        // 初始化第三个播放器(替换为你第三个音频的文件名)
        _player3 = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        _player3.Load("audio3.mp3");
        _player3.PlaybackEnded += (sender, e) =>
        {
            btnPlaythree.IsVisible = true;
            btnPausethree.IsVisible = false;
        };
        // 绑定第三个播放器控件事件
        btnPlaythree.Clicked += BtnPlay3Clicked;
        btnPausethree.Clicked += BtnPause3Clicked;
        switchLoopthree.Toggled += SwitchLoop3Toggled;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        // 页面显示时所有暂停按钮隐藏
        btnPause.IsVisible = false;
        btnPausetwo.IsVisible = false;
        btnPausethree.IsVisible = false;
    }

    #region 第一个播放器事件处理
    private void SwitchLoop1Toggled(object sender, ToggledEventArgs e)
    {
        _player1.Loop = switchLoop.IsToggled;
    }

    private void BtnPlay1Clicked(object sender, EventArgs e)
    {
        btnPause.IsVisible = true;
        btnPlay.IsVisible = false;
        _player1.Play();       
    }

    private void BtnPause1Clicked(object sender, EventArgs e)
    {
        btnPlay.IsVisible = true;
        btnPause.IsVisible = false;
        _player1.Pause();
    }
    #endregion

    #region 第二个播放器事件处理
    private void SwitchLoop2Toggled(object sender, ToggledEventArgs e)
    {
        _player2.Loop = switchLooptwo.IsToggled;
    }

    private void BtnPlay2Clicked(object sender, EventArgs e)
    {
        btnPausetwo.IsVisible = true;
        btnPlaytwo.IsVisible = false;
        _player2.Play();       
    }

    private void BtnPause2Clicked(object sender, EventArgs e)
    {
        btnPlaytwo.IsVisible = true;
        btnPausetwo.IsVisible = false;
        _player2.Pause();
    }
    #endregion

    #region 第三个播放器事件处理
    private void SwitchLoop3Toggled(object sender, ToggledEventArgs e)
    {
        _player3.Loop = switchLoopthree.IsToggled;
    }

    private void BtnPlay3Clicked(object sender, EventArgs e)
    {
        btnPausethree.IsVisible = true;
        btnPlaythree.IsVisible = false;
        _player3.Play();       
    }

    private void BtnPause3Clicked(object sender, EventArgs e)
    {
        btnPlaythree.IsVisible = true;
        btnPausethree.IsVisible = false;
        _player3.Pause();
    }
    #endregion
}

优化建议

如果后续需要更多音频控件,可将音频播放的UI和逻辑封装为自定义控件,只需传入音频路径即可复用,无需重复编写XAML和事件代码。

内容的提问来源于stack exchange,提问作者Ishaq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:04