Jak odtworzyć dźwięk w C #, .NET

124

Mam aplikację Windows napisaną w C # / .NET.

Jak mogę odtworzyć określony dźwięk po kliknięciu przycisku?

Khilen Maniyar
źródło

Odpowiedzi:

234

Możesz użyć:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();
bporter
źródło
33
Jest to idealne rozwiązanie, ponieważ nowy użytkownik może zrozumieć, że SoundPlayer należący do System.Media ....
Khilen Maniyar
31
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Oznacza to zinterpretowanie następującego ciągu jako literału. Oznacza to, że \ w ciągu będzie faktycznie" \ "w zamiast wstawiania „\\” oznaczającego literalny znak ”
Praveen
Odpowiedź @ Praveen podała tylko kolejny fakt informacyjny. Dziękuję Dexterowi za pytanie o symbol „@”.
Allen Linatoc
2
@bporter, to nie działa z plikami mp3; jest ograniczony tylko do formatu wav
Najeeb
Jaka szkoda tego API! Nie odtwarza plików MP3 ani MIDI. Zupełnie bezużyteczne dla mnie. Windows ma natywne wsparcie dla MP3 i MIDI od co najmniej Windows XP. Wstyd na Microsoft!
Elmue,
91

Możesz na przykład użyć SystemSoundSystem.Media.SystemSounds.Asterisk.Play(); .

Ta01
źródło
bardzo przydatne. może pomóc użycie domyślnych ustawień systemu.
Babak.Abad
4
Należy pamiętać, że jeśli wyłączysz dźwięki systemowe w ustawieniach systemu Windows (przynajmniej nowszy Windows), to nic nie odtwarza.
Artholl,
32

W przypadku Windows Forms jednym ze sposobów jest użycie 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()
    }
}

Strona MSDN

Będzie to również działać z WPF, ale masz inne opcje, takie jak korzystanie ze MediaPlayer strony MSDN

ChrisF
źródło
1
Co więcej, w kodzie produkcyjnym utwórz go tylko raz i używaj go wiele razy, zamiast tworzyć go za każdym naciśnięciem przycisku.
Shibumi,
Zmieniłbym nazwę tej funkcji na ButtonClick, po prostu dlatego, że wydaje się, że bardziej odpowiada stylowi nazewnictwa C #.
Ethan Bierlein
1
@EthanBierlein - to chyba była konwencja nazewnictwa, kiedy zamieściłem odpowiedź;)
ChrisF
1
Huh. Więc to była stara konwencja?
Ethan Bierlein
@EthanBierlein to wciąż to, co jest generowane automatycznie przez projekty formularzy systemu Windows w programie Visual Studio
JAD
13

Dodatkowe informacje.

To nieco wysokopoziomowa odpowiedź dla aplikacji, które chcą bezproblemowo dopasować się do środowiska Windows. Szczegóły techniczne grania poszczególnych dźwięków podano w innych odpowiedziach. Poza tym zawsze zwracaj uwagę na te dwa punkty:

  1. Użyj pięciu standardowych dźwięków systemowych w typowych scenariuszach , tj

    • Gwiazdka - graj, gdy chcesz zaznaczyć aktualne wydarzenie

    • Pytanie - baw się pytaniami (w okienku komunikatów systemowych jest odtwarzane to)

    • Wykrzyknik - baw się ikoną wykrzyknika (w oknie komunikatów systemowych odtwarza się ten)

    • Sygnał dźwiękowy (domyślny dźwięk systemowy)

    • Krytyczne zatrzymanie („Ręka”) - gra z błędem (w oknie komunikatów systemowych jest odtwarzane to)
       

    Metody klasowe System.Media.SystemSoundszagrają je za Ciebie.
     

  2. Zaimplementuj inne dźwięki, które użytkownicy mogą dostosować w panelu sterowania Dźwięk

    • W ten sposób użytkownicy mogą łatwo zmieniać lub usuwać dźwięki z Twojej aplikacji i nie musisz do tego pisać żadnego interfejsu użytkownika - już tam jest
    • Każdy profil użytkownika może nadpisać te dźwięki na swój sposób
    • Jak:
miroxlav
źródło
Dziękuję za dodatkowe informacje. Chciałbym dodać przykład: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);odtwarza dźwięk Hand . Zauważ, że gra asynchronicznie, tutaj dodałem polecenie uśpienia, aby poczekać na zakończenie dźwięku. Jeśli nie zaczekasz i nie odtworzysz innego dźwięku, poprzedni natychmiast się zatrzyma.
Matt,
2

Aby odtworzyć plik audio w formularzu Windows przy użyciu C #, sprawdźmy prosty przykład w następujący sposób:

1. przejdź do programu Visual Studio (VS-2008/2010/2012) -> menu Plik -> kliknij Nowy projekt.

2. W New Project -> kliknij Windows Forms Application -> Give Name, a następnie kliknij OK.

Otworzy się nowy projekt „Windows Forms”.

3. Przeciągnij i upuść kontrolkę Button z przybornika do formularza systemu Windows.

4. Kliknij dwukrotnie przycisk, aby automatycznie utworzyć domyślną procedurę obsługi zdarzeń Click, i dodaj następujący kod.

Ten kod wyświetla okno dialogowe Otwieranie pliku i przekazuje wyniki do metody o nazwie „playSound”, którą utworzysz w następnym kroku.

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


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

5. Dodaj następujący kod metody pod instrukcją obsługi zdarzenia button1_Click.

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

6. Teraz uruchommy aplikację, naciskając klawisz F5, aby uruchomić kod.

7. Kliknij przycisk i wybierz plik audio. Po załadowaniu pliku zostanie odtworzony dźwięk.

Mam nadzieję, że jest to przydatny przykład dla początkujących ...

Vaibhav_Welcome_You
źródło
1

Myślę, że najpierw musisz dodać plik .wav do zasobów. Na przykład masz plik dźwiękowy o nazwie Sound.wav. Po dodaniu pliku Sound.wav do zasobów możesz użyć tego kodu:

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

To inny sposób odtwarzania dźwięku.

თემო ნემსიწვერიძე
źródło