我正在设置一个闹钟,弹出一个带有多个声音文件选项的对话框,用户可以选择。我遇到的问题是在本地创建一个声音播放器,我可以用一个按钮关闭它。我遇到的问题是,当我关闭表单时声音会保持循环,因为按钮单击事件中不存在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实例来做我想做的事情?或者有没有办法在类级别声明它,仍然能够根据用户设置更改声音文件?
答案 0 :(得分:1)
为什么这是一个问题? SoundPlayer不支持同时播放多个声音。将其移至类范围,覆盖OnFormClosing事件,问题解决。
public partial class Form1 : Form {
private System.Media.SoundPlayer alarm;
protected override void OnFormClosing(CancelEventArgs e) {
if (alarm != null) alarm.Stop();
}
}
答案 1 :(得分:0)
您可以尝试:
SoundMixer.stopAll();
或
SoundMixer.soundTransform = new SoundTransform(0);
SoundMixer类控制全局声音,因此它应该停止在同一个安全沙箱中的所有内容。
答案 2 :(得分:0)
使用Powershell,我正在播放.wav文件,并使用以下内容开始重复循环:
$Playwav = new-object ('Media.SoundPlayer') $playpath1
$Playwav.PlayLooping()
我通过Run Section(F8)停止了Powershell IDE中的循环:
$Playwav = new-object ('Media.SoundPlayer') $playpath1
$Playwav.PlayLooping()
$Playwav.stop()
FWIW,我的例子中的.wav是FPS Doug takethatbitch.wav.所以失控的循环让我发笑。
希望这会有所帮助。