Выбор звуков из Windows и их воспроизведение - PullRequest
12 голосов
/ 04 марта 2011

У меня есть приложение WinForms. В этом приложении есть раздел «Настройки», в котором пользователь сможет выбрать, какие звуки воспроизводятся при отображении оповещения.

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

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

Ответы [ 3 ]

12 голосов
/ 04 марта 2011

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

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

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

  • Звездочка
  • Звуковой сигнал
  • Восклицательный знак
  • Рука
  • Вопрос

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

SoundPlayer simpleSound = new SoundPlayer(@"c:\Path\To\Your\Wave\File.wav");
11 голосов
/ 04 марта 2011

Попробуйте это:

    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();
    }
8 голосов
/ 04 марта 2011

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

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

Так, например, чтобы воспроизвести звук «Критическая остановка», вы просто должны написать следующий код:

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