Mp3, wav et wma en c#

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 741 fois - Téléchargée 29 fois

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

Ajouter un commentaire

Commentaires

bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
-
Mouais, j'préfère directx pour les mêmes fonctions, moins de code ;-)
Pirate32
Messages postés
7
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
22 juillet 2004
-
Marche pas trouve31 erreur...
lsweb
Messages postés
2
Date d'inscription
jeudi 13 juin 2002
Statut
Membre
Dernière intervention
17 août 2004
-
Bonjour,

J'ai une erreur: ne trouve pas wndmaintuto.1()

Merci de m'aider.

Lsweb
cs_danyo
Messages postés
11
Date d'inscription
samedi 21 août 2004
Statut
Membre
Dernière intervention
21 mars 2005
-
Salut,

Les sons sont joues en mode asynchrone.
Dans mon programme je fais jouer des sons en boucle et on les entend en meme temps.
Sais-tu controler le mode synchrone?

Merci
alshinhap
Messages postés
1
Date d'inscription
mercredi 9 mars 2005
Statut
Membre
Dernière intervention
9 mars 2005
-
good

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.