006
03.10.2003, 17:48 Uhr
Oliver
S2-Pixelgeneral
|
Ich zeig euch mal die Klasse von dem Buch, die einwandfrei geht:
C++: |
#include <dmusici.h>
#pragma warning(disable: 4786)
#include <string> #include <map>
using namespace std;
// Definition der Klasse DirectXAudio
class DirectXAudio { public:
~DirectXAudio();
// DirectXAudio initialisieren void Init(void); // Musik und Soundeffekte hinzufügen void AddBackgroundMusic(string Name); void AddSound(string Name);
// Musik und Soundeffekte abspielen void PlayBackgroundMusic(void); void PlaySoundEffect(string Name);
private:
// DirectXMusic Objekte IDirectMusicPerformance8* lpPerformance; IDirectMusicLoader8* lpLoader; IDirectMusicSegment8* lpSegBackgroundMusic; map<string,IDirectMusicSegment8*> SoundEffectsMap;
// die Hintergrundmusik string bgMusic; };
void DirectXAudio::Init(void) { // COM initialisieren CoInitialize(NULL); CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8, (void**)&lpPerformance ); CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&lpLoader);
// Initialisieren lpPerformance->InitAudio( NULL, NULL, NULL, DMUS_APATH_DYNAMIC_STEREO, 8, DMUS_AUDIOF_ALL, NULL ); // Suchpfad auswählen WCHAR wstrSearchPath[MAX_PATH]; MultiByteToWideChar( CP_ACP, 0, "../../media", -1, wstrSearchPath, MAX_PATH ); // Suchpfad setzen lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, wstrSearchPath, FALSE ); }
void DirectXAudio::AddBackgroundMusic(string Name) { // Name der Datei WCHAR wstrFileName[MAX_PATH]; MultiByteToWideChar(CP_ACP,0,Name.c_str(),-1,wstrFileName,MAX_PATH); if (FAILED(lpLoader->LoadObjectFromFile( CLSID_DirectMusicSegment, IID_IDirectMusicSegment8, wstrFileName, (LPVOID*) &lpSegBackgroundMusic))) { MessageBox( NULL, "Fehler beim Laden der Datei", "AddBackgroundMusic", MB_OK ); }
// Segment hinzufügen lpSegBackgroundMusic->Download( lpPerformance ); }
void DirectXAudio::AddSound(string Name) { WCHAR wstrFileName[MAX_PATH]; MultiByteToWideChar(CP_ACP,0,Name.c_str(),-1,wstrFileName,MAX_PATH);
if (FAILED(lpLoader->LoadObjectFromFile( CLSID_DirectMusicSegment, IID_IDirectMusicSegment8, wstrFileName, (LPVOID*) &SoundEffectsMap[Name]))) { MessageBox( NULL, "Fehler beim Laden der Datei","AddSound", MB_OK ); return; }
// Segment hinzufügen SoundEffectsMap[Name]->Download(lpPerformance); }
void DirectXAudio::PlayBackgroundMusic(void) { lpPerformance->PlaySegmentEx( lpSegBackgroundMusic, // abzuspielendes Segment NULL, NULL, DMUS_SEGF_SECONDARY, // im sekundären Buffer 0, // Stelle, an der gestartet werden soll NULL, NULL, NULL ); }
void DirectXAudio::PlaySoundEffect(string Name) { lpPerformance->PlaySegmentEx( SoundEffectsMap[Name], // abzuspielendes Segment NULL, NULL, DMUS_SEGF_SECONDARY, // im sekundären Buffer 0, // Stelle, an der gestartet werden soll NULL, NULL, NULL ); }
DirectXAudio::~DirectXAudio() { map<string,IDirectMusicSegment8*>::iterator it; for(it=SoundEffectsMap.begin();it!=SoundEffectsMap.end();it++) { (*it).second->Release(); }
// Segment freigeben if(lpSegBackgroundMusic) { lpSegBackgroundMusic->Release(); lpSegBackgroundMusic = NULL; } // performance freigeben if(lpPerformance) { lpPerformance->Stop(NULL,NULL,0,0); lpPerformance->CloseDown(); lpPerformance->Release(); lpPerformance = NULL; }
// Loader freigeben if(lpLoader) { lpLoader->Release(); lpLoader = NULL; }
// COM beenden CoUninitialize(); }
|
--edit: Pablo. Smilies deaktiviert. -- -- Demokratie ist die Diktatur der Mehrheit.
www.siedler25.org/ ( Siedler2 - Remake ) Dieser Post wurde am 03.10.2003 um 18:25 Uhr von Pablo Yanez Trujillo editiert. |