2015-12-13 24 views
6

Tôi đang tạo ứng dụng cho Android, iOS và Windows Phone bằng Xamarin.forms. Câu hỏi của tôi là làm thế nào để chơi một mp3 hoặc wav với các hình thức Xamarin?Làm thế nào để phát âm thanh trên Xamarin.forms?

Logic nghiệp vụ của tôi được xử lý bởi Dự án được chia sẻ và tôi không biết cách sử dụng nền tảng cụ thể "MediaPlayer".

Trả lời

3

tôi chỉ tạo ra một AudioManager cho thứ Xamarin xong tại các công trình trên iOS, Android, UWP, Windows 8.1 và Windows Phone 8.1. Nếu bạn quan tâm, hãy xem tại số https://github.com/jcphlux/XamarinAudioManager. Có một liên kết đến một gói Nuget hoặc cảm thấy tự do để sao chép dự án.

5

ngay bây giờ Xamarin.forms đã không âm thanh API, vì vậy bạn cần phải sử dụng DependencyService Kiểm tra liên kết sau đây, nó đang làm việc tốt cho tôi:

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

Chúng tôi sẽ yêu cầu để tạo ra một giao diện mà sẽ được thực hiện trong dự án cụ thể nền tảng, tôi đặt tên nó như IAudio.cs và mã cho cùng là như sau:

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

Android giải pháp:

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 Giải pháp:

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

Và cuối cùng, chúng ta sẽ sử dụng đoạn mã sau vào dự án PCL/chia sẻ của chúng tôi để chơi các tập tin âm thanh.

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

Đã kiểm tra và làm việc. Tài liệu tuyệt vời tại đây: https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/introduction/ – pollaris

2

Bạn có thể thử Xam.Plugin.SimpleAudioPlayer vì Xamarin.Forms không có API âm thanh.

Tóm lại, thêm gói NuGet vào từng dự án nền tảng cụ thể mà bạn muốn hỗ trợ. Sao chép tệp âm thanh vào thư mục Nội dung cho Windows UWP và Android và đặt các tác vụ xây dựng là ContentAndroid Asset tương ứng. Để iOS sao chép các tệp âm thanh vào thư mục Tài nguyên và đặt tác vụ xây dựng thành BundleResource, sau đó phát các tệp như vậy:

var player = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current; 
player.Load("intro_sound.mp3"); 
player.Play(); 
Các vấn đề liên quan