static public void PlayEffect(string path, CommonSettings.VoidCallBack callback = null) { if (Configer.Instance.HighQualityAudio) { path = path.Replace("audios", "audios_source"); } else { path = path.Replace("audios_source", "audios"); } if (Configer.Instance.ResourceRootMenu != "") { path = Configer.Instance.ResourceRootMenu + path; } path = path.Replace("\\", "/"); int channel = CurrentChannel; EffectPool[channel].Source = new Uri(path, UriKind.Relative); AudioTag tag = EffectPool[channel].Tag as AudioTag; tag.callback = callback; EffectPool[channel].Play(); CurrentChannel++; if (CurrentChannel >= EFFECT_POOL_SIZE) { CurrentChannel = 0; } }
static public void Init() { Canvas container = App.RootCanvas; GameMusic = new MediaElement() { IsHitTestVisible = false, Visibility = System.Windows.Visibility.Collapsed, Volume = 1, IsMuted = !Configer.Instance.Music }; GameMusic.MediaEnded += (s, e) => { GameMusic.Stop(); GameMusic.Play(); }; container.Children.Add(GameMusic); for (int i = 0; i < EFFECT_POOL_SIZE; ++i) { MediaElement effectElement = new MediaElement() { IsHitTestVisible = false, Visibility = System.Windows.Visibility.Collapsed, Volume = 1, IsMuted = !Configer.Instance.Audio }; EffectPool[i] = effectElement; EffectChannelBusy[i] = false; effectElement.Tag = new AudioTag() { Index = i }; effectElement.MediaEnded += (s, e) => { AudioTag tag = effectElement.Tag as AudioTag; if (tag.callback != null) { tag.callback(); } tag.callback = null; EffectChannelBusy[tag.Index] = false; }; effectElement.MediaFailed += (s, e) => { AudioTag tag = effectElement.Tag as AudioTag; EffectChannelBusy[tag.Index] = false; }; container.Children.Add(effectElement); } }