2017-08-02 71 views
1

我正在研究與UWP兼容的Xamarin.Forms應用程序。我的要求是播放,暫停,前進,後退錄製的音頻文件。爲此,我已經創造了Xamarin.Forms便攜式項目媒體元素中的向前和向後音頻UWP

public interface IRecordAudio 
    {   
     Task<TimeSpan> SetSource(Stream _stream); 
     void PlayAudio(); 
     void ForwardAudio(); 
     void RewindAudio(); 
     void PauseAudio(); 
    } 

的界面和接口的實現是在UWP項目如下:

public class RecordAudioUWP : IRecordAudio 
    { 
     public async Task<TimeSpan> SetSource(Stream _stream) 
     { 
      StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; 
      var folder = await local.GetFolderAsync("Recordings"); 
      var file = await folder.GetFileAsync("MySound.MP3"); 
      var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
      element.SetSource(stream, ""); 
      MusicProperties properties = await 
      file.Properties.GetMusicPropertiesAsync(); 
      TimeSpan myTrackDuration = properties.Duration; 
      return myTrackDuration; 
     } 

     public void PlayAudio() 
     { 
      element.Play(); 
     } 

     public void ForwardAudio() //Not Working 
     { 
      element.Position += TimeSpan.FromSeconds(10); 
     } 

     public void PauseAudio() 
     { 
      element.Pause(); 
     } 

     public void RewindAudio() //Not Working 
     { 
      element.Position -= TimeSpan.FromMinutes(1); 
     } 
    } 

音頻的來源得到了正確設置。音頻播放並正確暫停。音頻文件向前和向後播放時遇到問題。

請讓我知道我做錯了。謝謝

回答

1

在Windows 10構建1607和我們建議您使用MediaPlayerElement代替MediaElement。 MediaPlayerElement具有與MediaElement相同的功能,同時還支持更高級的媒體播放場景。此外,媒體播放的所有未來改進都將在MediaPlayerElement中發生。

你可以代替使用MediaPlayerElementMediaElement類似如下:

public class RecordAudioUWP : IRecordAudio 
{ 
    private MediaPlayerElement element;  
    private MediaPlayer player; 
    public async Task<TimeSpan> SetSource(Stream _stream) 
    { 
     element = new MediaPlayerElement(); 

     StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; 
     var folder = await local.GetFolderAsync("Recordings"); 
     var file = await folder.GetFileAsync("MySound.MP3"); 
     var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
     element.Source = MediaSource.CreateFromStream(stream,""); 

     player = element.MediaPlayer; 
     MusicProperties properties = await 
     file.Properties.GetMusicPropertiesAsync(); 
     TimeSpan myTrackDuration = properties.Duration; 
     return myTrackDuration; 
    } 

    public void PlayAudio() 
    { 
     player.Play(); 
    } 

    public void ForwardAudio() 
    { 
     var session = player.PlaybackSession; 
     session.Position += TimeSpan.FromSeconds(10); 

    } 

    public void PauseAudio() 
    { 
     player.Pause(); 
    } 

    public void RewindAudio() 
    { 
     var session = player.PlaybackSession; 
     session.Position -= TimeSpan.FromMinutes(1); 
    } 
}