Как воспроизвести звук на C #, .NET


124

У меня есть приложение для Windows, написанное на C # /. NET.

Как я могу воспроизвести определенный звук при нажатии кнопки?

Ответы:


234

Вы можете использовать:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();

33
Это идеальный ответ, потому что новый пользователь может понять, что SoundPlayer принадлежит System.Media ....
Хилен Манияр,

31
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Это означает интерпретировать следующую строку как буквальную. Это означает, что \ в строке фактически будет" \ "в вывод, вместо того, чтобы ставить "\\" для обозначения буквального символа "
Правин

Ответ @ Praveen дал еще один информативный факт. Спасибо Декстеру за вопрос об этом символе «@».
Аллен Линаток

2
@bporter, похоже, это не работает с файлами mp3; он ограничен только форматом wav
Наджиб

Какая жалость к этому API! Он не воспроизводит файлы MP3 или MIDI. Совершенно бесполезен для меня. Windows имеет встроенную поддержку MP3 и MIDI, по крайней мере, с Windows XP. Позор Microsoft!
Elmue

91

Вы можете использовать SystemSound , например, System.Media.SystemSounds.Asterisk.Play();.


очень полезно. это может помочь использовать системные настройки по умолчанию.
Babak.Abad

4
Важно отметить, что если вы отключите системные звуки в настройках Windows (по крайней мере, в более новой Windows), он ничего не воспроизводит.
Artholl

32

Для Windows Forms один из способов - использовать SoundPlayer

private void Button_Click(object sender, EventArgs e)
{
    using (var soundPlayer = new SoundPlayer(@"c:\Windows\Media\chimes.wav")) {
        soundPlayer.Play(); // can also use soundPlayer.PlaySync()
    }
}

Страница MSDN

Это также будет работать с WPF, но у вас есть другие варианты, такие как использование MediaPlayer страницы MSDN.


1
Еще лучше - в производственном коде создать его только один раз и использовать много раз, а не создавать его каждый раз при нажатии кнопки.
Shibumi

Я бы переименовал эту функцию в ButtonClickпросто потому, что кажется, что она больше соответствует стилю именования C #.
Ethan Bierlein

1
@EthanBierlein - вероятно, это было соглашение об именах, когда я опубликовал ответ;)
ChrisF

1
Да. Так это была старая конвенция?
Ethan Bierlein

@EthanBierlein - это все еще то, что автоматически создается проектами форм Windows в Visual Studio
JAD

13

Дополнительная информация.

Это немного высокоуровневый ответ для приложений, которые хотят легко вписаться в среду Windows. Технические подробности воспроизведения определенного звука были предоставлены в других ответах. Кроме того, всегда обращайте внимание на эти два момента:

  1. Используйте пять стандартных системных звуков в типичных сценариях , т.е.

    • Asterisk - играйте, когда хотите выделить текущее событие

    • Вопрос - играйте с вопросами (в окне системного сообщения воспроизводится этот)

    • Восклицательный знак - играйте со значком восклицания (его воспроизводит окно системного сообщения)

    • гудок (системный звук по умолчанию)

    • Критическая остановка («Рука») - игра с ошибкой (ее воспроизводит окно системного сообщения)
       

    Методы класса System.Media.SystemSoundsсыграют их за вас.
     

  2. Внедрите любые другие звуки, настраиваемые вашими пользователями в Sound панели управления

    • Таким образом, пользователи могут легко изменять или удалять звуки из вашего приложения, и вам не нужно писать для этого какой-либо пользовательский интерфейс - он уже есть
    • Каждый профиль пользователя может по-своему перекрывать эти звуки.
    • Как:
      • Создайте звуковой профиль вашего приложения в реестре Windows (подсказка: не нужно программировать, просто добавьте ключи в установщик вашего приложения.)
      • В вашем приложении прочтите путь к звуковому файлу или ресурс DLL из ключей реестра и воспроизведите его. (Как воспроизводить звуки, вы можете увидеть в других ответах.)

Спасибо за дополнительную информацию. Хочу добавить пример: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);проигрывает звук Hand . Обратите внимание, что он воспроизводится асинхронно, здесь я добавил команду сна, чтобы дождаться завершения звука. Если вы не ждете и проиграете другой звук, предыдущий немедленно прекратится.
Мэтт


2

Чтобы воспроизвести аудиофайл в форме Windows с использованием C #, давайте проверим простой пример следующим образом:

1. Перейдите в Visual Studio (VS-2008/2010/2012) -> Меню "Файл" -> щелкните "Новый проект".

2. В новом проекте -> щелкните Приложение Windows Forms -> Дайте имя, а затем нажмите ОК.

Откроется новый проект «Windows Forms».

3. Перетащите элемент управления Button из панели инструментов в форму Windows.

4. Дважды щелкните кнопку, чтобы автоматически создать обработчик событий Click по умолчанию, и добавьте следующий код.

Этот код отображает диалоговое окно открытия файла и передает результаты методу с именем «playSound», который вы создадите на следующем шаге.

 OpenFileDialog dialog = new OpenFileDialog();
 dialog.Filter = "Audio Files (.wav)|*.wav";


if(dialog.ShowDialog() == DialogResult.OK)
{
  string path = dialog.FileName;
  playSound(path);
}

5. Добавьте следующий код метода под обработчик событий button1_Click.

 private void playSound(string path)
 {
   System.Media.SoundPlayer player = new System.Media.SoundPlayer();
   player.SoundLocation = path;
   player.Load();
   player.Play();
 }

6. Теперь давайте запустим приложение, просто нажав F5, чтобы запустить код.

7. Нажмите кнопку и выберите аудиофайл. После загрузки файла будет воспроизводиться звук.

Надеюсь, этот пример будет полезен новичкам ...


1

Я думаю, вам нужно сначала добавить в Ресурсы файл .wav. Например, у вас есть звуковой файл с именем Sound.wav. После того, как вы добавили файл Sound.wav в Ресурсы, вы можете использовать этот код:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(Properties.Resources.Sound);
player.Play();

Это еще один способ воспроизведения звука.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.