Implement sound stop/flush (stopping boombox no longer asserts)

This commit is contained in:
elasota
2019-12-26 13:32:54 -05:00
parent b9f1d5222f
commit 501f36070a
7 changed files with 66 additions and 4 deletions

View File

@@ -80,6 +80,15 @@ void GpAudioChannelXAudio2::PostBuffer(const void *buffer, size_t bufferSize)
}
}
void GpAudioChannelXAudio2::Stop()
{
// Set voice state BEFORE calling FlushSourceBuffers so state is idle before any callbacks trigger
m_sourceVoice->Stop(0, 0);
m_voiceState = VoiceState_Idle;
m_sourceVoice->FlushSourceBuffers();
}
void GpAudioChannelXAudio2::Destroy()
{
this->~GpAudioChannelXAudio2();

View File

@@ -15,8 +15,9 @@ public:
static GpAudioChannelXAudio2 *Create(GpAudioDriverXAudio2 *driver);
void SetAudioChannelContext(IGpAudioChannelCallbacks *callbacks);
void PostBuffer(const void *buffer, size_t bufferSize);
void SetAudioChannelContext(IGpAudioChannelCallbacks *callbacks) override;
void PostBuffer(const void *buffer, size_t bufferSize) override;
void Stop() override;
void Destroy() override;
bool Init();