Выбор звуков из Windows и их воспроизведение

У меня есть приложение WinForms. Это приложение имеет раздел "Настройки", в котором пользователь сможет выбрать, какие звуки будут воспроизводиться при отображении предупреждения.

Возможно ли иметь выпадающий список, в котором пользователь может выбрать из хранимых в Windows звуков, таких как "критическая остановка", "критический звуковой сигнал" и т.д. Они находятся в разделе "Панель управления" → "Звуки и сигналы".

Возможно ли иметь кнопку воспроизведения для тестирования звуков?

Ответ 1

Попробуйте следующее:

    private void Form1_Load(object sender, EventArgs e)
    {

        var systemSounds = new[]
                              {
                                  System.Media.SystemSounds.Asterisk,
                                  System.Media.SystemSounds.Beep,
                                  System.Media.SystemSounds.Exclamation,
                                  System.Media.SystemSounds.Hand,
                                  System.Media.SystemSounds.Question
                              };

        comboBox1.DataSource = systemSounds;

        comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
    }

    void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        ((System.Media.SystemSound)comboBox1.SelectedItem).Play();
    }

Ответ 2

Вам не нужен какой-либо API для воспроизведения звуков системы, просто пишите код следующим образом:

// Plays the sound associated with the Asterisk system event.
System.Media.SystemSounds.Asterisk.Play();

Класс SystemSounds содержит следующие предопределенные системные звуки:

  • Asterisk
  • Beep
  • Восклицание
  • Рука
  • Вопрос

Все остальные звуки требуют, чтобы вы прочитали нужный звук из реестра и воспроизвели его с помощью кода следующим образом:

SoundPlayer simpleSound = new SoundPlayer(@"c:\Path\To\Your\Wave\File.wav");

Ответ 3

Конечно! Все звуки, которые вы ищете, доступны через System.Media.SystemSounds class, где они отображаются как общедоступные свойства, соответствующие типам событий, которые запускают звуки.

Кроме того, объекты класса SystemSound предоставляют Play метод, который вы можете вызывать для асинхронного воспроизведения этого звука.

Так, например, чтобы воспроизвести звук "Critical Stop", вы просто напишите следующий код:

System.Media.SystemSounds.Hand.Play();