同时播放两个声音c#

我正在创build一个WP7应用程序,需要在循环的背景音乐上播放各种音效(按下button)。 背景音乐是​​通过按下button1启动的,然后循环播放。 当我按下button3(触发声音效果)时,第一次按下后,音效就会叠加在背景音乐上。 但是,当我再次按下button3时,背景音乐停止。 我无法弄清楚为什么会发生这种情况!? 我粘贴了以下代码的相关部分。 将不胜感激任何帮助。

public partial class MainPage : PhoneApplicationPage { SoundEffect soundEffect; Stream soundfile; // Constructor public MainPage() { InitializeComponent(); } static protected void LoopClip(SoundEffect soundEffect) { { SoundEffectInstance instance = soundEffect.CreateInstance(); instance.IsLooped = true; FrameworkDispatcher.Update(); instance.Play(); } } public void PlaySound(string soundFile) { using (var stream = TitleContainer.OpenStream(soundFile)) { var effect = SoundEffect.FromStream(stream); effect.Play(); } } private void button1_Click(object sender, RoutedEventArgs e) { soundfile = TitleContainer.OpenStream("BackgroundMusic.wav"); soundEffect = SoundEffect.FromStream(soundfile); LoopClip(soundEffect); } private void button3_Click(object sender, RoutedEventArgs e) { PlaySound("sound3.wav"); } } 

}

这应该工作,如果你总是与实例工作,所以改变你的代码,这应该清除问题:

 public partial class MainPage : PhoneApplicationPage { SoundEffectInstance loopedSound = null; // Constructor public MainPage() { InitializeComponent(); } static protected void LoopClip(SoundEffect soundEffect) { loopedSound = soundEffect.CreateInstance(); loopedSound.IsLooped = true; loopedSound.Play(); } public void PlaySound(string soundFile) { SoundEffect sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri(soundFile, UriKind.Relative)).Stream); SoundEffectInstance instance = sound.CreateInstance(); instance.Play(); } private void button1_Click(object sender, RoutedEventArgs e) { SoundEffect sound = SoundEffect.FromStream(Application.GetResourceStream(new Uri(@"BackgroundMusic.wav", UriKind.Relative)).Stream); LoopClip(sound); } private void button3_Click(object sender, RoutedEventArgs e) { PlaySound("sound3.wav"); } } 

上面的例子假定你的声音文件是用Build Action = Content设置的,并且在顶层目录中。

您将需要从一个单独的线程播放每个声音。

这里似乎正在发生的是不同的Play方法调用互相干扰,因为它们在同一个线程中。

试着把背景音乐放在一个单独的线程中,看看是否解决了你在问题中提到的问题。 如果是的话,把其他人分开。