Как играть звуки на Xamarin.форм?

Я создаю приложение для Android, iOS и Windows Phone с помощью Xamarin.формы. Мой вопрос в том, как играть в mp3 или wav с формами Xamarin?

моя бизнес-логика обрабатывается общим проектом, и я не знаю, как использовать платформу специально "MediaPlayer".

4 ответов


Я только что закончил создание AudioManager для Xamarin, который работает на iOS, Android, UWP, Windows 8.1 и Windows Phone 8.1. Если вы заинтересованы проверить его наhttps://github.com/jcphlux/XamarinAudioManager. Существует ссылка на пакет Nuget или не стесняйтесь клонировать проект.


прямо сейчас Xamarin.форма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);
        }
   }

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 / shared для воспроизведения аудиофайла.

DependencyService.Get<IAudio>().PlayAudioFile("MySong.mp3");

думаю, Xamarin.На данный момент Forms не имеет звуковых API, поэтому вам придется писать пользовательский, специфичный для платформы код.

проверить, как Джеймс Монтеманьо осуществляет преобразования текста в речь (через DependencyService)

относятся :


вы можете Xam.Plugin.SimpleAudioPlayer попытка, начиная с Xamarin.Формы не имеют звукового API.

короче говоря, добавьте пакет NuGet к каждому конкретному проекту платформы, который вы хотите поддержать. Скопируйте аудиофайлы в папку Assets для Windows UWP и Android и задайте действия сборки как Content и Android Asset соответственно. Для iOS скопируйте аудиофайлы в папку Resources и установите действие сборки в BundleResource, затем воспроизвести файлы следующим образом:

var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current; 
player.Load("intro_sound.mp3");
player.Play();