web-dev-qa-db-ja.com

Xamarin.formsでサウンドを再生する方法は?

Xamarin.formsを使用して、Android、iOS、Windows Phone用のアプリを作成しています。私の質問は、XamarinフォームでMP3またはWAVを再生する方法ですか?

私のビジネスロジックは共有プロジェクトによって処理され、プラットフォーム「具体的にはMediaPlayer」の使用方法がわかりません。

13
Cami Rodriguez

IOS、Android、UWP、Windows 8.1、およびWindows Phone 8.1で動作するXamarin用のAudioManagerの作成が完了しました。興味がある場合は、 https://github.com/jcphlux/XamarinAudioManager で確認してください。 Nugetパッケージへのリンクがあるか、プロジェクトを自由に複製してください。

8
JCPhlux

現在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");
11
Mike Darwish

Xamarin.Formsには現時点でサウンドAPIがないため、プラットフォーム固有のカスタムコードを作成する必要があると思います。

James Montemagnoの実装方法を確認 TextToSpeechDependencyService )を使用

参照:

6
Vaikesh

Xamarin.FormsにはサウンドAPIがないため、 Xam.Plugin.SimpleAudioPlayer を試してみてください。

つまり、サポートしたいプラットフォーム固有の各プロジェクトにNuGetパッケージを追加します。オーディオファイルをWindows UWPおよびAndroidのAssetsフォルダーにコピーし、ビルドアクションをそれぞれContentおよびAndroid Assetとして設定します。iOSの場合は、オーディオファイルをResourcesフォルダーとビルドアクションをBundleResourceに設定し、次のようにファイルを再生します。

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