feat(sound): add SESound::StopOrFadeOut

This commit is contained in:
fallenoak 2025-11-27 11:23:24 -06:00
parent 775c1cbce8
commit 916c23acb2
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
3 changed files with 30 additions and 15 deletions

View File

@ -337,21 +337,7 @@ int32_t SESound::LoadDiskSound(FMOD::System* fmodSystem, const char* filename, F
return 0; return 0;
} }
FMOD_RESULT result; sound->StopOrFadeOut(1, -1.0f);
if (sound->m_internal) {
// TODO sound->m_internal->byte6D = 1;
if (sound->m_internal->m_fmodChannel) {
sound->m_internal->m_fmodChannel->stop();
sound->m_internal->m_fmodChannel = nullptr;
}
if (sound->m_internal) {
sound->m_internal->m_sound = nullptr;
sound->m_internal = nullptr;
}
}
auto internal = STORM_NEW(SEDiskSound); auto internal = STORM_NEW(SEDiskSound);
@ -460,6 +446,8 @@ int32_t SESound::LoadDiskSound(FMOD::System* fmodSystem, const char* filename, F
// Create FMOD stream or sound // Create FMOD stream or sound
FMOD_RESULT result;
if (fileSize > maxCacheSize || !useCache) { if (fileSize > maxCacheSize || !useCache) {
useCache = false; useCache = false;
@ -635,3 +623,28 @@ void SESound::SetVolume(float volume) {
this->m_internal->m_fmodChannel->setVolume(this->m_internal->GetVolume()); this->m_internal->m_fmodChannel->setVolume(this->m_internal->GetVolume());
} }
} }
void SESound::StopOrFadeOut(int32_t stop, float fadeOutTime) {
if (!this->m_internal) {
return;
}
if (fadeOutTime >= 0.0f) {
this->m_internal->m_fadeOutTime = fadeOutTime;
}
if (stop || this->m_internal->m_fadeOutTime <= 0.0f) {
this->m_internal->m_stopped = 1;
if (this->m_internal->m_fmodChannel) {
this->m_internal->m_fmodChannel->stop();
this->m_internal->m_fmodChannel = nullptr;
}
} else {
this->m_internal->m_fadeIn = 0;
this->m_internal->m_fadeOut = 1;
}
this->m_internal->m_sound = nullptr;
this->m_internal = nullptr;
}

View File

@ -44,6 +44,7 @@ class SESound {
void SetFadeOutTime(float fadeOutTime); void SetFadeOutTime(float fadeOutTime);
void SetUserData(SEUserData* userData); void SetUserData(SEUserData* userData);
void SetVolume(float volume); void SetVolume(float volume);
void StopOrFadeOut(int32_t stop, float fadeOutTime);
private: private:
// Private static functions // Private static functions

View File

@ -43,6 +43,7 @@ class SESoundInternal : public TSLinkedNode<SESoundInternal> {
// TODO // TODO
FMOD_MODE m_fmodMode = FMOD_DEFAULT; FMOD_MODE m_fmodMode = FMOD_DEFAULT;
uint8_t m_playing = 0; uint8_t m_playing = 0;
uint8_t m_stopped = 0;
// TODO // TODO
int32_t m_nonblockingReady = 0; int32_t m_nonblockingReady = 0;
// TODO // TODO