Mp3, wav et wma en c#

Contenu du snippet

Voici une petite aide pour comprendre comment développer un lecteur audio.
J'ai essayer de pondre un code propre, clair et facil à comprendre permettant
de jouer de la musique ( mp3 ou Wav ), et biensur apporter un minimum de
fonctions utiles... ( Stop, Lecture, Pause, Position, Durée, Volume )

Je pense que le source parle de lui même :)

Attention :
- Pour pouvoir utiliser Quartztypelib, il faut impérativement faire dans le menu :
Projet > Ajouter une référence > .Net > Parcourir > Windows > System32 > quartz.dll

bien, bon courage et n'hésitez pas à faire des remarques ou suggestions...

Source / Exemple :


using System;
using System.IO;
using QuartzTypeLib;
using System.Timers;

namespace PxMedia
{
	//****************************************************************************************************
	// Lecteur Pandoox Music : WAV / MP3
	//****************************************************************************************************
	public class PxMusic
	{   
		// Initialisation des variables pour stocker l'adresse du fichier en détail
		private string MusicFilePathNameExtension = null;
		private string MusicFilePath = null;
		private string MusicFileName = null;
		private string MusicFileExtension = null;
		private string MusicStatus = null;

		// Initialisation du timer pour les rafraichissements
		private static System.Timers.Timer MusicTimer = null;
		private const int MusicTimerInterval = 100;

		// Instantiation des objets utiles à la gestion d'un fichier audio
		private static QuartzTypeLib.IMediaControl  MusicCtrl = null;
		private static QuartzTypeLib.IBasicAudio  AudioCtrl = null;
		private static QuartzTypeLib.IMediaPosition PositionCtrl = null;
		private static QuartzTypeLib.FilgraphManager GManager = null;

		// Pour faciliter l'echelle audio du volume 
		private int MusicVolume = 50;

		//================================================================================
		public PxMusic( string FileName ) // Constucteur PxMusic
		{
			if( FileName != null )
			{
				// Variables pour stocker l'adresse du fichier en détail
				MusicFilePathNameExtension = Path.GetFullPath( FileName );
				MusicFilePath = Path.GetDirectoryName( FileName );
				MusicFileName = Path.GetFileNameWithoutExtension( FileName );
				MusicFileExtension = Path.GetExtension( FileName );

				// Timer pour les rafraichissements
				MusicTimer = new System.Timers.Timer( MusicTimerInterval );
				MusicTimer.Elapsed += new ElapsedEventHandler( MusicTimerEvent );

				// Instantiation des objets utiles à la gestion d'un fichier audio
				GManager = new QuartzTypeLib.FilgraphManager();
				MusicCtrl = ( QuartzTypeLib.IMediaControl )GManager;
				MusicCtrl.RenderFile( MusicFilePathNameExtension );
				AudioCtrl = ( QuartzTypeLib.IBasicAudio )MusicCtrl;
				PositionCtrl = ( QuartzTypeLib.IMediaPosition )MusicCtrl;

				/* Adapatation des echelles 
				( MusicVolume : entre 0 et 100; Audio.Volume : entre -10000 et 0 )*/
				AudioCtrl.Volume = Convert.ToInt32(	-0.0004 * Math.Pow( MusicVolume, 4 ) 
													+0.1107 * Math.Pow( MusicVolume, 3 )
													-11.334 * MusicVolume * MusicVolume
													+525.95 * MusicVolume
													-10000 );
			}
		}

		//================================================================================
		~PxMusic() // Destructeur PxMusic
		{
			Stop();
		}

		//================================================================================
		private void MusicTimerEvent( Object sender, ElapsedEventArgs e) 
		{
			// Vérifie si la musique est toujours en lecture
			if( PositionCtrl.CurrentPosition >= PositionCtrl.Duration )
				Stop();
		}

		//================================================================================
		public void Play()	// Lecture de la Music
		{
			if( MusicFilePathNameExtension != null )
			{
				// Si une musique est en pause, le play désactivera la pause uniquement
				if( MusicStatus != "Paused" )
				{
					Stop();
					MusicCtrl.Run();
				}

				MusicCtrl.Run();
				MusicStatus = "Playing";
				MusicTimer.Start();
			}
		}

		//================================================================================
		public void Stop() // Arrete la lecture en cours
		{
			if ( MusicCtrl != null )
			{
				MusicCtrl.Stop();
				MusicStatus = "Stopped";
				PositionCtrl.CurrentPosition = 0;
				MusicTimer.Stop();
			}
		}

		//================================================================================
		public void Pause() // Arrete la lecture en cours
		{
			if ( MusicCtrl != null )
			{
				if( MusicStatus == "Playing" ) // Pause s'il y a une lecture courante
				{
					MusicCtrl.Pause();
					MusicStatus = "Paused";
					MusicTimer.Stop();
				}
				else if( MusicStatus == "Paused" ) // Désactive la pause
				{
					MusicCtrl.Run();
					MusicStatus = "Playing";
					MusicTimer.Start();
				}
			}
		}

		//================================================================================
		public int Volume // Propriété : Nom complet
		{
			get
			{
				return MusicVolume;
			}
			set
			{
				if ( AudioCtrl != null && value >= 0 && value <= 100 && MusicVolume != value )
				{
					/* Adapatation des echelles 
					( MusicVolume : entre 0 et 100; Audio.Volume : entre -10000 et 0 )*/
					MusicVolume = value;
					AudioCtrl.Volume = Convert.ToInt32(	-0.0004 * Math.Pow( MusicVolume, 4 ) 
														+0.1107 * Math.Pow( MusicVolume, 3 )
														-11.334 * MusicVolume * MusicVolume
														+525.95 * MusicVolume
														-10000 );
				}
			}
		}

		//================================================================================
		public string FilePathNameExtension // Propriété : Nom complet
		{
			get
			{
				return MusicFilePathNameExtension;
			}
			set
			{
				if ( MusicFilePathNameExtension != value )
				{
					Stop();
					MusicFilePathNameExtension = value;
				}
			}
		}

		//================================================================================
		public string FilePath // Propriété : Chemin seul
		{
			get
			{
				return MusicFilePath;
			}
		}

		//================================================================================
		public string FileName // Propriété : Nom du fichier seul
		{
			get
			{
				return MusicFileName;
			}
		}

		//================================================================================
		public string FileExtension // Propriété : Extension du fichier
		{
			get
			{
				return MusicFileExtension;
			}
		}

		//================================================================================
		public string Status // Propriété : Etat de la lecture courante
		{
			get
			{
				return MusicStatus;
			}
		}

		//================================================================================
		public double TimeElapsed // Propriété : Temps écoulé
		{
			get
			{
				if( PositionCtrl != null )
					return PositionCtrl.CurrentPosition;
				else
					return -1;
			}
			set
			{
				if( PositionCtrl != null )
					PositionCtrl.CurrentPosition = value;
			}
		}

		//================================================================================
		public double Duration // Propriété : Durée total de la musique
		{
			get
			{
				if( PositionCtrl != null )
					return PositionCtrl.Duration;
				else
					return -1;
			}
		}
	}
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.