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 に答える