如何在 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。但这是一个想法
大家好,我现在可以根据@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
中启动 mp3private 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。但这是一个想法