0

我使用音效播放字节数组中的声音,一切正常,但我无法停止播放声音,因为音效中没有调用 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);
        }
    }
4

3 回答 3

0

尝试使用 SoundEffectInstance

音效实例

这是解决方案的链接

音效实例

更多的SoundEffectInstance实现IDisposeable,所以它会有一个dispose()方法以及stop()声音效果。

于 2013-09-24T15:00:28.403 回答
0

您是否尝试过调用.Dispose()您的SoundEffect对象?根据文件

当 SoundEffect 对象被销毁时,之前由该 SoundEffect 创建的所有 SoundEffectInstance 对象都将停止播放并变为无效。

此外,Microsoft 建议改为使用MediaElement,除非您使用 XNA Game Studio 4.0 进行开发。因此,如果这适用于您,您可能需要考虑使用具有播放、暂停和停止功能MediaElement哪个。

于 2013-09-24T14:49:48.380 回答
0

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

SoundEffectInstance soundEffectInstance;

然后在加载文件后创建你的实例soundEffect..

soundEffectInstance = se.CreateInstance();

之后将其soundEffectInstance用于StopPlayPause在特定范围内您想要的任何地方。

soundEffectInstance.Play();

请注意,SoundEffect它用于触发和忘记类型实例,如果要控制 a 的任何特定实例,SoundEffect则需要使用SoundEffectInstance.

我同意 Benoit Catherinet 的观点。如果您试图停止某个事件的特定声音,那么您必须将停止代码放在该事件方法中,并且您的 SoundEffect 实例必须是全局的而不是本地的。

如果您能解释您想要达到的目标,我们可以更好地帮助您。

于 2013-09-24T21:35:07.307 回答