Come riprodurre un suono in C #, .NET


124

Ho un'applicazione Windows scritta in C # /. NET.

Come posso riprodurre un suono specifico quando si fa clic su un pulsante?

Risposte:


234

Potresti usare:

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

33
Questa è la risposta perfetta perché un nuovo utente può capire che SoundPlayer appartiene a System.Media ....
Khilen Maniyar

31
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Significa interpretare la seguente stringa come letterale. Significato, il \ nella stringa sarà effettivamente un '\' nel uscita, piuttosto che dover mettere "\\" per indicare il carattere letterale "
Praveen

La risposta di @ Praveen ha fornito solo un altro fatto informativo. Grazie a Dexter per aver chiesto quel simbolo "@".
Allen Linatoc

2
@bporter, questo non sembra funzionare con i file mp3; è limitato al solo formato wav
Najeeb

Che peccato questa API! Non riproduce né file MP3 né file MIDI. Completamente inutile per me. Windows ha il supporto nativo per MP3 e MIDI almeno a partire da Windows XP. Peccato per Microsoft!
Elmue

91

È possibile utilizzare SystemSound , ad esempio, System.Media.SystemSounds.Asterisk.Play();.


molto utile. può essere utile utilizzare i valori predefiniti del sistema.
Babak.Abad

4
È importante notare che se disattivi i suoni di sistema nelle impostazioni di Windows (almeno Windows più recente) non riproduce nulla.
Artholl

32

Per Windows Forms un modo è usare il 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()
    }
}

Pagina MSDN

Funzionerà anche con WPF, ma hai altre opzioni come usare la MediaPlayer pagina MSDN


1
Ancora meglio, nel codice di produzione, crearlo una sola volta e usarlo molte volte piuttosto che crearlo ogni volta che viene premuto il pulsante.
Shibumi

Rinominerei quella funzione in ButtonClick, semplicemente perché sembra che segua lo stile della denominazione C # di più.
Ethan Bierlein

1
@EthanBierlein - probabilmente era la convenzione sui nomi quando ho postato la risposta;)
ChrisF

1
Huh. Quindi quella era la vecchia convenzione?
Ethan Bierlein

@EthanBierlein è ancora ciò che viene generato automaticamente dai progetti Windows Form di Visual Studio
JAD

13

Informazioni aggiuntive.

Questa è una risposta un po 'di alto livello per le applicazioni che vogliono adattarsi perfettamente all'ambiente Windows. I dettagli tecnici sulla riproduzione di un suono particolare sono stati forniti in altre risposte. Oltre a ciò, nota sempre questi due punti:

  1. Usa cinque suoni di sistema standard in scenari tipici , ad es

    • Asterisco : riproduci quando desideri evidenziare l'evento corrente

    • Domanda - gioca con le domande (la finestra della finestra di messaggio di sistema riproduce questa)

    • Esclamazione : gioca con l'icona di esclamazione (la finestra della finestra di messaggio di sistema riproduce questa)

    • Beep (suono di sistema predefinito)

    • Stop critico ("Mano") - gioca con errori (la finestra del messaggio di sistema riproduce questo)
       

    I metodi di classe System.Media.SystemSoundsli suoneranno per te.
     

  2. Implementa qualsiasi altro suono personalizzabile dai tuoi utenti nel pannello di controllo del suono

    • In questo modo gli utenti possono facilmente modificare o rimuovere i suoni dalla tua applicazione e non è necessario scrivere alcuna interfaccia utente per questo: è già lì
    • Ogni profilo utente può sovrascrivere questi suoni a modo suo
    • Come:
      • Crea il profilo audio della tua applicazione nel registro di Windows (Suggerimento: non c'è bisogno di programmazione, basta aggiungere le chiavi nel programma di installazione dell'applicazione.)
      • Nell'applicazione, leggere il percorso del file audio o la risorsa DLL dalle chiavi di registro e riprodurlo. (Come riprodurre i suoni che puoi vedere in altre risposte.)

Grazie per queste informazioni extra. Vorrei aggiungere un esempio: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);suona la mano sonora . Nota che suona in modo asincrono, qui ho aggiunto un comando sleep per attendere il completamento del suono. Se non aspetti e riproduci un altro suono, il precedente si interrompe immediatamente.
Matt


2

Per riprodurre un file audio in Windows form usando C # controlliamo un semplice esempio come segue:

1.Vai a Visual Studio (VS-2008/2010/2012) -> Menu File -> fai clic su Nuovo progetto.

2.Nel Nuovo progetto -> fai clic su Applicazione Windows Form -> Assegna un nome e quindi fai clic su OK.

Si aprirà un nuovo progetto "Windows Forms".

3.Trascina e rilascia un controllo Button dalla casella degli strumenti al Windows Form.

4. Fare doppio clic sul pulsante per creare automaticamente il gestore dell'evento Click predefinito e aggiungere il codice seguente.

Questo codice visualizza la finestra di dialogo Apri file e passa i risultati a un metodo denominato "playSound" che creerai nel passaggio successivo.

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


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

5. Aggiungere il seguente codice di metodo sotto il pulsante1_Clic event hander.

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

6.Ora eseguiamo l'applicazione premendo semplicemente F5 per eseguire il codice.

7.Fare clic sul pulsante e selezionare un file audio. Dopo il caricamento del file, il suono verrà riprodotto.

Spero che questo sia un esempio utile per i principianti ...


1

Penso che devi prima aggiungere un file .wav a Resources. Ad esempio, hai un file audio denominato Sound.wav. Dopo aver aggiunto il file Sound.wav a Resources, puoi utilizzare questo codice:

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

Questo è un altro modo per riprodurre il suono.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.