|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 27.09.2003, 10:50 Titel: DirectXAudio |
|
|
Ich hab mir jetzt noch eine kleine Klasse für DirectAudio gemacht:
Code: |
class Audio
{
IDirectMusicPerformance8*Perfomance;
IDirectMusicLoader8 *Loader;
public:
bool Init(const HWND &hwnd,const char*search_directory);
bool Load(const char*filename,const Sound &seg);
void Play(const Sound &seg);
void Stop(const Sound &seg);
void Clean();
};
class Sound
{
IDirectMusicSegment8*m_segment;
public:
friend class Audio;
void Clean();
};
bool Audio::Init(const HWND &hwnd,const char*search_directory)
{
Perfomance=NULL;
Loader=NULL;
unsigned short sd2[260];
MultiByteToWideChar(CP_ACP,0,search_directory,-1,sd2,260);
CoInitialize(NULL);
CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,IID_IDirectMusicPerformance8,(LPVOID*)&Perfomance);
CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,IID_IDirectMusicLoader8,(LPVOID*)Loader);
if(FAILED(Perfomance->InitAudio(NULL,NULL,hwnd,DMUS_APATH_DYNAMIC_STEREO,64,DMUS_AUDIOF_ALL,NULL)))
return 0;
if(FAILED(Loader->SetSearchDirectory(GUID_DirectMusicAllTypes,sd2,0)))
return 0;
}
bool Audio::Load(const char *filename,const Sound &seg)
{
unsigned short filename2[260];
MultiByteToWideChar(CP_ACP,0,filename,-1,filename2,260);
if(FAILED(Loader->LoadObjectFromFile(CLSID_DirectMusicSegment,IID_IDirectMusicSegment8,filename2,(LPVOID*)seg.m_segment)))
return 0;
seg.m_segment->Download(Perfomance);
return 1;
}
void Audio::Play(const Sound &seg)
{
Perfomance->PlaySegmentEx(seg.m_segment,NULL,NULL,DMUS_SEGF_SECONDARY,0,NULL,NULL,NULL);
}
void Audio::Stop(const Sound &seg)
{
Perfomance->Stop(seg.m_segment,NULL,0,0);
}
void Audio::Clean()
{
if(Perfomance)
{
Perfomance->Stop(NULL,NULL,0,0);
Perfomance->CloseDown();
Perfomance->Release();
Perfomance=NULL;
}
if(Loader)
{
Loader->Release();
Loader=NULL;
}
CoUninitialize();
}
void Sound::Clean()
{
if(m_segment)
{
m_segment->Release();
m_segment=NULL;
}
}
|
Aber bei SetSearchDirectory stürzt es immer ab...
Mach ich bei der Konvertierung irgendetwas falsch? _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 28.09.2003, 14:58 Titel: |
|
|
So, hab das Problem jetzt selber gefunden (& hat gefehlt):
Code: |
class Audio
{
IDirectMusicPerformance8*Perfomance;
IDirectMusicLoader8 *Loader;
public:
bool Init(const HWND &hwnd,const char*search_directory);
bool Load(const char*filename,const Sound &seg);
void Play(const Sound &seg);
void Stop(const Sound &seg);
bool IsPlaying(const Sound &seg);
void Clean();
};
class Sound
{
IDirectMusicSegment8*m_segment;
public:
friend class Audio;
void Clean();
};
bool Audio::Init(const HWND &hwnd,const char*search_directory)
{
Perfomance=NULL;
Loader=NULL;
unsigned short sd2[260];
CoInitialize(NULL);
CoCreateInstance(CLSID_DirectMusicPerformance,NULL,CLSCTX_INPROC,IID_IDirectMusicPerformance8,(LPVOID*)&Perfomance);
CoCreateInstance(CLSID_DirectMusicLoader,NULL,CLSCTX_INPROC,IID_IDirectMusicLoader8,(LPVOID*)&Loader);
MultiByteToWideChar(CP_ACP,0,search_directory,-1,sd2,260);
if(FAILED(Perfomance->InitAudio(NULL,NULL,hwnd,DMUS_APATH_DYNAMIC_STEREO,64,DMUS_AUDIOF_ALL,NULL)))
return 0;
if(FAILED(Loader->SetSearchDirectory(GUID_DirectMusicAllTypes,sd2,0)))
return 0;
return 1;
}
bool Audio::Load(const char *filename,const Sound &seg)
{
unsigned short filename2[260];
MultiByteToWideChar(CP_ACP,0,filename,-1,filename2,260);
if(FAILED(Loader->LoadObjectFromFile(CLSID_DirectMusicSegment,IID_IDirectMusicSegment8,filename2,(LPVOID*)&seg.m_segment))) return 0;
seg.m_segment->Download(Perfomance);
return 1;
}
void Audio::Play(const Sound &seg)
{
HRESULT hr;
hr=Perfomance->PlaySegmentEx(seg.m_segment,NULL,NULL,DMUS_SEGF_SECONDARY,0,NULL,NULL,NULL);
const char*fehler=DXGetErrorDescription9(hr);
}
void Audio::Stop(const Sound &seg)
{
Perfomance->Stop(seg.m_segment,NULL,0,0);
}
void Audio::Clean()
{
if(Perfomance)
{
Perfomance->Stop(NULL,NULL,0,0);
Perfomance->CloseDown();
Perfomance->Release();
Perfomance=NULL;
}
if(Loader)
{
Loader->Release();
Loader=NULL;
}
CoUninitialize();
}
bool Audio::IsPlaying(const Sound &seg)
{
if( seg.m_segment == NULL || Perfomance == NULL )
return 0;
return ( Perfomance->IsPlaying( seg.m_segment, NULL ) == S_OK );
}
void Sound::Clean()
{
if(m_segment)
{
m_segment->Release();
m_segment=NULL;
}
}
|
Trotzdem wird es noch nicht abgespielt...
Kann mir jemand helfen?
edit: Bei Performance hab ich das r vergessen, also nicht wundern. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 30.09.2003, 13:43 Titel: |
|
|
Vielleicht beschreib ich mein Problem noch etwas genauer:
Immer wenn ich neu starte und dann abspiele gehts, will ich es aber dann ein 2. Mal versuchen, gehts nicht, erst wieder wenn ich neu starte.
Mach ich vielleicht beim "cleanen" irgendwas falsch? _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 30.09.2003, 13:51 Titel: |
|
|
hast du search_directory initialisiert??? |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 30.09.2003, 14:30 Titel: |
|
|
Wie initialisiert, ist doch ein Parameter.
Aber ich denke auch nicht, dass es da ran liegt, wie gesagt, wenn man neu startet wird es einwandfrei abgespielt, doch sobald man es nochmal machen will...
Übrigens:
Wenn ich dann beim 2. oder x. mal wieder abspiele und ich ins Einzelschrittmodus gehe (F10), dann erscheint wenn ich F10 gedürckt halte immer ein ganz kleines Stückchen von der Musik. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
OLiver Super JLI'ler
Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 01.10.2003, 14:40 Titel: |
|
|
Und immer wenn es das erste Mal geladen wurde, wird es fehlerhaft abgespielt. Und beim zweiten Mal dann überhaupt nicht mehr. Erst wenn ich den Computer neu gestartet habe, geht es dann wieder. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|