begin process at 2012 05 27 15:41:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

DirectX

 > DIRECT X : AUDIO

DIRECT X : AUDIO


 Information sur la source

Note :
Aucune note
Catégorie :DirectX Classé sous :directx, directmusic, audio, midi, mp3 Niveau :Débutant Date de création :28/05/2005 Vu / téléchargé :8 221 / 438

Auteur : MasterShadows

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


 Description

Désolé d'avoir mis si longtemps à poster une source mais en BAC STI on a un projet BAC (cette année, c'était un I-Cybie, le robot chien) et comme ce projet coute un coeff 7 à l'écriture et 9 à l'oral (snif je passe lundi) j'avais pas envie de prendre de risque.

Bon passons au vif du sujet, ce programme sert à jouer des fichiers musicaux tel que le MP3, MIDI ou WAVE (pour l'instant ceux-là).

Je ne mets pas de WAV ni de MP3 volontairement (trop gros) alors vous n'avez que le midi.
Il vous suffit de remplacer les lignes nécessaires.

Voici le code du fichier DX_Audio.cpp

Source

  • /********************************************************/
  • /* Nom du Fichier : DX_AUDIO.cpp */
  • /* Description : Implémentation des fonctions */
  • /********************************************************/
  • /* Auteur : JANISZEWSKI Jérémy alias MasterShadows */
  • /* Date : 25 05 2005 */
  • /********************************************************/
  • /* (C) Copyright 2005 - SHADOWS Productions */
  • /********************************************************/
  • #include "DX_AUDIO.h"
  • /***************************************************************************************************************/
  • // Chargement d'un Fichier MP3
  • CDirectX_Audio_MP3::CDirectX_Audio_MP3()
  • {
  • }
  • CDirectX_Audio_MP3::~CDirectX_Audio_MP3()
  • {}
  • /************************************/
  • /* */
  • /* Efface l'allocation d'objet */
  • /* */
  • /************************************/
  • void CDirectX_Audio_MP3::vEffacer(void)
  • {
  • vArreter_Musique();
  • }
  • /************************************/
  • /* */
  • /* Initialisation du graphe et */
  • /* charge le fichier MP3 */
  • /* */
  • /************************************/
  • bool CDirectX_Audio_MP3::bJouer_Audio_MP3(unsigned short* Musique_a_Jouer)
  • {
  • HRESULT hresultat;
  • // Initialisation du composant COM
  • CoInitialize(NULL);
  • // Création du graphe
  • CoCreateInstance( CLSID_FilterGraph,
  • NULL,
  • CLSCTX_INPROC_SERVER,
  • IID_IGraphBuilder,
  • (void**)&pIGraph_Builder);
  • // Interface d'objets
  • pIGraph_Builder->QueryInterface(IID_IMediaControl, (void**)&pIMedia_Control);
  • pIGraph_Builder->QueryInterface(IID_IMediaEvent, (void**)&pIMedia_Event);
  • pIGraph_Builder->QueryInterface(IID_IMediaSeeking, (void**)&pIMedia_Seeking);
  • // Charge le fichier musical
  • hresultat = pIGraph_Builder->RenderFile(Musique_a_Jouer, NULL);
  • if(hresultat != S_OK)
  • {
  • return (0);
  • }
  • // Rapidité de la musique ( <1 -> Lent, 1 -> Normal, >1 -> Rapide)
  • pIMedia_Seeking->SetRate(1);
  • // Joue la musique
  • pIMedia_Control->Run();
  • // Musique d'arrière plan
  • bBackGroundMusiqueActive = 1;
  • return 1;
  • }
  • /************************************************/
  • /* */
  • /* Fonction qui efface la mémoire allouée */
  • /* */
  • /************************************************/
  • void CDirectX_Audio_MP3::vArreter_Musique()
  • {
  • // Stop la musique si elle est en train d'être jouée
  • pIMedia_Control->Stop();
  • // On efface tout
  • pIMedia_Control->Release();
  • pIMedia_Event->Release();
  • pIGraph_Builder->Release();
  • }
  • /****************************************************/
  • /* */
  • /* Fonction qui test le status de la musique pour */
  • /* voir si elle est finie et si elle a besoin */
  • /* d'être redemarré. */
  • /* */
  • /****************************************************/
  • void CDirectX_Audio_MP3::vCheckStatusMusique(unsigned int Rejoue)
  • {
  • long Evenement_Code;
  • pIMedia_Event->WaitForCompletion(0, &Evenement_Code);
  • // Si la musique est finie, on la redémarre
  • if((Evenement_Code == EC_COMPLETE) && (Rejoue == 1))
  • {
  • // On met la position à 0.
  • LONGLONG lPosition_Depart = 0;
  • // On arrête la musique
  • pIMedia_Control->Stop();
  • // Set les positions
  • pIMedia_Seeking->SetPositions(&lPosition_Depart, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);
  • // On rejoue la musique
  • pIMedia_Control->Run();
  • }
  • }
  • /************************************************************************************************************/
  • // Chargement d'une musique MIDI
  • CDirectX_Audio_MIDI::CDirectX_Audio_MIDI()
  • {}
  • CDirectX_Audio_MIDI::~CDirectX_Audio_MIDI()
  • {}
  • /************************************/
  • /* */
  • /* Efface les objets alloués */
  • /* */
  • /************************************/
  • void CDirectX_Audio_MIDI::vEffacer( void )
  • {
  • if( pIDMSegment ) {
  • if( pIDMPerformance )
  • pIDMSegment->Unload( pIDMPerformance );
  • }
  • SAFE_RELEASE( pIDMSegment );
  • SAFE_RELEASE( pIDMChargeur );
  • SAFE_RELEASE( pIDMPerformance );
  • }
  • /**********************************************/
  • /* */
  • /* Initialisation du système sonore et charge */
  • /* des sons variés. */
  • /* */
  • /**********************************************/
  • bool CDirectX_Audio_MIDI::bInitialisation_Sonore( HWND hWnd, WCHAR* midi_a_jouer )
  • {
  • HRESULT hResultat;
  • IDirectMusicAudioPath8 *dmAP;
  • // Initialisation du composant COM
  • CoInitialize( NULL );
  • // Création du chargeur
  • if( FAILED( hResultat = CoCreateInstance(CLSID_DirectMusicLoader,
  • NULL,
  • CLSCTX_INPROC,
  • IID_IDirectMusicLoader8,
  • (void**) &pIDMChargeur)))
  • {
  • return( 0 );
  • }
  • // Creation de la performance
  • if( FAILED( hResultat = CoCreateInstance(CLSID_DirectMusicPerformance,
  • NULL,
  • CLSCTX_INPROC,
  • IID_IDirectMusicPerformance8,
  • (void**) &pIDMPerformance)))
  • {
  • return( 0 );
  • }
  • // Initialisation audio
  • if( FAILED( hResultat = pIDMPerformance->InitAudio( NULL,
  • NULL,
  • hWnd,
  • DMUS_APATH_DYNAMIC_STEREO,
  • 64,
  • DMUS_AUDIOF_ALL,
  • NULL)))
  • {
  • return( 0 );
  • }
  • // Chemin par défaut
  • if( FAILED( pIDMPerformance->GetDefaultAudioPath(&dmAP)))
  • {
  • return(0);
  • }
  • // Volume par défaut
  • if( FAILED( dmAP->SetVolume(0,0)))
  • {
  • return( 0 );
  • }
  • // Charge le son d'un fichier
  • if ( FAILED(pIDMChargeur->LoadObjectFromFile ( CLSID_DirectMusicSegment,
  • IID_IDirectMusicSegment8,
  • midi_a_jouer,
  • (LPVOID*) &pIDMSegment)))
  • {
  • return( 0 );
  • }
  • // Télécharge les données
  • if ( FAILED ( pIDMSegment->Download( pIDMPerformance )))
  • {
  • return( 0 );
  • }
  • // Réussite
  • return( 1 );
  • }
  • /********************************/
  • /* */
  • /* Joue le fichier sonore */
  • /* */
  • /********************************/
  • void CDirectX_Audio_MIDI::vLecture_Son()
  • {
  • // Lit le segment sonore
  • pIDMPerformance->PlaySegmentEx( pIDMSegment,
  • NULL,
  • NULL,
  • 0, // Aucun flag pour avoir une vitesse de lecture normale
  • 0,
  • NULL,
  • NULL,
  • NULL);
  • }
  • /***********************************************************************************************************/
  • // Chargement d'un son Wave
  • // Constructeur
  • CDirectX_Audio_Systeme_Sonore::CDirectX_Audio_Systeme_Sonore()
  • {
  • pIDMChargeur = NULL;
  • pIDMPerformance = NULL;
  • }
  • // Destructeur
  • CDirectX_Audio_Systeme_Sonore::~CDirectX_Audio_Systeme_Sonore()
  • {
  • SAFE_RELEASE(pIDMChargeur);
  • SAFE_RELEASE(pIDMPerformance);
  • }
  • /********************************************/
  • /* */
  • /* Initialisation du moteur sonore. */
  • /* */
  • /********************************************/
  • HRESULT CDirectX_Audio_Systeme_Sonore::hrInitialisation_Systeme_Sonore(void)
  • {
  • HRESULT hResultat;
  • IDirectMusicAudioPath8* IDMAChemin;
  • // Initialisation du composant COM
  • CoInitialize(NULL);
  • // Création du chargeur
  • if(FAILED(hResultat = CoCreateInstance( CLSID_DirectMusicLoader,
  • NULL,
  • CLSCTX_INPROC,
  • IID_IDirectMusicLoader8,
  • (void**)&pIDMChargeur)))
  • {
  • return (DIRECT_X_ERREUR_CHARGEUR_MUSIQUE);
  • }
  • // Création de la performance
  • if(FAILED(hResultat = CoCreateInstance( CLSID_DirectMusicPerformance,
  • NULL,
  • CLSCTX_INPROC,
  • IID_IDirectMusicPerformance8,
  • (void**)&pIDMPerformance)))
  • {
  • return(DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
  • }
  • // Initialise l'audio
  • if(FAILED(hResultat = pIDMPerformance->InitAudio( NULL,
  • NULL,
  • hWnd,
  • DMUS_APATH_DYNAMIC_STEREO,
  • 64,
  • DMUS_AUDIOF_ALL,
  • NULL)))
  • {
  • return(DIRECT_X_ERREUR_INIT_AUDIO);
  • }
  • // Chemin par défaut
  • if(FAILED(pIDMPerformance->GetDefaultAudioPath(&IDMAChemin)))
  • {
  • return(DIRECT_X_ERREUR_CHEMIN);
  • }
  • // Volume par défaut
  • if(FAILED(IDMAChemin->SetVolume(0,0)))
  • {
  • return(DIRECT_X_ERREUR_VOLUME);
  • }
  • return S_OK;
  • }
  • /********************************************************/
  • /* */
  • /* Charge un son et le sauvegarde dans un objet */
  • /* CDirectX_Audio_WAVE_Son. */
  • /* */
  • /********************************************************/
  • HRESULT CDirectX_Audio_Systeme_Sonore::hrCharger_Son(char* szNomFichier, CDirectX_Audio_WAVE_Son* pCDAWS)
  • {
  • WCHAR szWideNomFichier[512];
  • // Soyons sur que l'audio est initialisé
  • if(!pIDMChargeur)
  • {
  • return (DIRECT_X_ERREUR_CHARGEUR_MUSIQUE);
  • }
  • if(!pIDMPerformance)
  • {
  • return(DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
  • }
  • // Effaçons les sons s'ils existent
  • if(pCDAWS->pIDMSegment)
  • {
  • pCDAWS->pIDMSegment->Unload(pIDMPerformance);
  • pCDAWS->pIDMSegment->Release();
  • pCDAWS->pIDMSegment = NULL;
  • }
  • // Copie dans le nom de fichier
  • DXUtil_ConvertGenericStringToWideCch(szWideNomFichier, szNomFichier, 512);
  • // Charge un son à partir d'un fichier
  • if(FAILED(pIDMChargeur->LoadObjectFromFile(CLSID_DirectMusicSegment,
  • IID_IDirectMusicSegment8,
  • szWideNomFichier,
  • (LPVOID*)&pCDAWS->pIDMSegment)))
  • {
  • return (DIRECT_X_ERREUR_CHARGEMENT);
  • }
  • pCDAWS->pIDMPerformance = pIDMPerformance;
  • // Télécharge les données
  • if(FAILED(pCDAWS->pIDMSegment->Download(pIDMPerformance)))
  • {
  • return (DIRECT_X_ERREUR_TELECHARGEMENT);
  • }
  • return S_OK;
  • }
  • /********************************/
  • /* */
  • /* Lit le son chargé en mémoire */
  • /* */
  • /********************************/
  • HRESULT CDirectX_Audio_Systeme_Sonore::hrLecture_Son(CDirectX_Audio_WAVE_Son* cdxaws)
  • {
  • // Soyons sur qu'un objet performance est présent
  • if(!pIDMPerformance)
  • {
  • return (DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
  • }
  • if(!cdxaws->pIDMSegment)
  • {
  • return (DIRECT_X_ERREUR_PAS_SEGMENT);
  • }
  • // Jouons le segment sonore
  • if(FAILED(pIDMPerformance->PlaySegmentEx(cdxaws->pIDMSegment,
  • NULL,
  • NULL,
  • DMUS_SEGF_DEFAULT | DMUS_SEGF_SECONDARY,
  • 0,
  • NULL,
  • NULL,
  • NULL)))
  • {
  • return (DIRECT_X_ERREUR_ECHEC_LECTURE);
  • }
  • return S_OK;
  • };
  • /****************/
  • /* */
  • /* Constructeur */
  • /* */
  • /****************/
  • CDirectX_Audio_WAVE_Son::CDirectX_Audio_WAVE_Son()
  • {
  • pIDMSegment = NULL;
  • pIDMPerformance = NULL;
  • }
  • /*****************/
  • /* */
  • /* Destructeur */
  • /* */
  • /*****************/
  • CDirectX_Audio_WAVE_Son::~CDirectX_Audio_WAVE_Son()
  • {
  • if(pIDMSegment)
  • {
  • if(pIDMPerformance)
  • pIDMSegment->Unload(pIDMPerformance);
  • }
  • SAFE_RELEASE(pIDMSegment);
  • }
/********************************************************/
/* Nom du Fichier : DX_AUDIO.cpp						*/
/* Description    : Implémentation des fonctions		*/
/********************************************************/
/* Auteur : JANISZEWSKI Jérémy alias MasterShadows		*/
/* Date   : 25 05 2005									*/
/********************************************************/
/* (C) Copyright 2005 - SHADOWS Productions				*/
/********************************************************/

#include "DX_AUDIO.h"


/***************************************************************************************************************/
// Chargement d'un Fichier MP3

CDirectX_Audio_MP3::CDirectX_Audio_MP3()
{
}

CDirectX_Audio_MP3::~CDirectX_Audio_MP3()
{}

/************************************/
/*									*/
/*    Efface l'allocation d'objet   */
/*									*/
/************************************/

void CDirectX_Audio_MP3::vEffacer(void)
{
	vArreter_Musique();
}

/************************************/
/*									*/
/*   Initialisation du graphe et    */
/*   charge le fichier MP3			*/
/*									*/
/************************************/

bool CDirectX_Audio_MP3::bJouer_Audio_MP3(unsigned short* Musique_a_Jouer)
{
	HRESULT hresultat;

	// Initialisation du composant COM
	CoInitialize(NULL);

	// Création du graphe
	CoCreateInstance( CLSID_FilterGraph,
					  NULL,
					  CLSCTX_INPROC_SERVER,
					  IID_IGraphBuilder,
					  (void**)&pIGraph_Builder);

	// Interface d'objets
	pIGraph_Builder->QueryInterface(IID_IMediaControl, (void**)&pIMedia_Control);
	pIGraph_Builder->QueryInterface(IID_IMediaEvent, (void**)&pIMedia_Event);
	pIGraph_Builder->QueryInterface(IID_IMediaSeeking, (void**)&pIMedia_Seeking);

	// Charge le fichier musical
	hresultat = pIGraph_Builder->RenderFile(Musique_a_Jouer, NULL);
	if(hresultat != S_OK)
	{
		return (0);
	}

	// Rapidité de la musique ( <1 -> Lent, 1 -> Normal, >1 -> Rapide)
	pIMedia_Seeking->SetRate(1);

	// Joue la musique
	pIMedia_Control->Run();

	// Musique d'arrière plan
	bBackGroundMusiqueActive = 1;

	return 1;
}

/************************************************/
/*												*/
/*    Fonction qui efface la mémoire allouée    */
/*												*/
/************************************************/

void CDirectX_Audio_MP3::vArreter_Musique()
{
	// Stop la musique si elle est en train d'être jouée
	pIMedia_Control->Stop();

	// On efface tout
	pIMedia_Control->Release();
	pIMedia_Event->Release();
	pIGraph_Builder->Release();
}

/****************************************************/
/*													*/
/*  Fonction qui test le status de la musique pour  */
/*    voir si elle est finie et si elle a besoin    */
/*                d'être redemarré.					*/
/*													*/
/****************************************************/

void CDirectX_Audio_MP3::vCheckStatusMusique(unsigned int Rejoue)
{
	long Evenement_Code;

	pIMedia_Event->WaitForCompletion(0, &Evenement_Code);

	// Si la musique est finie, on la redémarre
	if((Evenement_Code == EC_COMPLETE) && (Rejoue == 1))
	{
		// On met la position à 0.
		LONGLONG lPosition_Depart = 0;

		// On arrête la musique
		pIMedia_Control->Stop();

		// Set les positions
		pIMedia_Seeking->SetPositions(&lPosition_Depart, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);

		// On rejoue la musique
		pIMedia_Control->Run();
	}
}

/************************************************************************************************************/
// Chargement d'une musique MIDI

CDirectX_Audio_MIDI::CDirectX_Audio_MIDI()
{}

CDirectX_Audio_MIDI::~CDirectX_Audio_MIDI()
{}

/************************************/
/*									*/
/*     Efface les objets alloués    */
/*									*/
/************************************/

void CDirectX_Audio_MIDI::vEffacer( void )
{
	if( pIDMSegment ) {
		if( pIDMPerformance ) 
			pIDMSegment->Unload( pIDMPerformance );
	}
	SAFE_RELEASE( pIDMSegment );

	SAFE_RELEASE( pIDMChargeur );
	SAFE_RELEASE( pIDMPerformance );
}

/**********************************************/
/* 											  */
/* Initialisation du système sonore et charge */
/* des sons variés.							  */
/*											  */
/**********************************************/

bool CDirectX_Audio_MIDI::bInitialisation_Sonore( HWND hWnd, WCHAR* midi_a_jouer )
{
	HRESULT					hResultat;
	IDirectMusicAudioPath8	*dmAP;

	// Initialisation du composant COM
	CoInitialize( NULL );
	
	// Création du chargeur
	if( FAILED( hResultat = CoCreateInstance(CLSID_DirectMusicLoader,
											 NULL,
											 CLSCTX_INPROC,
											 IID_IDirectMusicLoader8,
											 (void**) &pIDMChargeur)))
	{
		return( 0 );
	}
	
	// Creation de la performance
	if( FAILED( hResultat = CoCreateInstance(CLSID_DirectMusicPerformance,
											 NULL,
											 CLSCTX_INPROC,
											 IID_IDirectMusicPerformance8,
											 (void**) &pIDMPerformance)))
	{
		return( 0 );
	}
	
	// Initialisation audio
	if( FAILED( hResultat = pIDMPerformance->InitAudio(  NULL,
														NULL,
														hWnd,
														DMUS_APATH_DYNAMIC_STEREO,
														64,
														DMUS_AUDIOF_ALL,
														NULL)))
	{
		return( 0 );
	}
	
	// Chemin par défaut
	if( FAILED( pIDMPerformance->GetDefaultAudioPath(&dmAP))) 
	{
		return(0);
	}
	
	// Volume par défaut
	if( FAILED( dmAP->SetVolume(0,0))) 
	{
		return( 0 );
	}

	// Charge le son d'un fichier
	if ( FAILED(pIDMChargeur->LoadObjectFromFile ( CLSID_DirectMusicSegment,
												IID_IDirectMusicSegment8,
												midi_a_jouer,
												(LPVOID*) &pIDMSegment)))
	{
		return( 0 );
	}
	
	// Télécharge les données
	if ( FAILED ( pIDMSegment->Download( pIDMPerformance )))
	{
		return( 0 );
	}

	// Réussite
	return( 1 );
}

/********************************/
/*								*/
/*    Joue le fichier sonore    */
/*								*/
/********************************/

void CDirectX_Audio_MIDI::vLecture_Son()
{
	// Lit le segment sonore
	pIDMPerformance->PlaySegmentEx( pIDMSegment,
								    NULL,
									NULL,
									0,  // Aucun flag pour avoir une vitesse de lecture normale
									0,
									NULL,
									NULL,
									NULL);
}

/***********************************************************************************************************/
// Chargement d'un son Wave

// Constructeur
CDirectX_Audio_Systeme_Sonore::CDirectX_Audio_Systeme_Sonore()
{
	pIDMChargeur = NULL;
	pIDMPerformance = NULL;
}

// Destructeur
CDirectX_Audio_Systeme_Sonore::~CDirectX_Audio_Systeme_Sonore()
{
	SAFE_RELEASE(pIDMChargeur);
	SAFE_RELEASE(pIDMPerformance);
}

/********************************************/
/*											*/
/*     Initialisation du moteur sonore.     */
/*											*/
/********************************************/

HRESULT CDirectX_Audio_Systeme_Sonore::hrInitialisation_Systeme_Sonore(void)
{
	HRESULT hResultat;
	IDirectMusicAudioPath8* IDMAChemin;

	// Initialisation du composant COM
	CoInitialize(NULL);

	// Création du chargeur
	if(FAILED(hResultat = CoCreateInstance( CLSID_DirectMusicLoader,
											NULL,
											CLSCTX_INPROC,
											IID_IDirectMusicLoader8,
											(void**)&pIDMChargeur)))
	{
		return (DIRECT_X_ERREUR_CHARGEUR_MUSIQUE);
	}

	// Création de la performance
	if(FAILED(hResultat = CoCreateInstance( CLSID_DirectMusicPerformance,
											NULL,
											CLSCTX_INPROC,
											IID_IDirectMusicPerformance8,
											(void**)&pIDMPerformance)))
	{
		return(DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
	}

	// Initialise l'audio
	if(FAILED(hResultat = pIDMPerformance->InitAudio( NULL,
													  NULL,
													  hWnd,
													  DMUS_APATH_DYNAMIC_STEREO,
													  64,
													  DMUS_AUDIOF_ALL,
													  NULL)))
	{
		return(DIRECT_X_ERREUR_INIT_AUDIO);
	}

	// Chemin par défaut
	if(FAILED(pIDMPerformance->GetDefaultAudioPath(&IDMAChemin)))
	{
		return(DIRECT_X_ERREUR_CHEMIN);
	}

	// Volume par défaut
	if(FAILED(IDMAChemin->SetVolume(0,0)))
	{
		return(DIRECT_X_ERREUR_VOLUME);
	}

	return S_OK;
}

/********************************************************/
/*														*/
/*	   Charge un son et le sauvegarde dans un objet     */
/*				 CDirectX_Audio_WAVE_Son.               */
/*														*/
/********************************************************/

HRESULT CDirectX_Audio_Systeme_Sonore::hrCharger_Son(char* szNomFichier, CDirectX_Audio_WAVE_Son* pCDAWS)
{
	WCHAR szWideNomFichier[512];

	// Soyons sur que l'audio est initialisé
	if(!pIDMChargeur)
	{
		return (DIRECT_X_ERREUR_CHARGEUR_MUSIQUE);
	}

	if(!pIDMPerformance)
	{
		return(DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
	}

	// Effaçons les sons s'ils existent
	if(pCDAWS->pIDMSegment)
	{
		pCDAWS->pIDMSegment->Unload(pIDMPerformance);
		pCDAWS->pIDMSegment->Release();
		pCDAWS->pIDMSegment = NULL;
	}

	// Copie dans le nom de fichier
	DXUtil_ConvertGenericStringToWideCch(szWideNomFichier, szNomFichier, 512);

	// Charge un son à partir d'un fichier
	if(FAILED(pIDMChargeur->LoadObjectFromFile(CLSID_DirectMusicSegment,
											 IID_IDirectMusicSegment8,
											 szWideNomFichier,
											 (LPVOID*)&pCDAWS->pIDMSegment)))
	{
		return (DIRECT_X_ERREUR_CHARGEMENT);
	}

	pCDAWS->pIDMPerformance = pIDMPerformance;

	// Télécharge les données
	if(FAILED(pCDAWS->pIDMSegment->Download(pIDMPerformance)))
	{
		return (DIRECT_X_ERREUR_TELECHARGEMENT);
	}

	return S_OK;
}

/********************************/
/*								*/
/* Lit le son chargé en mémoire */
/*								*/
/********************************/

HRESULT CDirectX_Audio_Systeme_Sonore::hrLecture_Son(CDirectX_Audio_WAVE_Son* cdxaws)
{
	// Soyons sur qu'un objet performance est présent
	if(!pIDMPerformance)
	{
		return (DIRECT_X_ERREUR_PERFORMANCE_MUSIQUE);
	}

	if(!cdxaws->pIDMSegment)
	{
		return (DIRECT_X_ERREUR_PAS_SEGMENT);
	}

	// Jouons le segment sonore
	if(FAILED(pIDMPerformance->PlaySegmentEx(cdxaws->pIDMSegment,
											 NULL,
											 NULL,
											 DMUS_SEGF_DEFAULT | DMUS_SEGF_SECONDARY,
											 0,
											 NULL,
											 NULL,
											 NULL)))
	{
		return (DIRECT_X_ERREUR_ECHEC_LECTURE);
	}

	return S_OK;
};

/****************/
/*				*/
/* Constructeur */
/*				*/
/****************/

CDirectX_Audio_WAVE_Son::CDirectX_Audio_WAVE_Son()
{
	pIDMSegment = NULL;
	pIDMPerformance = NULL;
}

/*****************/
/*	    		 */
/*  Destructeur  */
/*				 */
/*****************/

CDirectX_Audio_WAVE_Son::~CDirectX_Audio_WAVE_Son()
{
	if(pIDMSegment)
	{
		if(pIDMPerformance)
			pIDMSegment->Unload(pIDMPerformance);
	}
	SAFE_RELEASE(pIDMSegment);
}

 Conclusion

Bugs connus : le WAVE ne se lit pas à tous les coups (du moins lorsque l'on compile).
              lorsque vous cliquez sur un bouton autre que wav et que ce fichier est lu, il devrait s'arrêter pour lire un autre fichier mais il le fait pas

Améliorations possible : lecture d'autres fichiers et un mode de répétition. (Pas vu dans la doc de directX comment on fait, si vous avez des exemples).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip BLITTAGE DE SURFACE AVEC DIRECTX 9 SANS DIRECTDRAW
Source avec Zip TRACEUR EQUATION V1.1
Source avec Zip SCRIPTLOADER : AFFICHE UN SCRIPT CRÉER AVEC GMAX
Source avec Zip OPTIMISATION DE CODE
Source avec Zip GRAPH 3D

 Sources de la même categorie

Source avec Zip Source avec une capture MP3 DX9 JOUER par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture EQUINOX VISUAL SON METER par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture FLEUR EN DELIRE! par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture DIREXCT X 9 D3D par f_l_a_s_h_b_a_c_k
Source avec Zip BLOP DIRECT X par f_l_a_s_h_b_a_c_k

 Sources en rapport avec celle ci

Source avec Zip COVERT ART IMAGE par nanonavich
Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
Source avec Zip CONVERTIR FLV 2 MP3 par nipepsinicolas
METTRE À JOUR LE TITRE DU MORCEAU EN COURS DANS MSN LIVE par citronz1969
Source avec Zip MPEG AUDIO -> WAVE FILE (DEV-C++) par yugimega

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Récupération des données audio sous DirectX [ par kleinjer ] Bonjour,Je débute avec DirectX. J'ai une interface qui me permet d'ouvrir un fichier wav ou mp3 mais j'aurais besoin de recupérer les données audio af extracteur piste audio to mp3 [ par sweetygirl ] Bonjour tout le monde,quelle est le meilleur moyen pour convertir des pistes audio en fichier wav pui en fichier mp3. Actuellement j'utilise CDDA.exe Gestion et programmation du MIDI ? [ par tintin72 ] Bonjour, J'ai actuellement en projet de d&#233;velopper un s&#233;quenceur midi/audio sous Windows.J'aurai 3 questions en ce qui concerne la gestion e api directmusic avec dev CPP [ par ebooserge ] salut a tous, petit souci: je debute un peu en prog directx et j'essaie de faire un petit lecteur audio. j'utilise l'api directmusic de directX. j'ai Séparer les 2 pistes audio d'un fichier mp3 [ par Rogue2575 ] Bonjour, Quelqu'un saurait il séparer les deux pistes mono d'un fichier mp3 stéréo. Je ne peux pas utiliser audacity car il faudrait que cette séparat pbl effets audio (directx 9) [ par greg_greg ] salut Je voudrais r&#233;aliser des effets audio en C++. J'ai trouv&#233; des exemples grace a sdk directx 9. Le fichier exe fonctionne parfaitemen FMOD ou Directx Audio [ par seb2086 ] Bonjour,Je voulait savoir qu'est ce qui &#233;tait le mieux entre FMOD et Directx Audio pour la gestion du son.Merci. Lire le backbuffer ? Capture d'écran ? (DirectX 9) [ par supergrey ] Salut, j'aurai besoin de lire chaque octet du backbuffer (de ce qui va etre afficher a l'ecran) dans un programme directx 9. Comment faire? Merci [id3lib] Comment tester la validité d'un mp3??? [ par Sunsawe ] Bonjour &#224; tous, Voil&#224; comme indique le titre, je cherche &#224; tester la validit&#233; d'un fichier mp3. Vous savez il est simple de faire Ralala ces fichiers mp3 [ par Joky ] Hello tous ! :) Petit expos&#233; ce soir sur les fichiers mp3 :) En consid&#233;rant qu'un fichier mp3 est d&#233;coup&#233;s en frames et que chaqu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales