diff --git a/CMakeLists.txt b/CMakeLists.txt index 07f7e4c7..7d131a77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,10 +263,6 @@ add_library(omni STATIC LEGO1/omni/src/action/mxdsstreamingaction.cpp LEGO1/omni/src/audio/mxaudiomanager.cpp LEGO1/omni/src/audio/mxaudiopresenter.cpp - LEGO1/omni/src/audio/mxloopingmidipresenter.cpp - LEGO1/omni/src/audio/mxmidipresenter.cpp - LEGO1/omni/src/audio/mxmusicmanager.cpp - LEGO1/omni/src/audio/mxmusicpresenter.cpp LEGO1/omni/src/audio/mxsoundmanager.cpp LEGO1/omni/src/audio/mxsoundpresenter.cpp LEGO1/omni/src/audio/mxwavepresenter.cpp @@ -334,7 +330,7 @@ add_library(omni STATIC register_lego1_target(omni) set_property(TARGET omni PROPERTY ARCHIVE_OUTPUT_NAME "omni$<$:d>") target_include_directories(omni PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/util") -target_link_libraries(omni PRIVATE winmm libsmacker miniaudio) +target_link_libraries(omni PRIVATE libsmacker miniaudio) add_library(lego1 SHARED LEGO1/define.cpp @@ -497,7 +493,7 @@ if (ISLE_BUILD_APP) target_link_libraries(isle PRIVATE SDL3::SDL3 iniparser-static) # Link DSOUND, WINMM, and LEGO1 - target_link_libraries(isle PRIVATE winmm lego1) + target_link_libraries(isle PRIVATE lego1) # Make sure filenames are ALL CAPS set_property(TARGET isle PROPERTY OUTPUT_NAME ISLE) diff --git a/LEGO1/LegoOmni.def b/LEGO1/LegoOmni.def index a3bbfe66..26c9e6b6 100644 --- a/LEGO1/LegoOmni.def +++ b/LEGO1/LegoOmni.def @@ -82,7 +82,6 @@ EXPORTS ?MSoundManager@@YAPAVMxSoundManager@@XZ ?MakeSourceName@@YAXPADPBD@Z ?MoveCursor@LegoVideoManager@@QAEXHH@Z -?MusicManager@@YAPAVMxMusicManager@@XZ ?NotificationManager@@YAPAVMxNotificationManager@@XZ ?Notify@MxCore@@UAEJAAVMxParam@@@Z ?Open@MxDSFile@@UAEJK@Z diff --git a/LEGO1/omni/include/mxloopingmidipresenter.h b/LEGO1/omni/include/mxloopingmidipresenter.h deleted file mode 100644 index 0bdd191e..00000000 --- a/LEGO1/omni/include/mxloopingmidipresenter.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef MXLOOPINGMIDIPRESENTER_H -#define MXLOOPINGMIDIPRESENTER_H - -#include "mxmidipresenter.h" - -// VTABLE: LEGO1 0x100dc240 -// SIZE 0x58 -class MxLoopingMIDIPresenter : public MxMIDIPresenter { -public: - // FUNCTION: BETA10 0x1012f0b0 - static const char* HandlerClassName() - { - // STRING: LEGO1 0x10101de0 - return "MxLoopingMIDIPresenter"; - } - - // FUNCTION: LEGO1 0x100b1830 - // FUNCTION: BETA10 0x10143910 - inline const char* ClassName() const override // vtable+0x0c - { - return HandlerClassName(); - } - - // FUNCTION: LEGO1 0x100b1840 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, MxLoopingMIDIPresenter::ClassName()) || MxMIDIPresenter::IsA(p_name); - } - - void StreamingTickle() override; // vtable+0x20 - void DoneTickle() override; // vtable+0x2c - MxResult PutData() override; // vtable+0x4c -}; - -// SYNTHETIC: LEGO1 0x100b19c0 -// MxLoopingMIDIPresenter::`scalar deleting destructor' - -#endif // MXLOOPINGMIDIPRESENTER_H diff --git a/LEGO1/omni/include/mxmidipresenter.h b/LEGO1/omni/include/mxmidipresenter.h deleted file mode 100644 index 35eefd4d..00000000 --- a/LEGO1/omni/include/mxmidipresenter.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef MXMIDIPRESENTER_H -#define MXMIDIPRESENTER_H - -#include "mxmusicpresenter.h" - -class MxStreamChunk; - -// VTABLE: LEGO1 0x100dca20 -// SIZE 0x58 -class MxMIDIPresenter : public MxMusicPresenter { -public: - MxMIDIPresenter(); - ~MxMIDIPresenter() override; - - // FUNCTION: BETA10 0x1012f090 - static const char* HandlerClassName() - { - // STRING: LEGO1 0x10101df8 - return "MxMIDIPresenter"; - } - - // FUNCTION: LEGO1 0x100c2650 - // FUNCTION: BETA10 0x10143a90 - inline const char* ClassName() const override // vtable+0x0c - { - return HandlerClassName(); - } - - // FUNCTION: LEGO1 0x100c2660 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, MxMIDIPresenter::ClassName()) || MxMusicPresenter::IsA(p_name); - } - - void ReadyTickle() override; // vtable+0x18 - void StartingTickle() override; // vtable+0x1c - void StreamingTickle() override; // vtable+0x20 - void DoneTickle() override; // vtable+0x2c - void Destroy() override; // vtable+0x38 - void EndAction() override; // vtable+0x40 - MxResult PutData() override; // vtable+0x4c - void SetVolume(MxS32 p_volume) override; // vtable+0x60 - - // SYNTHETIC: LEGO1 0x100c27a0 - // MxMIDIPresenter::`scalar deleting destructor' - -private: - void Init(); - void Destroy(MxBool p_fromDestructor); - -protected: - MxStreamChunk* m_chunk; // 0x54 -}; - -#endif // MXMIDIPRESENTER_H diff --git a/LEGO1/omni/include/mxmisc.h b/LEGO1/omni/include/mxmisc.h index 0f149a02..09928ae2 100644 --- a/LEGO1/omni/include/mxmisc.h +++ b/LEGO1/omni/include/mxmisc.h @@ -6,7 +6,6 @@ class MxAtomSet; class MxDSAction; class MxEventManager; -class MxMusicManager; class MxNotificationManager; class MxObjectFactory; class MxSoundManager; @@ -21,7 +20,6 @@ MxTimer* Timer(); MxStreamer* Streamer(); MxSoundManager* MSoundManager(); MxVariableTable* VariableTable(); -MxMusicManager* MusicManager(); MxEventManager* EventManager(); MxResult Start(MxDSAction*); MxNotificationManager* NotificationManager(); diff --git a/LEGO1/omni/include/mxmusicmanager.h b/LEGO1/omni/include/mxmusicmanager.h deleted file mode 100644 index 1107e7e3..00000000 --- a/LEGO1/omni/include/mxmusicmanager.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef MXMUSICMANAGER_H -#define MXMUSICMANAGER_H - -#include "decomp.h" -#include "mxaudiomanager.h" - -#include - -// VTABLE: LEGO1 0x100dc930 -// SIZE 0x58 -class MxMusicManager : public MxAudioManager { -public: - MxMusicManager(); - ~MxMusicManager() override; - - void Destroy() override; // vtable+18 - void SetVolume(MxS32 p_volume) override; // vtable+2c - virtual MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread); // vtable+30 - - inline MxBool GetMIDIInitialized() { return m_midiInitialized; } - inline void GetMIDIVolume(DWORD& p_volume) - { - if (midiOutGetVolume((HMIDIOUT) m_midiStreamH, &p_volume)) { - p_volume = CalculateVolume(100); - } - } - - MxResult ResetStream(); - void ResetBuffer(); - MxResult InitializeMIDI(MxU8* p_data, MxS32 p_loopCount); - void DeinitializeMIDI(); - void SetMultiplier(MxS32 p_multiplier); - -private: - void Destroy(MxBool p_fromDestructor); - - MxS32 CalculateVolume(MxS32 p_volume); - void SetMIDIVolume(); - - static void CALLBACK MidiCallbackProc(HDRVR p_hdrvr, UINT p_uMsg, DWORD p_dwUser, DWORD p_dw1, DWORD p_dw2); - - HMIDISTRM m_midiStreamH; // 0x30 - MxBool m_midiInitialized; // 0x34 - MxU32 m_bufferSize; // 0x38 - MxU32 m_bufferCurrentSize; // 0x3c - MxU8* m_bufferOffset; // 0x40 - MxU8* m_bufferCurrentOffset; // 0x44 - MxU32 m_loopCount; // 0x48 - MIDIHDR* m_midiHdrP; // 0x4c - MxS32 m_multiplier; // 0x50 - DWORD m_midiVolume; // 0x54 - - // SYNTHETIC: LEGO1 0x100c0610 - // MxMusicManager::`scalar deleting destructor' - -protected: - void Init(); - void InitData(); -}; - -#endif // MXMUSICMANAGER_H diff --git a/LEGO1/omni/include/mxmusicpresenter.h b/LEGO1/omni/include/mxmusicpresenter.h deleted file mode 100644 index ec9a37ce..00000000 --- a/LEGO1/omni/include/mxmusicpresenter.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef MXMUSICPRESENTER_H -#define MXMUSICPRESENTER_H - -#include "mxaudiopresenter.h" - -// VTABLE: LEGO1 0x100dc9b8 -// SIZE 0x54 -class MxMusicPresenter : public MxAudioPresenter { -public: - MxMusicPresenter(); - ~MxMusicPresenter() override; - - // FUNCTION: BETA10 0x10143a70 - static const char* HandlerClassName() - { - // STRING: LEGO1 0x10101e48 - return "MxMusicPresenter"; - } - - // FUNCTION: LEGO1 0x100c23a0 - // FUNCTION: BETA10 0x10143a50 - inline const char* ClassName() const override // vtable+0x0c - { - return HandlerClassName(); - } - - // FUNCTION: LEGO1 0x100c23b0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, MxMusicPresenter::ClassName()) || MxAudioPresenter::IsA(p_name); - } - - MxResult AddToManager() override; // vtable+0x34 - void Destroy() override; // vtable+0x38 - - // SYNTHETIC: LEGO1 0x100c24c0 - // MxMusicPresenter::`scalar deleting destructor' - -private: - void Init(); - void Destroy(MxBool p_fromDestructor); -}; - -#endif // MXMUSICPRESENTER_H diff --git a/LEGO1/omni/include/mxobjectfactory.h b/LEGO1/omni/include/mxobjectfactory.h index 882ddc55..011c3b24 100644 --- a/LEGO1/omni/include/mxobjectfactory.h +++ b/LEGO1/omni/include/mxobjectfactory.h @@ -12,11 +12,9 @@ X(MxSmkPresenter) \ X(MxStillPresenter) \ X(MxWavePresenter) \ - X(MxMIDIPresenter) \ X(MxEventPresenter) \ X(MxLoopingFlcPresenter) \ - X(MxLoopingSmkPresenter) \ - X(MxLoopingMIDIPresenter) + X(MxLoopingSmkPresenter) // VTABLE: LEGO1 0x100dc220 class MxObjectFactory : public MxCore { diff --git a/LEGO1/omni/include/mxomni.h b/LEGO1/omni/include/mxomni.h index 1b8b4573..a926a0b2 100644 --- a/LEGO1/omni/include/mxomni.h +++ b/LEGO1/omni/include/mxomni.h @@ -11,7 +11,6 @@ class MxAtomSet; class MxDSAction; class MxEntity; class MxEventManager; -class MxMusicManager; class MxNotificationManager; class MxNotificationParam; class MxObjectFactory; @@ -86,9 +85,6 @@ class MxOmni : public MxCore { // FUNCTION: BETA10 0x101251c0 MxVariableTable* GetVariableTable() const { return this->m_variableTable; } - // FUNCTION: BETA10 0x101251e0 - MxMusicManager* GetMusicManager() const { return this->m_musicManager; } - // FUNCTION: BETA10 0x10125200 MxEventManager* GetEventManager() const { return this->m_eventManager; } @@ -111,7 +107,6 @@ class MxOmni : public MxCore { MxNotificationManager* m_notificationManager; // 0x28 MxVideoManager* m_videoManager; // 0x2c MxSoundManager* m_soundManager; // 0x30 - MxMusicManager* m_musicManager; // 0x34 MxEventManager* m_eventManager; // 0x38 MxTimer* m_timer; // 0x3c MxStreamer* m_streamer; // 0x40 diff --git a/LEGO1/omni/src/audio/mxloopingmidipresenter.cpp b/LEGO1/omni/src/audio/mxloopingmidipresenter.cpp deleted file mode 100644 index 51c305fe..00000000 --- a/LEGO1/omni/src/audio/mxloopingmidipresenter.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "mxloopingmidipresenter.h" - -#include "decomp.h" -#include "mxdssound.h" -#include "mxmisc.h" -#include "mxmusicmanager.h" - -DECOMP_SIZE_ASSERT(MxLoopingMIDIPresenter, 0x58); - -// FUNCTION: LEGO1 0x100c2a80 -void MxLoopingMIDIPresenter::StreamingTickle() -{ - if (m_action->GetLoopCount()) { - MxMIDIPresenter::StreamingTickle(); - return; - } - - if (!m_chunk) { - m_chunk = NextChunk(); - return; - } - - if (m_chunk->GetTime() + m_action->GetDuration() <= m_action->GetElapsedTime()) { - ProgressTickleState(e_done); - } -} - -// FUNCTION: LEGO1 0x100c2ae0 -void MxLoopingMIDIPresenter::DoneTickle() -{ - if (m_action->GetLoopCount()) { - MxMIDIPresenter::DoneTickle(); - } - else { - EndAction(); - } -} - -// FUNCTION: LEGO1 0x100c2b00 -MxResult MxLoopingMIDIPresenter::PutData() -{ - m_criticalSection.Enter(); - - if (m_currentTickleState == e_streaming && m_chunk && !MusicManager()->GetMIDIInitialized()) { - SetVolume(((MxDSSound*) m_action)->GetVolume()); - MusicManager()->InitializeMIDI(m_chunk->GetData(), !m_action->GetLoopCount() ? -1 : m_action->GetLoopCount()); - } - - m_criticalSection.Leave(); - return SUCCESS; -} diff --git a/LEGO1/omni/src/audio/mxmidipresenter.cpp b/LEGO1/omni/src/audio/mxmidipresenter.cpp deleted file mode 100644 index d3c990c5..00000000 --- a/LEGO1/omni/src/audio/mxmidipresenter.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "mxmidipresenter.h" - -#include "decomp.h" -#include "mxautolock.h" -#include "mxdssound.h" -#include "mxdssubscriber.h" -#include "mxmisc.h" -#include "mxmusicmanager.h" - -DECOMP_SIZE_ASSERT(MxMIDIPresenter, 0x58); - -// FUNCTION: LEGO1 0x100c25e0 -MxMIDIPresenter::MxMIDIPresenter() -{ - Init(); -} - -// FUNCTION: LEGO1 0x100c27c0 -MxMIDIPresenter::~MxMIDIPresenter() -{ - Destroy(TRUE); -} - -// FUNCTION: LEGO1 0x100c2820 -void MxMIDIPresenter::Init() -{ - m_chunk = NULL; -} - -// FUNCTION: LEGO1 0x100c2830 -void MxMIDIPresenter::Destroy(MxBool p_fromDestructor) -{ - if (MusicManager()) { - MusicManager()->DeinitializeMIDI(); - } - - m_criticalSection.Enter(); - - if (m_subscriber && m_chunk) { - m_subscriber->FreeDataChunk(m_chunk); - } - Init(); - - m_criticalSection.Leave(); - - if (!p_fromDestructor) { - MxMusicPresenter::Destroy(); - } -} - -// FUNCTION: LEGO1 0x100c2890 -void MxMIDIPresenter::ReadyTickle() -{ - MxStreamChunk* chunk = NextChunk(); - - if (chunk) { - m_subscriber->FreeDataChunk(chunk); - ParseExtra(); - ProgressTickleState(e_starting); - } -} - -// FUNCTION: LEGO1 0x100c28d0 -void MxMIDIPresenter::StartingTickle() -{ - MxStreamChunk* chunk = CurrentChunk(); - - if (chunk && m_action->GetElapsedTime() >= chunk->GetTime()) { - ProgressTickleState(e_streaming); - } -} - -// FUNCTION: LEGO1 0x100c2910 -void MxMIDIPresenter::StreamingTickle() -{ - if (m_chunk) { - ProgressTickleState(e_done); - } - else { - m_chunk = NextChunk(); - } -} - -// FUNCTION: LEGO1 0x100c2940 -void MxMIDIPresenter::DoneTickle() -{ - if (!MusicManager()->GetMIDIInitialized()) { - EndAction(); - } -} - -// FUNCTION: LEGO1 0x100c2960 -void MxMIDIPresenter::Destroy() -{ - Destroy(FALSE); -} - -// FUNCTION: LEGO1 0x100c2970 -MxResult MxMIDIPresenter::PutData() -{ - m_criticalSection.Enter(); - - if (m_currentTickleState == e_streaming && m_chunk && !MusicManager()->GetMIDIInitialized()) { - SetVolume(((MxDSSound*) m_action)->GetVolume()); - - if (MusicManager()->InitializeMIDI(m_chunk->GetData(), 1) != SUCCESS) { - EndAction(); - } - } - - m_criticalSection.Leave(); - return SUCCESS; -} - -// FUNCTION: LEGO1 0x100c29e0 -void MxMIDIPresenter::EndAction() -{ - if (m_action) { - AUTOLOCK(m_criticalSection); - - MxMediaPresenter::EndAction(); - MusicManager()->DeinitializeMIDI(); - } -} - -// FUNCTION: LEGO1 0x100c2a60 -void MxMIDIPresenter::SetVolume(MxS32 p_volume) -{ - m_volume = p_volume; - MusicManager()->SetMultiplier(p_volume); -} diff --git a/LEGO1/omni/src/audio/mxmusicmanager.cpp b/LEGO1/omni/src/audio/mxmusicmanager.cpp deleted file mode 100644 index 762d3757..00000000 --- a/LEGO1/omni/src/audio/mxmusicmanager.cpp +++ /dev/null @@ -1,294 +0,0 @@ -#include "mxmusicmanager.h" - -#include "mxmisc.h" -#include "mxticklemanager.h" -#include "mxticklethread.h" - -#include - -DECOMP_SIZE_ASSERT(MxMusicManager, 0x58); - -// FUNCTION: LEGO1 0x100c05a0 -MxMusicManager::MxMusicManager() -{ - Init(); -} - -// FUNCTION: LEGO1 0x100c0630 -MxMusicManager::~MxMusicManager() -{ - Destroy(TRUE); -} - -// FUNCTION: LEGO1 0x100c0690 -void MxMusicManager::Init() -{ - m_multiplier = 100; - InitData(); -} - -// FUNCTION: LEGO1 0x100c06a0 -void MxMusicManager::InitData() -{ - m_midiStreamH = 0; - m_midiInitialized = FALSE; - m_bufferSize = 0; - m_bufferCurrentSize = 0; - m_bufferOffset = 0; - m_bufferCurrentOffset = 0; - m_loopCount = 0; - m_midiHdrP = NULL; -} - -// FUNCTION: LEGO1 0x100c06c0 -void MxMusicManager::Destroy(MxBool p_fromDestructor) -{ - if (m_thread) { - m_thread->Terminate(); - if (m_thread) { - delete m_thread; - } - } - else { - TickleManager()->UnregisterClient(this); - } - - m_criticalSection.Enter(); - DeinitializeMIDI(); - Init(); - m_criticalSection.Leave(); - - if (!p_fromDestructor) { - MxAudioManager::Destroy(); - } -} - -// FUNCTION: LEGO1 0x100c0720 -MxResult MxMusicManager::ResetStream() -{ - MxResult result = FAILURE; - - if (m_midiInitialized) { - if (m_bufferCurrentSize == 0) { - if (m_loopCount != -1) { - m_loopCount += -1; - - if (!m_loopCount) { - DeinitializeMIDI(); - goto done; - } - } - - ResetBuffer(); - } - - if (m_midiHdrP->dwFlags & MHDR_DONE || m_midiHdrP->dwFlags & MHDR_PREPARED) { - if (midiOutUnprepareHeader((HMIDIOUT) m_midiStreamH, m_midiHdrP, sizeof(MIDIHDR)) != MMSYSERR_NOERROR) { - goto done; - } - - memset(m_midiHdrP, 0, sizeof(MIDIHDR)); - } - - m_bufferCurrentOffset += 4; - DWORD length = *((DWORD*) m_bufferCurrentOffset); - m_bufferCurrentOffset += sizeof(DWORD); - - m_midiHdrP->lpData = (LPSTR) m_bufferCurrentOffset; - m_midiHdrP->dwBufferLength = length; - m_midiHdrP->dwBytesRecorded = length; - - if (!midiOutPrepareHeader((HMIDIOUT) m_midiStreamH, m_midiHdrP, sizeof(MIDIHDR))) { - if (!midiStreamOut(m_midiStreamH, m_midiHdrP, sizeof(MIDIHDR))) { - result = SUCCESS; - m_bufferCurrentOffset += length; - m_bufferCurrentSize--; - } - } - } - -done: - return result; -} - -// FUNCTION: LEGO1 0x100c07e0 -void MxMusicManager::ResetBuffer() -{ - m_bufferCurrentOffset = m_bufferOffset; - m_bufferCurrentSize = m_bufferSize; -} - -// FUNCTION: LEGO1 0x100c07f0 -void MxMusicManager::SetMIDIVolume() -{ - MxS32 result = (m_volume * m_multiplier) / 0x64; - HMIDISTRM streamHandle = m_midiStreamH; - - if (streamHandle) { - MxS32 volume = CalculateVolume(result); - midiOutSetVolume((HMIDIOUT) streamHandle, volume); - } -} - -// FUNCTION: LEGO1 0x100c0820 -void CALLBACK MxMusicManager::MidiCallbackProc(HDRVR p_hdrvr, UINT p_uMsg, DWORD p_dwUser, DWORD p_dw1, DWORD p_dw2) -{ - if (p_uMsg == MOM_DONE) { - ((MxMusicManager*) p_dwUser)->ResetStream(); - } -} - -// FUNCTION: LEGO1 0x100c0840 -MxResult MxMusicManager::Create(MxU32 p_frequencyMS, MxBool p_createThread) -{ - MxResult status = FAILURE; - MxBool locked = FALSE; - - if (MxAudioManager::Create() == SUCCESS) { - if (p_createThread) { - m_criticalSection.Enter(); - locked = TRUE; - m_thread = new MxTickleThread(this, p_frequencyMS); - - if (!m_thread || m_thread->Start(0, 0) != SUCCESS) { - goto done; - } - } - else { - TickleManager()->RegisterClient(this, p_frequencyMS); - } - - status = SUCCESS; - } - -done: - if (status != SUCCESS) { - Destroy(); - } - - if (locked) { - m_criticalSection.Leave(); - } - - return status; -} - -// FUNCTION: LEGO1 0x100c0930 -void MxMusicManager::Destroy() -{ - Destroy(FALSE); -} - -// FUNCTION: LEGO1 0x100c0940 -void MxMusicManager::SetVolume(MxS32 p_volume) -{ - MxAudioManager::SetVolume(p_volume); - m_criticalSection.Enter(); - SetMIDIVolume(); - m_criticalSection.Leave(); -} - -// FUNCTION: LEGO1 0x100c0970 -void MxMusicManager::SetMultiplier(MxS32 p_multiplier) -{ - m_criticalSection.Enter(); - m_multiplier = p_multiplier; - SetMIDIVolume(); - m_criticalSection.Leave(); -} - -// FUNCTION: LEGO1 0x100c09a0 -MxS32 MxMusicManager::CalculateVolume(MxS32 p_volume) -{ - MxS32 result = (p_volume * 0xffff) / 100; - return (result << 0x10) | result; -} - -// FUNCTION: LEGO1 0x100c09c0 -MxResult MxMusicManager::InitializeMIDI(MxU8* p_data, MxS32 p_loopCount) -{ - MxResult result = FAILURE; - - m_criticalSection.Enter(); - - if (!m_midiInitialized) { - MxU32 total = midiOutGetNumDevs(); - MxU32 device = 0; - - for (; device < total; device++) { - MIDIOUTCAPSA caps; - midiOutGetDevCapsA(device, &caps, sizeof(MIDIOUTCAPSA)); - if (caps.wTechnology == MOD_FMSYNTH) { - break; - } - } - - if (device >= total) { - device = -1; - } - - if (midiStreamOpen(&m_midiStreamH, &device, 1, (DWORD) MidiCallbackProc, (DWORD) this, CALLBACK_FUNCTION) != - MMSYSERR_NOERROR) { - goto done; - } - - GetMIDIVolume(m_midiVolume); - - m_midiHdrP = new MIDIHDR(); - if (!m_midiHdrP) { - goto done; - } - - memset(m_midiHdrP, 0, sizeof(MIDIHDR)); - - MIDIPROPTIMEDIV timediv; - timediv.cbStruct = 8; - m_bufferOffset = p_data; - m_bufferOffset += 0x14; - timediv.dwTimeDiv = *((DWORD*) m_bufferOffset); - - if (midiStreamProperty(m_midiStreamH, (LPBYTE) &timediv, MIDIPROP_SET | MIDIPROP_TIMEDIV) != MMSYSERR_NOERROR) { - goto done; - } - - m_bufferOffset += 0x14; - m_bufferSize = *((MxU32*) m_bufferOffset); - m_bufferOffset += sizeof(MxU32); - m_loopCount = p_loopCount; - m_midiInitialized = TRUE; - - ResetBuffer(); - if (ResetStream() != SUCCESS) { - goto done; - } - - SetMIDIVolume(); - if (midiStreamRestart(m_midiStreamH) != MMSYSERR_NOERROR) { - goto done; - } - - result = SUCCESS; - } - -done: - m_criticalSection.Leave(); - return result; -} - -// FUNCTION: LEGO1 0x100c0b20 -void MxMusicManager::DeinitializeMIDI() -{ - m_criticalSection.Enter(); - - if (m_midiInitialized) { - m_midiInitialized = FALSE; - midiStreamStop(m_midiStreamH); - midiOutUnprepareHeader((HMIDIOUT) m_midiStreamH, m_midiHdrP, sizeof(MIDIHDR)); - midiOutSetVolume((HMIDIOUT) m_midiStreamH, m_midiVolume); - midiStreamClose(m_midiStreamH); - delete m_midiHdrP; - InitData(); - } - - m_criticalSection.Leave(); -} diff --git a/LEGO1/omni/src/audio/mxmusicpresenter.cpp b/LEGO1/omni/src/audio/mxmusicpresenter.cpp deleted file mode 100644 index 9f327ae4..00000000 --- a/LEGO1/omni/src/audio/mxmusicpresenter.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "mxmusicpresenter.h" - -#include "decomp.h" -#include "mxmisc.h" -#include "mxmusicmanager.h" - -DECOMP_SIZE_ASSERT(MxMusicPresenter, 0x54); - -// FUNCTION: LEGO1 0x100c22c0 -MxMusicPresenter::MxMusicPresenter() -{ - Init(); -} - -// FUNCTION: LEGO1 0x100c24e0 -MxMusicPresenter::~MxMusicPresenter() -{ - Destroy(TRUE); -} - -// FUNCTION: LEGO1 0x100c2540 -void MxMusicPresenter::Init() -{ -} - -// FUNCTION: LEGO1 0x100c2550 -void MxMusicPresenter::Destroy(MxBool p_fromDestructor) -{ - if (MusicManager()) { - MusicManager()->UnregisterPresenter(*this); - } - - m_criticalSection.Enter(); - Init(); - m_criticalSection.Leave(); - - if (!p_fromDestructor) { - MxMediaPresenter::Destroy(FALSE); - } -} - -// FUNCTION: LEGO1 0x100c25a0 -MxResult MxMusicPresenter::AddToManager() -{ - MxResult result = FAILURE; - - if (MusicManager()) { - result = SUCCESS; - MusicManager()->RegisterPresenter(*this); - } - - return result; -} - -// FUNCTION: LEGO1 0x100c25d0 -void MxMusicPresenter::Destroy() -{ - Destroy(FALSE); -} diff --git a/LEGO1/omni/src/common/mxmisc.cpp b/LEGO1/omni/src/common/mxmisc.cpp index 8dbab329..98e21f89 100644 --- a/LEGO1/omni/src/common/mxmisc.cpp +++ b/LEGO1/omni/src/common/mxmisc.cpp @@ -76,14 +76,6 @@ MxVariableTable* VariableTable() return MxOmni::GetInstance()->GetVariableTable(); } -// FUNCTION: LEGO1 0x100acf30 -// FUNCTION: BETA10 0x10124faf -MxMusicManager* MusicManager() -{ - assert(MxOmni::GetInstance()); - return MxOmni::GetInstance()->GetMusicManager(); -} - // FUNCTION: LEGO1 0x100acf40 // FUNCTION: BETA10 0x10124ff6 MxEventManager* EventManager() diff --git a/LEGO1/omni/src/common/mxobjectfactory.cpp b/LEGO1/omni/src/common/mxobjectfactory.cpp index 93f2e0a0..b2fb3b7e 100644 --- a/LEGO1/omni/src/common/mxobjectfactory.cpp +++ b/LEGO1/omni/src/common/mxobjectfactory.cpp @@ -5,9 +5,7 @@ #include "mxeventpresenter.h" #include "mxflcpresenter.h" #include "mxloopingflcpresenter.h" -#include "mxloopingmidipresenter.h" #include "mxloopingsmkpresenter.h" -#include "mxmidipresenter.h" #include "mxpresenter.h" #include "mxsmkpresenter.h" #include "mxstillpresenter.h" diff --git a/LEGO1/omni/src/common/mxpresenter.cpp b/LEGO1/omni/src/common/mxpresenter.cpp index e599f568..742a02ce 100644 --- a/LEGO1/omni/src/common/mxpresenter.cpp +++ b/LEGO1/omni/src/common/mxpresenter.cpp @@ -11,9 +11,7 @@ #include "mxeventpresenter.h" #include "mxflcpresenter.h" #include "mxloopingflcpresenter.h" -#include "mxloopingmidipresenter.h" #include "mxloopingsmkpresenter.h" -#include "mxmidipresenter.h" #include "mxmisc.h" #include "mxnotificationmanager.h" #include "mxobjectfactory.h" @@ -210,8 +208,8 @@ const char* PresenterNameDispatch(const MxDSAction& p_action) format = ((MxDSSound&) p_action).GetMediaFormat(); switch (format) { case FOURCC(' ', 'M', 'I', 'D'): - name = !p_action.IsLooping() ? MxMIDIPresenter::HandlerClassName() - : MxLoopingMIDIPresenter::HandlerClassName(); + // [library:audio] No MIDI files are used in the retail version of the game. + assert(FALSE); break; case FOURCC(' ', 'W', 'A', 'V'): name = MxWavePresenter::HandlerClassName(); diff --git a/LEGO1/omni/src/main/mxomni.cpp b/LEGO1/omni/src/main/mxomni.cpp index e2ee9c10..36023007 100644 --- a/LEGO1/omni/src/main/mxomni.cpp +++ b/LEGO1/omni/src/main/mxomni.cpp @@ -6,7 +6,6 @@ #include "mxdsmultiaction.h" #include "mxeventmanager.h" #include "mxmisc.h" -#include "mxmusicmanager.h" #include "mxnotificationmanager.h" #include "mxobjectfactory.h" #include "mxomnicreateparam.h" @@ -63,7 +62,6 @@ void MxOmni::Init() m_notificationManager = NULL; m_videoManager = NULL; m_soundManager = NULL; - m_musicManager = NULL; m_eventManager = NULL; m_timer = NULL; m_streamer = NULL; @@ -149,15 +147,6 @@ MxResult MxOmni::Create(MxOmniCreateParam& p_param) } } - if (p_param.CreateFlags().CreateMusicManager()) { - if ((m_musicManager = new MxMusicManager())) { - if (m_musicManager->Create(50, 0) != SUCCESS) { - delete m_musicManager; - m_musicManager = NULL; - } - } - } - if (p_param.CreateFlags().CreateEventManager()) { if ((m_eventManager = new MxEventManager())) { if (m_eventManager->Create(50, 0) != SUCCESS) { @@ -198,7 +187,6 @@ void MxOmni::Destroy() delete m_eventManager; delete m_soundManager; - delete m_musicManager; delete m_videoManager; delete m_streamer; delete m_timer;