diff --git a/source/Mockingboard.cpp b/source/Mockingboard.cpp index 37588f5d..8d2e8738 100644 --- a/source/Mockingboard.cpp +++ b/source/Mockingboard.cpp @@ -1447,6 +1447,11 @@ void MB_InitializeForLoadingSnapshot() // GH#609 { MB_Reset(); InitSoundcardType(); + + if (g_bDisableDirectSound || g_bDisableDirectSoundMockingboard) + return; + + _ASSERT(MockingboardVoice.lpDSBvoice); MockingboardVoice.lpDSBvoice->Stop(); // Reason: 'MB voice is playing' then loading a save-state where 'no MB present' } @@ -1701,6 +1706,9 @@ void MB_InitializeIO(LPBYTE pCxRomPeripheral, UINT uSlot4, UINT uSlot5) MB_SetSoundcardType(g_Slot[4]); + if (g_bDisableDirectSound || g_bDisableDirectSoundMockingboard) + return; + // Sound buffer may have been stopped by MB_InitializeForLoadingSnapshot(). // NB. DSZeroVoiceBuffer() also zeros the sound buffer, so it's better than directly calling IDirectSoundBuffer::Play(): // - without zeroing, then the previous sound buffer can be heard for a fraction of a second diff --git a/source/SoundCore.cpp b/source/SoundCore.cpp index c1ae5303..6ec6c623 100644 --- a/source/SoundCore.cpp +++ b/source/SoundCore.cpp @@ -235,6 +235,7 @@ bool DSZeroVoiceBuffer(PVOICE Voice, char* pszDevName, DWORD dwBufferSize) DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer SHORT* pDSLockedBuffer; + _ASSERT(Voice->lpDSBvoice); HRESULT hr = Voice->lpDSBvoice->Stop(); if(FAILED(hr)) {