2015-12-13 12 views
6

ich eine App für Android, iOS und Windows Phone mit Xamarin.forms zu schaffen. Meine Frage ist, wie man ein MP3 oder WAV mit Xamarin Forms spielt?Wie spielt man Sounds auf Xamarin.forms?

My Business-Logik wird von der Shared-Projekt behandelt und ich weiß nicht, wie Plattform zu nutzen, speziell „Mediaplayer“.

Antwort

3

ich eine Audio-Manager gerade fertig zu schaffen für Xamarin th funktioniert auf iOS, Android, UWP, Windows 8.1 und Windows Phone 8.1. Wenn Sie interessiert sind, überprüfen Sie es bei https://github.com/jcphlux/XamarinAudioManager. Es gibt einen Link zu einem Nuget-Paket oder Sie können das Projekt klonen.

5

jetzt Xamarin.forms hat API nicht klingen, so dass Sie DependencyService den folgenden Link Überprüfen Sie verwenden müssen, ist es für mich funktioniert gut:

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

Wir benötigen eine Schnittstelle zu schaffen, die wird in plattformspezifischen Projekt umgesetzt werden, nannte ich es als IAudio.cs und der Code für das gleiche ist wie folgt:

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

Android Lösung:

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 Lösung:

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

Und schließlich werden wir den folgenden Code in unserem PCL/gemeinsames Projekt, um die Audiodatei abzuspielen verwenden.

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

Getestet und Arbeiten. Hervorragende Dokumentation hier: https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/introduction/ – pollaris

2

könnten Sie Xam.Plugin.SimpleAudioPlayer einen Versuch geben, da Xamarin.Forms einen Sound-API nicht.

Kurz gesagt, fügen Sie das NuGet Paket zu jedem plattformspezifische Projekt, das Sie unterstützen möchten. Kopieren Sie die Audio-Dateien in den Ordner Assets für Windows UWP und Android und legen Sie die Build-Aktionen wie Content und Android Asset sind. Für iOS die Audio-Dateien in den Ordner Ressourcen und stellen Sie die Build-Aktion BundleResource kopieren, spielen die Dateien dann in etwa so:

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