Як відтворювати звук у C #, .NET


124

У мене програма Windows написана на C # /. NET.

Як я можу відтворити певний звук, коли натиснути кнопку?

Відповіді:


233

Ви можете використовувати:

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

32
Це ідеальна відповідь, тому що новий користувач може зрозуміти, що SoundPlayer належить до System.Media ....
Хілен Маніяр

30
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp «Це означає , що інтерпретувати наступний рядок як літерал. Значення, то \ в рядку на самому справі буде" \ "в вихід, а не потрібно ставити "\\", щоб означати буквальний характер "
Praveen

@ Відповідь Правена просто дав ще один інформативний факт. Дякуємо Dexter, що запитав цей символ "@".
Аллен Лінаток

2
@bporter, схоже, це не працює з mp3-файлами; вона обмежена лише форматом wav
Najeeb

Яка ганьба цього API! Він не відтворює MP3 або MIDI файли. Зовсім марно для мене. У Windows є підтримка MP3 та MIDI, як мінімум, Windows XP. Ганьба Microsoft!
Елмуе

91

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


дуже корисний. це може допомогти використовувати системні настройки за замовчуванням.
Бабак.Абад

4
Важливо зазначити, що якщо вимкнути системні звуки в налаштуваннях Windows (принаймні новішої Windows), він нічого не відтворює.
Артхолл

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
Ще краще, у виробничому коді створюйте його лише один раз і використовуйте його багато разів, а не створюйте його кожного разу, коли натискаєте кнопку.
Шибумі

Я перейменував би цю функцію ButtonClickпросто тому, що, здається, вона більше відповідає стилю C # іменування.
Етан Бірлейн

1
@EthanBierlein - це, мабуть, конвенція про іменування, коли я опублікував відповідь;)
ChrisF

1
Ага. Так це була стара конвенція?
Етан Бірлен

@EthanBierlein - це все-таки те, що автогенерується проектами Windows для Visual Studio
JAD

13

Додаткова інформація.

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

  1. Використовуйте п'ять стандартних системних звуків у типових сценаріях , тобто

    • Зірочка - грати, коли ви хочете виділити поточну подію

    • Питання - грати з питаннями (вікно системного повідомлення відтворює це)

    • Вигук - грати з значком оклику (вікно системного повідомлення відтворює це)

    • Звуковий сигнал ( звуковий сигнал за замовчуванням)

    • Критична зупинка ("Рука") - грати з помилкою (вікно системного повідомлення відтворює цю)
       

    Методи заняття System.Media.SystemSoundsгратимуть їх за вас.
     

  2. Реалізуйте будь-які інші звуки, що настроюються вашими користувачами, на панелі керування звуком

    • Таким чином користувачі можуть легко змінювати або видаляти звуки з вашої програми, і вам не потрібно писати для цього жодного інтерфейсу користувача - він уже є
    • Кожен профіль користувача може замінити ці звуки по-своєму
    • Як:
      • Створіть звуковий профіль вашої програми в реєстрі Windows (Підказка: програмування не потрібно, просто додайте ключі до інсталятора вашої програми.)
      • У вашій програмі читайте шлях звукових файлів або ресурс DLL з ключів реєстру та відтворюйте його. (Як відтворювати звуки, ви можете бачити в інших відповідях.)

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


2

Для відтворення аудіофайлу у формі Windows за допомогою C # перевіримо простий приклад наступним чином:

1.Go Visual Studio (VS-2008/2010/2012) -> Меню файлів -> натисніть кнопку New Project.

2.У новому проекті -> натисніть програму Windows Forms -> Дайте ім'я та натисніть кнопку ОК.

Відкриється новий проект "Форми Windows".

3.Завантажте клавішу управління з панелі інструментів у форму 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.