How to play sounds on Xamarin.forms?

前端 未结 4 1736
星月不相逢
星月不相逢 2021-02-01 07:42

I\'m creating an app for Android, iOS and Windows Phone using Xamarin.forms. My question is how to play a mp3 or wav with Xamarin Forms?

My business logic is handled by

4条回答
  •  鱼传尺愫
    2021-02-01 07:58

    Right now Xamarin.forms has not sound API, so you need to use DependencyService

    Check the following link, it is working fine for me:

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

    We would require to create an Interface which will be implemented in platform specific project, I named it as IAudio.cs and the code for the same is as follows:

    using System;
      namespace AudioPlayEx
       {
        public interface IAudio
            {
                void PlayAudioFile(string fileName);
            }
       }
    

    Android Solution:

        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 Solution:

    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();
            }
        }
    }
    

    And finally, we will use the following code in our PCL/shared project in order to play the audio file.

    DependencyService.Get().PlayAudioFile("MySong.mp3");
    

提交回复
热议问题