我正在使用Xamarin.forms爲Android,iOS和Windows Phone創建應用程序。我的問題是如何發揮與Xamarin形式的MP3或WAV?如何在Xamarin.forms上播放聲音?
我的業務邏輯是由Shared Project處理的,我不知道如何專門使用平臺「MediaPlayer」。
我正在使用Xamarin.forms爲Android,iOS和Windows Phone創建應用程序。我的問題是如何發揮與Xamarin形式的MP3或WAV?如何在Xamarin.forms上播放聲音?
我的業務邏輯是由Shared Project處理的,我不知道如何專門使用平臺「MediaPlayer」。
我剛剛完成了創建Xamarin日的AudioManager適用於iOS,Android,UWP,Windows 8.1和Windows Phone 8.1。如果您有興趣,請登錄https://github.com/jcphlux/XamarinAudioManager。有一個指向Nuget包的鏈接,或者可以隨意克隆該項目。
我認爲,Xamarin.Forms目前沒有聲音API,因此您必須編寫自定義的平臺特定的代碼。
檢查詹姆斯Montemagno工具TextToSpeech(使用DependencyService)
如何參考:
現在Xamarin.forms還沒有健全的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);
}
}
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();
}
}
}
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();
}
}
}
最後,我們會以播放音頻文件,使用下面的代碼在我們的PCL /共享的項目。
DependencyService.Get<IAudio>().PlayAudioFile("MySong.mp3");
你可能會給Xam.Plugin.SimpleAudioPlayer
一個嘗試,因爲Xamarin.Forms沒有良好的API。
簡而言之,將NuGet包添加到您希望支持的每個平臺特定項目。將音頻文件複製到適用於Windows UWP和Android的Assets文件夾,並將構建操作分別設爲Content
和Android Asset
。對於iOS的音頻文件複製到資源文件夾,並生成操作設置爲BundleResource
,然後播放文件,像這樣:
var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
player.Load("intro_sound.mp3");
player.Play();
測試和工作。優秀的文檔在這裏:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/introduction/ – pollaris