|
@@ -44,13 +44,13 @@ struct ProcPtrs {
|
|
|
void (WINAPI * CoUninitialize)();
|
|
|
};
|
|
|
|
|
|
static ProcPtrs proc;
|
|
|
|
|
|
|
|
|
static const char* DMusicMidiStart(const char* const* parm)
|
|
|
const char *MusicDriver_DMusic::Start(const char * const *parm)
|
|
|
{
|
|
|
if (performance != NULL) return NULL;
|
|
|
|
|
|
if (proc.CoCreateInstance == NULL) {
|
|
|
if (!LoadLibraryList((Function*)&proc, ole_files))
|
|
|
return "ole32.dll load failed";
|
|
@@ -106,13 +106,13 @@ static const char* DMusicMidiStart(const
|
|
|
}
|
|
|
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
|
|
|
static void DMusicMidiStop()
|
|
|
void MusicDriver_DMusic::Stop()
|
|
|
{
|
|
|
seeking = false;
|
|
|
|
|
|
if (performance != NULL) performance->Stop(NULL, NULL, 0, 0);
|
|
|
|
|
|
if (segment != NULL) {
|
|
@@ -133,13 +133,13 @@ static void DMusicMidiStop()
|
|
|
}
|
|
|
|
|
|
proc.CoUninitialize();
|
|
|
}
|
|
|
|
|
|
|
|
|
static void DMusicMidiPlaySong(const char* filename)
|
|
|
void MusicDriver_DMusic::PlaySong(const char* filename)
|
|
|
{
|
|
|
/* set up the loader object info */
|
|
|
DMUS_OBJECTDESC obj_desc;
|
|
|
ZeroMemory(&obj_desc, sizeof(obj_desc));
|
|
|
obj_desc.dwSize = sizeof(obj_desc);
|
|
|
obj_desc.guidClass = CLSID_DirectMusicSegment;
|
|
@@ -185,45 +185,36 @@ static void DMusicMidiPlaySong(const cha
|
|
|
}
|
|
|
|
|
|
seeking = true;
|
|
|
}
|
|
|
|
|
|
|
|
|
static void DMusicMidiStopSong()
|
|
|
void MusicDriver_DMusic::StopSong()
|
|
|
{
|
|
|
if (FAILED(performance->Stop(segment, NULL, 0, 0))) {
|
|
|
DEBUG(driver, 0, "DirectMusic: StopSegment failed");
|
|
|
}
|
|
|
seeking = false;
|
|
|
}
|
|
|
|
|
|
|
|
|
static bool DMusicMidiIsSongPlaying()
|
|
|
bool MusicDriver_DMusic::IsSongPlaying()
|
|
|
{
|
|
|
/* Not the nicest code, but there is a short delay before playing actually
|
|
|
* starts. OpenTTD makes no provision for this. */
|
|
|
if (performance->IsPlaying(segment, NULL) == S_OK) {
|
|
|
seeking = false;
|
|
|
return true;
|
|
|
} else {
|
|
|
return seeking;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
static void DMusicMidiSetVolume(byte vol)
|
|
|
void MusicDriver_DMusic::SetVolume(byte vol)
|
|
|
{
|
|
|
long db = vol * 2000 / 127 - 2000; ///< 0 - 127 -> -2000 - 0
|
|
|
performance->SetGlobalParam(GUID_PerfMasterVolume, &db, sizeof(db));
|
|
|
}
|
|
|
|
|
|
|
|
|
const HalMusicDriver _dmusic_midi_driver = {
|
|
|
DMusicMidiStart,
|
|
|
DMusicMidiStop,
|
|
|
DMusicMidiPlaySong,
|
|
|
DMusicMidiStopSong,
|
|
|
DMusicMidiIsSongPlaying,
|
|
|
DMusicMidiSetVolume,
|
|
|
};
|
|
|
|
|
|
#endif /* WIN32_ENABLE_DIRECTMUSIC_SUPPORT */
|