2017-08-02 2 views
1

Ich arbeite an Xamarin.Forms App, die mit UWP kompatibel ist. Meine Anforderung besteht darin, die aufgenommene Audiodatei abzuspielen, anzuhalten, vorzuspulen oder zurückzuspulen. Dazu habe ich eine Schnittstelle in den Xamarin.Forms tragbares Projekt erstelltvorwärts und rückwärts Audio in Medienelement UWP

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

und die Implementierung der Schnittstelle ist wie in dem UWP-Projekt folgt:

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

Die Quelle des Audio wurde richtig eingestellt . Das Audio wird korrekt wiedergegeben und angehalten. Ich bekomme Probleme beim Vor- und Zurückspulen der Audiodatei.

Bitte lassen Sie mich wissen, wo ich falsch mache. Dank

Antwort

1

In Windows 10, bauen 1607 und wir empfehlen, dass Sie MediaPlayerElement anstelle von Media verwenden. MediaPlayerElement hat die gleiche Funktionalität wie MediaElement, ermöglicht aber auch erweiterte Medienwiedergabeszenarien. Darüber hinaus werden alle zukünftigen Verbesserungen in der Medienwiedergabe im MediaPlayerElement stattfinden.

Sie könnten MediaPlayerElement anstelle von MediaElement wie folgt verwendet werden:

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); 
    } 
} 
Verwandte Themen