Windows phone 7 wp8音效可';停不下来

Windows phone 7 wp8音效可';停不下来,windows-phone-7,audio,windows-phone-8,windows-phone,soundeffect,Windows Phone 7,Audio,Windows Phone 8,Windows Phone,Soundeffect,我使用soundeffect从字节数组播放声音,一切正常,但我不能停止播放声音,因为soundeffect中没有名为stop()的方法,我如何停止它 守则: private void playFile(byte[] file) { try { if (file == null || file.Length == 0) return; SoundEffect se = new SoundEffect(fi

我使用soundeffect从字节数组播放声音,一切正常,但我不能停止播放声音,因为soundeffect中没有名为stop()的方法,我如何停止它

守则:

private void playFile(byte[] file)
    {
        try
        {

            if (file == null || file.Length == 0) return;


            SoundEffect se = new SoundEffect(file, microphone.SampleRate, AudioChannels.Mono);
            SoundEffect.MasterVolume = 0.7f;
            if (stop != 1)
            {
                FrameworkDispatcher.Update();
                se.Play();
            }
            else
            {
                //Here should stop, how !
            }
        }
        catch (Exception ee)
        {
            MessageBox.Show(ee.Message);
        }
    }

您是否尝试在
SoundEffect
对象上调用
.Dispose()
?据报道,

销毁SoundEffect对象时,所有SoundEffectInstance 以前由该SoundEffect创建的对象将停止播放 变得无效


此外,除非您是使用XNA Game Studio 4.0开发,否则请改用
MediaElement
。因此,如果适用于您,您可能需要考虑使用<代码>媒体元素< /代码>。

这里是解决方案的链接


更多关于
SoundEffectInstance
的内容实现了
idisposable
,因此它将有一个
dispose()
方法以及用于声音效果的
stop()

SoundEffectInstance
创建一个变量,如下所示

SoundEffectInstance soundEffectInstance;
然后在加载文件后创建
soundEffect
的实例

soundEffectInstance = se.CreateInstance();
在此之后,在特定范围内的任何需要的地方,使用此
soundEffectInstance
停止
播放
暂停

soundEffectInstance.Play();
请注意,
SoundEffect
用于fire和forget类型实例,如果要控制
SoundEffect
的任何特定实例,则需要使用
SoundEffectInstance

我同意贝诺特·凯瑟琳的观点。如果试图在某个事件上停止某个特定声音,则必须将停止代码放置在该事件方法中,并且为此,SoundEffect实例必须是全局的,而不是本地的


如果您能解释一下您想要实现的目标,我们可以更好地为您提供帮助。

我使用它,声音会继续播放,不会有任何变化!从你的代码中,我不确定你想在else中停止什么,因为实际上什么都没有开始(因为游戏处于相同条件的if中),不,这是工作,一切都正常。。但我不知道如何停止它。我的问题是,你在那里停止什么,因为在你发布的代码中,你有“SoundEffect se”作为局部变量,所以下次调用playFile时,它只会创建一个新的,你将停止一个新的SoundEffect,而不是原来的SoundEffect