0

我正在设置一个警报,该警报会弹出一个对话框,其中包含用户可以选择的多个声音文件选项。我遇到的问题是在本地创建一个声音播放器,我可以用一个按钮关闭它。我遇到的问题是当我关闭表单时声音一直在循环,因为按钮单击事件中不存在 SoundPlayer。

这就是我所拥有的:

 void callsound()
    {
        if (SoundToggle == 0) // if sound enabled
        {

            if ((SoundFile == 0) && (File.Exists(@"attention.wav")))
            {
                System.Media.SoundPlayer alarm = new System.Media.SoundPlayer(@"attention.wav");
                alarm.PlayLooping();
            }
       if ((SoundFile == 1) && (File.Exists(@"aahh.wav")))
            {
                System.Media.SoundPlayer alarm = new System.Media.SoundPlayer(@"aahh.wav");
                alarm.PlayLooping();
            }
     }

private void button1_Click(object sender, EventArgs e)
    {
        //alarm.Stop();  Only works if SoundPlayer declared at class level
        this.Close();
    }

有没有办法通过声明我所在的 SoundPlayer 实例来做我想做的事情?或者有没有办法在类级别声明它,并且仍然能够根据用户设置更改声音文件?

4

3 回答 3

1

为什么这是个问题?SoundPlayer 无论如何都不支持同时播放多个声音。将其移至类范围,覆盖 OnFormClosing 事件,问题解决。

public partial class Form1 : Form {
  private System.Media.SoundPlayer alarm;

  protected override void OnFormClosing(CancelEventArgs e) {
    if (alarm != null) alarm.Stop();
  }
}
于 2010-05-26T21:22:05.993 回答
0

你可以试试:

SoundMixer.stopAll();

或者

SoundMixer.soundTransform = new SoundTransform(0);

SoundMixer 类控制全局声音,因此它应该停止同一个安全沙箱中的所有内容。

于 2010-05-26T21:27:55.537 回答
0

使用 Powershell,我正在播放 .wav 文件并使用以下命令开始重复循环:

$Playwav = new-object ('Media.SoundPlayer') $playpath1 
$Playwav.PlayLooping()

我通过运行部分 (F8) 停止了 Powershell IDE 内的循环:

$Playwav = new-object ('Media.SoundPlayer') $playpath1 
$Playwav.PlayLooping()
$Playwav.stop()

FWIW,我示例中的 .wav 是 FPS Doug takethatbitch.wav。所以失控的循环让我发笑。

希望这可以帮助。

于 2017-10-05T16:55:42.530 回答