2016-05-16 21 views
1

私はUWPで私のオーディオファイルをループしたいです。ここに私のクラスには、次のとおりです。オーディオファイルをループするには?

public class NuriSound 
{ 

    public enum SoundEfxEnum 
    { 
     Click, 
     Dice, 
     Theme, 
    } 

    public class SoundEffects 
    { 
     private Dictionary<SoundEfxEnum, MediaElement> _effects; 

     public SoundEffects() 
     { 
      _effects = new Dictionary<SoundEfxEnum, MediaElement>(); 
      LoadEfx(); 
     } 

     private async void LoadEfx() 
     { 
      _effects.Add(SoundEfxEnum.Theme, await LoadSoundFile("theme.wav")); 
      _effects.Add(SoundEfxEnum.Click, await LoadSoundFile("click.wav")); 
      _effects.Add(SoundEfxEnum.Dice, await LoadSoundFile("dice.wav")); 
     } 

     private async Task<MediaElement> LoadSoundFile(string v) 
     { 
      MediaElement snd = new MediaElement(); 

      snd.AutoPlay = false; 
      StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("sounds"); 
      StorageFile file = await folder.GetFileAsync(v); 
      var stream = await file.OpenAsync(FileAccessMode.Read); 
      snd.SetSource(stream, file.ContentType); 
      return snd; 
     } 

     public async Task Play(SoundEfxEnum efx) 
     { 
      var mediaElement = _effects[efx]; 
      mediaElement.Play(); 

     } 

     public async Task Stop(SoundEfxEnum efx) 
     { 
      var mediaElement = _effects[efx]; 
      mediaElement.Stop(); 
     } 

     public async Task Loop(SoundEfxEnum efx) 
     { 
      var mediaElement = _effects[efx]; 
      // ... 

     } 

    } 

} 

私はタスク「ループ」を使用し、このようにそれを呼びたい: 「App.MyAppSounds.Loop(NuriSound.SoundEfxEnum.Themeを)待ちますか」? 私はそれを動作させるために書く必要がありますか?

答えて

0

mediaElementにはIsLoopingというプロパティがあります。

mediaElement.IsLooping = true; 
if (mediaElement.CurrentState == MediaElementState.Paused || mediaElement.CurrentState == MediaElementState.Stopped) 
{ 
    mediaElement.Play(); 
} 
+0

私はあなたのコードが気に入っていますが、それはまだ一度再生されます。 – Zitar9161

+0

ボタンのクリックイベントで使用します。 – Zitar9161

+1

IsLoopingが自分のタスクLoadSoundFileで動作します。私はループのために新しいものを作成しました。 – Zitar9161

0

MediaElement's MediaEnded eventを処理して、もう一度音楽を再生できます。

+0

あなたは "mediaElement.MediaEnded + = MediaEndedEventHandler;"という意味です? – Zitar9161

+0

私のクラスでこの "MediaEndedEventHandler"をどのように設定する必要がありますか? – Zitar9161

+0

mediaElement Play()の後に、mediaElement.MediaEnded + = Handlerを追加できます。そして、内部のハンドラが再び曲を演奏します。 – GeralexGR

関連する問題