
Ce tutoriel a pour but, comme son nom l'indique, de réaliser un premier lecteur audio à l'aide du C#. Je code personnellement sous Visual Studio 2008 mais vous pouvez vous servir de Visual C# Express pour réaliser cette application.
Pour réaliser cette application, je diviserai ce tutoriel en deux parties : la partie design où nous réaliserons un design rapide pour l'application et la partie code où je vous expliquerai le code derrière chaque bouton.
Ouvrez Visual C# Express (ou Visual Studio si vous l'avez) puis faites Fichier, Nouveau, Projet
Vous devriez obtenir un équivalent de la fenêtre suivante :

Choisissez Application WPF, donnez lui un nom et sélectionnez un endroit où vous souhaitez l'enregistrer sur votre disque. Une fois ces informations remplies, validez et attendez la fin de la création du projet. Vous devriez arriver sur l'éditeur XAML de Visual C#.
Le projet étant maintenant créé, nous allons pouvoir nous attaquer au design de notre application
Nous allons ici créer un design simple pour commencer mais rien ne vous empêche de le modifier par la suite pour le faire convenir à vos envies.
Lors de la création du projet, vous devriez avoir le code suivant :

Si vous le compilez maintenant, vous obtiendrez une fenêtre vierge classique de 300 pixels de long par 300 pixels de large.
A l'aide de la boite à outils, nous allons ajouter quatre boutons et un slider. Les boutons correspondront à Play, Pause, Stop et parcourir tandis que le slider servira au réglage du volume. Faites un glisser/déposer du bouton vers votre fenêtre pour créer votre premier bouton. Répétez l'opération deux autres fois puis faites de même avec le slider. Les boutons apparaissent dans l'aperçu et du code s'ajoute dans l'éditeur juste en dessous.
Nous allons ensuite créer deux lignes et trois colonnes pour la mise en forme du design. Ajoutez le code suivant juste après la balise <Grid> :

Ce code permettra par la suite d'aligner les boutons de façon à utiliser au mieux l'espace pour avoir un design propre.
Si vous regardez à présent l'aperçu de la fenêtre, vous verrez que tous les boutons et le slider sont regroupés sur la même colonne.
Corrigeons cela.
Nous allons pour cela rajouter des instructions au bouton pour lui dire comment se placer dans la fenêtre. A l'aide de Grid.Column et Grid.Row, nous allons placer les éléments dans la fenêtre.
Chaque colonne et chaque ligne définie précédemment possède un identifiant, un numéro par lequel l'identifier.
Voila le code correspondant aux boutons dans leur nouvel alignement :
J'ai également modifié les noms et la position absolue des boutons pour les centrer dans leur colonne. Vous devriez obtenir ceci :

Maintenant que nous avons fait le design, nous allons passer au code.
Dans les onglets au dessus de l'éditeur, sélectionnez le fichier Window1.xaml.cs
Voila les méthodes dont nous allons nous servir pour coder notre lecteur :

Ajoutez ce code en dessous du constructeur Window1().
Retournez ensuite sur Window1.xaml et ajoutez pour chaque bouton Click="Btn_Parcourir_Click" (en remplaçant parcourir par Lecture, Pause ou Arret en fonction du bouton).
Pour le slider, il faut ajouter le code suivant : ValueChanged="trackwave_ValueChanged"
Maintenant que nous avons défini les méthodes correspondant à nos boutons, nous allons pouvoir passer au vif du sujet.
Pour commencer, nous allons ajouter une référence au projet pour pouvoir disposer des fonctions de lecture.
Dans l'explorateur de solution à droite, faites un clic droit sur References et choisissez Ajouter une référence.
Toute une liste de référence va apparaitre devant vous. Choisissez Microsoft.DirectX.AudioVideoPlayback et ajouter au code la ligne suivante :

Maintenant que c'est fait, nous disposons des fonctions de lecture préexistante dont nous aurons besoin par la suite.
Nous pouvons désormais attaquer le code à proprement dit. Nous allons commencer par définir plusieurs variables qui vont nous permettre de connaître l'état du lecteur (est-il arrêté ou en pause ?).
Pour cela nous aurons besoin de deux variables de type booléen pour savoir si le lecteur est en lecture ou en pause, une chaîne de caractère pour le chemin du fichier et enfin la variable essentielle : le lecteur audio.
Voici le code à ajouter avant le constructeur :

Comme vous avez du le remarquer, nous n'initialisons pas le lecteur car nous ne connaissons pas encore le chemin de la musique que nous souhaitons écouter.
Le bouton lecture est l'un des plus simple à réaliser. Il suffit en effet de vérifier les variables et en fonction de leur résultat lancer la musique ou non. Voici le code :

Ici, on vérifie qu'on a bien un chemin défini pour lire le fichier puis on s'assure qu'il n'y a pas déjà une lecture en cours (enlevez ce test et vous aurez un bel effet de canon :) ). On teste ensuite si il y a déjà une musique en cours mais mise en pause. Si ce n'est pas le cas, on initialise le lecteur en lui donnant le chemin où se trouve le fichier à lire. On lance ensuite la musique grâce à la fonction Play() et on met à jour les informations de lecture.
Passons ensuite au bouton Pause. Ici, pas besoin de vous donner le code, il suffit de tester si la lecture est en cours et, si c'est le cas, appeler la fonction Pause() et mettre à jour les informations de lecture.
Viens ensuite le bouton Arrêt. De même que pour le bouton Pause, il suffit d'appeler la fonction Stop() si une lecture est en cours et de mettre ensuite les informations de lecture à jour
Il ne nous reste maintenant plus que deux points à régler. Le choix du fichier musical (partie la plus difficile du programme) et la gestion du son.
Commençons par le choix du fichier musical.
Le principe est le suivant : on ouvre une fenêtre de dialogue pour permettre à l'utilisateur de choisir un morceau à écouter puis on lance la lecture du fichier et on met à jour les informations.
Le code est le suivant :

Les commentaires présent dans le code devraient vous permettre de comprendre le code sans nécessiter d'explications complémentaires.
Enfin nous allons nous attaquer au code pour le contrôle du son.
Pour ce morceau, il va nous falloir importer deux fonctions de la dll winmm.dll afin de pouvoir gérer le volume sortant des enceintes.
Voila le code à ajouter pour importer les fonctions (en oubliant pas d'ajouter la ligne using System.Runtime.InteropServices; au début du programme):

Dans le constructeur, ajoutez les lignes suivantes :

Ce code permet d'initialiser le volume et de calculer sa valeur en fonction de la position sur la barre.
Dans la fonction du slider, ajoutez le code suivant :

Ce code permet de modifier le volume en fonction de la position du slider et de le répartir équitablement sur les channels.
Voila pour le code du lecteur. Désormais vous avez votre propre player musical pour écouter vos musiques :)
Plusieurs améliorations sont possibles pour ce lecteur. Vous pouvez par exemple ajouter un indicateur pour signaler l'avancée de la musique (est-on plutôt au début ou à la fin de la chanson).
Vous pouvez également ajouter un système de playlist pour jouer des morceaux à la suite les uns des autres, modifier le design en ajoutant de belles images...
La seule limite à l'amélioration est votre imagination :)