如何在 xamarin 表单中的单个页面中播放多个音频文件

how to play multiful audio files in a single page in xamarin forms

大家好,我现在可以根据@Bas H 的内容播放不同页面的音频文件,回答了我几天的问题并为此做了一个小项目,但现在我想要他或谁能告诉我如何在一个页面中播放多个音频文件。

这是一个例子:

xaml 页数:

<Frame>
<StackLayout>
        <ImageButton
            x:Name="btnPlay"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="Play.png"
            VerticalOptions="Center"
            WidthRequest="50" />
        <ImageButton
            x:Name="btnPause"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="pause.png"
            VerticalOptions="Center"
            WidthRequest="50" 
            IsVisible="false"/>
        <Label
            HorizontalOptions="Start"
            Text="Loop:"
            VerticalOptions="Center" />
        <Switch
            x:Name="switchLoop"
            HorizontalOptions="Start"
            IsToggled="False"
            VerticalOptions="Center" />
    </StackLayout>
</Frame>
<Frame>
<StackLayout>
        <ImageButton
            x:Name="btnPlaytwo"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="Play.png"
            VerticalOptions="Center"
            WidthRequest="50" />
        <ImageButton
            x:Name="btnPausetwo"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="pause.png"
            VerticalOptions="Center"
            WidthRequest="50" 
            IsVisible="false"/>
        <Label
            HorizontalOptions="Start"
            Text="Loop:"
            VerticalOptions="Center" />
        <Switch
            x:Name="switchLooptwo"
            HorizontalOptions="Start"
            IsToggled="False"
            VerticalOptions="Center" />
    </StackLayout>
</Frame>
<Frame>
<StackLayout>
        <ImageButton
            x:Name="btnPlaythree"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="Play.png"
            VerticalOptions="Center"
            WidthRequest="50" />
        <ImageButton
            x:Name="btnPausethree"
            HeightRequest="50"
            HorizontalOptions="Center"
            Source="pause.png"
            VerticalOptions="Center"
            WidthRequest="50" 
            IsVisible="false"/>
        <Label
            HorizontalOptions="Start"
            Text="Loop:"
            VerticalOptions="Center" />
        <Switch
            x:Name="switchLoopthree"
            HorizontalOptions="Start"
            IsToggled="False"
            VerticalOptions="Center" />
    </StackLayout>
</Frame>

隐藏代码:

 public HeadProjectAudioPage()
    {
        InitializeComponent();

        btnPause.IsVisible = false;

        var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
      
        player.PlaybackEnded += (sender, e) =>
        {
            btnPlay.IsVisible = true;
            btnPause.IsVisible = false;
        };
        player.Load("running.mp3");

        btnPlay.Clicked += BtnPlayClicked;
        btnPause.Clicked += BtnPauseClicked;
        switchLoop.Toggled += SwitchLoopToggled;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        btnPause.IsVisible = false;
    }

    private void SwitchLoopToggled(object sender, ToggledEventArgs e)
    {
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Loop = switchLoop.IsToggled;
    }

    private void BtnPlayClicked(object sender, EventArgs e)
    {
        btnPause.IsVisible = true;
        btnPlay.IsVisible = false;
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Play();       
    }

    private void BtnPauseClicked(object sender, EventArgs e)
    {
        btnPlay.IsVisible = true;
        btnPause.IsVisible = false;
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Pause();
    }

}

感谢您的贡献。

我仍然使用选择器,否则循环不起作用。

因为 mp3 是在启动时加载的,所以我使用选择器来更改 mp3。选择器是隐藏的。想要更改或添加 mp3 广告到选择器。

HeadProjectAudioPage.xaml

 <Picker
            x:Name="picker"
            HorizontalTextAlignment="Center"
            SelectedIndexChanged="picker_SelectedIndexChanged"
            IsVisible="false">
            <Picker.ItemsSource>
                <x:Array Type="{x:Type x:String}">
                    <x:String>running.mp3</x:String>
                    <x:String>Drup.mp3</x:String>
                    <x:String>Diminished.mp3</x:String>
                </x:Array>
            </Picker.ItemsSource>
        </Picker>

在 InitializeComponent() 之后添加这个;在 HeadProjectAudioPage.xaml.cs

   picker.SelectedItem = "running.mp3"; ///////// You must selected before start if not a error

在 HeadProjectAudioPage.xaml.cs 中添加 2 个 ImageButtons

   btnPlaytwo.Clicked += BtnPlaytwoClicked;
        btnPlaythree.Clicked += BtnPlaythreeClicked;

并在 HeadProjectAudioPage.xaml.cs

中启动 mp3
private void BtnPlayClicked(object sender, EventArgs e)
    {         
          picker.SelectedItem = "running.mp3";
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Play();
    }
    private void BtnPlaytwoClicked(object sender, EventArgs e)
    {           
          picker.SelectedItem = "Drup.mp3";
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Play();
    }

    private void BtnPlaythreeClicked(object sender, EventArgs e)
    {
         picker.SelectedItem = "Diminished.mp3";
        Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current.Play();
    }

当启动 mp3 时,选择器会更改并播放该 mp3,循环也有效。 您可以为所有循环添加代码。

也许不是最好的方法,但它确实有效,可以通过不同的方式加载 mp3。但这是一个想法