gpt4 book ai didi

c# - 如何在 Xamarin.forms 上播放声音?

转载 作者:可可西里 更新时间:2023-11-01 08:33:53 26 4
gpt4 key购买 nike

我正在使用 Xamarin.forms 创建适用于 Android、iOS 和 Windows Phone 的应用。我的问题是如何使用 Xamarin Forms 播放 mp3 或 wav?

我的业务逻辑由共享项目处理,我不知道如何使用特定平台“MediaPlayer”。

最佳答案

目前Xamarin.forms还没有完善的API,需要使用DependencyService

检查以下链接,它对我来说工作正常:

https://www.codeproject.com/Articles/1088094/Playing-audio-mp-File-in-Xamarin-Forms

我们需要创建一个将在平台特定项目中实现的接口(interface),我将其命名为 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");

关于c# - 如何在 Xamarin.forms 上播放声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com