151 votes

Comment jouer un son en C#, .NET

J'ai une application Windows écrite en C#/.NET.

Comment puis-je jouer un son spécifique lorsqu'un bouton est cliqué ?

282voto

bporter Points 1574

Vous pourriez utiliser :

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

43 votes

Cette réponse est parfaite car un nouvel utilisateur peut comprendre que SoundPlayer appartient à System.Media.....

33 votes

@Ali... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Cela signifie interpréter la chaîne suivante comme littérale. Autrement dit, le "\" de la chaîne sera réellement un "\" dans la sortie, plutôt que d'avoir à mettre " \\ " pour signifier le caractère littéral "

0 votes

La réponse de @Praveen vient de donner un autre fait instructif. Merci à Dexter d'avoir posé ce symbole "@".

105voto

kd7 Points 16740

Vous pouvez utiliser SystèmeSound par exemple, System.Media.SystemSounds.Asterisk.Play(); .

0 votes

Très utile. il peut être utile d'utiliser les valeurs par défaut du système.

13 votes

Il est important de noter que si vous désactivez les sons du système dans les paramètres de Windows (du moins les Windows les plus récents), il ne joue rien.

35voto

ChrisF Points 74295

Pour Windows Forms, une solution consiste à utiliser la fonction 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()
    }
}

Page MSDN

Cela fonctionnera également avec WPF, mais vous avez d'autres options comme l'utilisation de MediaPlayer Page MSDN

1 votes

Mieux encore, dans le code de production, créez-la une seule fois et utilisez-la plusieurs fois plutôt que de la créer à chaque fois que le bouton est pressé.

0 votes

Je renommerais cette fonction en ButtonClick Il s'agit simplement d'un style plus proche de celui de la dénomination C#.

1 votes

@EthanBierlein - c'était probablement la convention de dénomination lorsque j'ai posté la réponse ;)

16voto

miroxlav Points 1201

Informations supplémentaires.

Il s'agit d'une réponse de haut niveau pour les applications qui veulent s'intégrer de façon transparente dans l'environnement Windows. Les détails techniques de l'interprétation d'un son particulier ont été fournis dans d'autres réponses. En outre, notez toujours ces deux points :

  1. Utilisez cinq sons standard du système dans des scénarios typiques c'est-à-dire

    • Astérisque - à jouer lorsque vous voulez mettre en évidence l'événement en cours

    • Question - jouer avec les questions (la fenêtre de la boîte à messages du système joue celle-ci)

    • Exclamation - jouer avec l'icône d'excalamation (la fenêtre de la boîte à messages du système joue celle-ci)

    • Bip (son système par défaut)

    • Arrêt critique ("Hand") - jouer avec l'erreur (la fenêtre de la boîte de messages du système joue celle-ci)
       

    Méthodes de la classe System.Media.SystemSounds les jouera pour vous.
     

  2. Mettez en œuvre tout autre son personnalisable par vos utilisateurs en Son panneau de contrôle

    • De cette façon, les utilisateurs peuvent facilement modifier ou supprimer des sons de votre application et vous ne devez pas écrire d'interface utilisateur pour cela - elle est déjà présente.
    • Chaque profil d'utilisateur peut modifier ces sons à sa manière.
    • Comment faire :
      • Créez le profil sonore de votre application dans le registre Windows. (Conseil : pas besoin de programmation, il suffit d'ajouter les clés dans le programme d'installation de votre application).
      • Dans votre application, lisez le chemin du fichier son ou la ressource DLL à partir de vos clés de registre et jouez-le. (Vous pouvez voir comment lire les sons dans d'autres réponses).

1 votes

Merci pour ces informations supplémentaires. J'aimerais ajouter un exemple : System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000); joue le son Main . Notez qu'il joue de manière asynchrone, ici j'ai ajouté une commande sleep pour attendre la fin du son. Si vous n'attendez pas, et jouez un autre son, le précédent s'arrête immédiatement.

0 votes

@Matt - merci de partager. Le problème possible (bien qu'improbable) est qu'un utilisateur change son nom de domaine. Main son (comme indiqué au point 2 ci-dessus) par exemple à un son de 3 secondes et dans ce cas, leur nouveau son sera arrêté après 2 secondes.

0 votes

C'est vrai, vous ne pouvez pas savoir combien de temps le son doit être joué. Ce serait génial si cela pouvait être interrogé d'une manière ou d'une autre, ou s'il y avait une méthode synchrone attendant que le son soit joué jusqu'à la fin. I J'ai trouvé une autre question traitant de ce sujet. Dans une des réponses, il est décrit comment vous pouvez obtenir un intervalle de temps, avec lequel vous pouvez déterminer combien de millisecondes le paramètre thread.sleep devrait être.

9voto

Aleks Points 215

Le code ci-dessous permet de lire les fichiers mp3 et les fichiers wave en mémoire.

player.FileName = "123.mp3";
player.Play();

de http://alvas.net/alvas.audio,samples.aspx#sample6 ou

Player pl = new Player();
byte[] arr = File.ReadAllBytes(@"in.wav");
pl.Play(arr);

de http://alvas.net/alvas.audio,samples.aspx#sample7

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X