Cam*_*uez 12 c# cross-platform xamarin xamarin.forms
我正在使用Xamarin.forms为Android,iOS和Windows Phone创建一个应用程序.我的问题是如何使用Xamarin Forms播放mp3或wav?
我的业务逻辑由共享项目处理,我不知道如何使用特定平台"MediaPlayer".
Mik*_*ish 11
现在Xamarin.form s没有声音API,所以你需要使用DependencyService
检查以下链接,它对我来说工作正常:
https://www.codeproject.com/Articles/1088094/Playing-audio-mp-File-in-Xamarin-Forms
我们需要创建一个将在平台特定项目中实现的接口,我将其命名为IAudio.cs,其代码如下:
using System;
namespace AudioPlayEx
{
public interface IAudio
{
void PlayAudioFile(string fileName);
}
}
Run Code Online (Sandbox Code Playgroud)
Android解决方案:
using System;
using Xamarin.Forms;
using AudioPlayEx.Droid;
using Android.Media;
using Android.Content.Res;
[assembly: Dependency(typeof(AudioService))]
namespace AudioPlayEx.Droid
{
public class AudioService: IAudio
{
public AudioService ()
{
}
public void PlayAudioFile(string fileName){
var player = new MediaPlayer();
var fd = global::Android.App.Application.Context.Assets.OpenFd(fileName);
player.Prepared += (s, e) =>
{
player.Start();
};
player.SetDataSource(fd.FileDescriptor,fd.StartOffset,fd.Length);
player.Prepare();
}
}
}
Run Code Online (Sandbox Code Playgroud)
iOS解决方案:
using System;
using Xamarin.Forms;
using AudioPlayEx;
using AudioPlayEx.iOS;
using System.IO;
using Foundation;
using AVFoundation;
[assembly: Dependency (typeof (AudioService))]
namespace AudioPlayEx.iOS
{
public class AudioService : IAudio
{
public AudioService ()
{
}
public void PlayAudioFile(string fileName)
{
string sFilePath = NSBundle.MainBundle.PathForResource
(Path.GetFileNameWithoutExtension(fileName), Path.GetExtension(fileName));
var url = NSUrl.FromString (sFilePath);
var _player = AVAudioPlayer.FromUrl(url);
_player.FinishedPlaying += (object sender, AVStatusEventArgs e) => {
_player = null;
};
_player.Play();
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我们将在PCL /共享项目中使用以下代码来播放音频文件.
DependencyService.Get<IAudio>().PlayAudioFile("MySong.mp3");
Run Code Online (Sandbox Code Playgroud)
rra*_*lvv 10
您可以Xam.Plugin.SimpleAudioPlayer尝试一下,因为 Xamarin.Forms 没有健全的 API。
简而言之,将 NuGet 包添加到您希望支持的每个特定于平台的项目中。将音频文件复制到 Windows UWP 和 Android 的 Assets 文件夹,并将构建操作分别设置为Content和Android Asset。对于 iOS,将音频文件复制到 Resources 文件夹并将构建操作设置为BundleResource,然后像这样播放文件:
var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
player.Load("intro_sound.mp3");
player.Play();
Run Code Online (Sandbox Code Playgroud)
小智 8
我刚刚为iOS,Android,UWP,Windows 8.1和Windows Phone 8.1创建了适用于Xamarin的AudioManager.如果您有兴趣,请访问https://github.com/jcphlux/XamarinAudioManager.有一个Nuget包的链接或随意克隆项目.
我认为,Xamarin.Forms目前没有声音API,所以你必须编写自定义的,特定于平台的代码.
检查James Montemagno如何实现TextToSpeech(使用DependencyService)
参考:
| 归档时间: |
|
| 查看次数: |
14251 次 |
| 最近记录: |