@@ -439,7 +439,8 @@ AudioHandle AudioManager::addAudioEvent(const AudioEventRTS *eventToAdd)
439439 return AHSV_NotForLocal;
440440 }
441441
442- AudioEventRTS *audioEvent = MSGNEW (" AudioEventRTS" ) AudioEventRTS (*eventToAdd); // poolify
442+ RefCountPtr<DynamicAudioEventRTS> audioEvent;
443+ audioEvent.Assign_No_Add_Ref (newInstance (DynamicAudioEventRTS)(*eventToAdd));
443444 audioEvent->setPlayingHandle ( allocateNewHandle () );
444445 audioEvent->generateFilename (); // which file are we actually going to play?
445446 eventToAdd->setPlayingAudioIndex ( audioEvent->getPlayingAudioIndex () );
@@ -456,7 +457,6 @@ AudioHandle AudioManager::addAudioEvent(const AudioEventRTS *eventToAdd)
456457#if RETAIL_COMPATIBLE_CRC
457458 if (notForLocal)
458459 {
459- releaseAudioEventRTS (audioEvent);
460460 return AHSV_NotForLocal;
461461 }
462462#endif
@@ -466,21 +466,22 @@ AudioHandle AudioManager::addAudioEvent(const AudioEventRTS *eventToAdd)
466466#ifdef INTENSIVE_AUDIO_DEBUG
467467 DEBUG_LOG ((" - culled due to muting (%d)." , audioEvent->getVolume ()));
468468#endif
469- releaseAudioEventRTS (audioEvent);
470469 return AHSV_Muted;
471470 }
472471
473472 if (soundType == AT_Music)
474473 {
475- m_music->addAudioEvent (audioEvent);
474+ m_music->addAudioEvent (audioEvent. Peek () );
476475 }
477476 else
478477 {
479- // Possible to nuke audioEvent inside.
480- m_sound->addAudioEvent (audioEvent);
478+ if (!m_sound->addAudioEvent (audioEvent.Peek ()))
479+ {
480+ audioEvent.Clear ();
481+ }
481482 }
482483
483- if ( audioEvent )
484+ if ( audioEvent != nullptr )
484485 {
485486 return audioEvent->getPlayingHandle ();
486487 }
@@ -578,7 +579,7 @@ void AudioManager::removeAudioEvent(AudioHandle audioEvent)
578579 return ;
579580 }
580581
581- AudioRequest *req = allocateAudioRequest ( false );
582+ AudioRequest *req = allocateAudioRequest ();
582583 req->m_handleToInteractOn = audioEvent;
583584 req->m_request = AR_Stop;
584585 appendAudioRequest ( req );
@@ -709,7 +710,12 @@ void AudioManager::setVolume( Real volume, AudioAffect whichToAffect )
709710 m_scriptMusicVolume = volume;
710711 }
711712
712- m_musicVolume = m_scriptMusicVolume * m_systemMusicVolume;
713+ const Real newVolume = m_scriptMusicVolume * m_systemMusicVolume;
714+ if (m_musicVolume != newVolume)
715+ {
716+ m_musicVolume = newVolume;
717+ m_volumeHasChanged = true ;
718+ }
713719 }
714720
715721 if (whichToAffect & AudioAffect_Sound) {
@@ -719,7 +725,12 @@ void AudioManager::setVolume( Real volume, AudioAffect whichToAffect )
719725 m_scriptSoundVolume = volume;
720726 }
721727
722- m_soundVolume = m_scriptSoundVolume * m_systemSoundVolume;
728+ const Real newVolume = m_scriptSoundVolume * m_systemSoundVolume;
729+ if (m_soundVolume != newVolume)
730+ {
731+ m_soundVolume = newVolume;
732+ m_volumeHasChanged = true ;
733+ }
723734 }
724735
725736 if (whichToAffect & AudioAffect_Sound3D) {
@@ -728,7 +739,13 @@ void AudioManager::setVolume( Real volume, AudioAffect whichToAffect )
728739 } else {
729740 m_scriptSound3DVolume = volume;
730741 }
731- m_sound3DVolume = m_scriptSound3DVolume * m_systemSound3DVolume;
742+
743+ const Real newVolume = m_scriptSound3DVolume * m_systemSound3DVolume;
744+ if (m_sound3DVolume != newVolume)
745+ {
746+ m_sound3DVolume = newVolume;
747+ m_volumeHasChanged = true ;
748+ }
732749 }
733750
734751 if (whichToAffect & AudioAffect_Speech) {
@@ -737,10 +754,14 @@ void AudioManager::setVolume( Real volume, AudioAffect whichToAffect )
737754 } else {
738755 m_scriptSpeechVolume = volume;
739756 }
740- m_speechVolume = m_scriptSpeechVolume * m_systemSpeechVolume;
741- }
742757
758+ const Real newVolume = m_scriptSpeechVolume * m_systemSpeechVolume;
759+ if (m_speechVolume != newVolume)
760+ {
761+ m_speechVolume = newVolume;
743762 m_volumeHasChanged = true ;
763+ }
764+ }
744765}
745766
746767// -------------------------------------------------------------------------------------------------
@@ -761,17 +782,13 @@ Real AudioManager::getVolume( AudioAffect whichToGet )
761782// -------------------------------------------------------------------------------------------------
762783void AudioManager::set3DVolumeAdjustment ( Real volumeAdjustment )
763784{
764- m_sound3DVolume = volumeAdjustment * m_scriptSound3DVolume * m_systemSound3DVolume;
765-
766- // clamp
767- if (m_sound3DVolume < 0 .0f )
768- m_sound3DVolume = 0 .0f ;
785+ const Real newVolume = clamp (0 .0f , volumeAdjustment * m_scriptSound3DVolume * m_systemSound3DVolume, 1 .0f );
769786
770- if (m_sound3DVolume > 1 . 0f )
771- m_sound3DVolume = 1 . 0f ;
772-
773- if ( ! has3DSensitiveStreamsPlaying () )
774- m_volumeHasChanged = TRUE ;
787+ if (m_sound3DVolume != newVolume )
788+ {
789+ m_sound3DVolume = newVolume;
790+ m_volumeHasChanged = true ;
791+ }
775792}
776793
777794// -------------------------------------------------------------------------------------------------
@@ -788,10 +805,9 @@ const Coord3D *AudioManager::getListenerPosition() const
788805}
789806
790807// -------------------------------------------------------------------------------------------------
791- AudioRequest *AudioManager::allocateAudioRequest ( Bool useAudioEvent )
808+ AudioRequest *AudioManager::allocateAudioRequest ()
792809{
793810 AudioRequest *audioReq = newInstance (AudioRequest);
794- audioReq->m_usePendingEvent = useAudioEvent;
795811 audioReq->m_requiresCheckForSample = false ;
796812 return audioReq;
797813}
@@ -805,20 +821,19 @@ void AudioManager::releaseAudioRequest( AudioRequest *requestToRelease )
805821}
806822
807823// -------------------------------------------------------------------------------------------------
808- void AudioManager::appendAudioRequest ( AudioRequest *m_request )
824+ void AudioManager::appendAudioRequest ( AudioRequest *request )
809825{
810- m_audioRequests.push_back (m_request );
826+ m_audioRequests.push_back (request );
811827}
812828
813829// -------------------------------------------------------------------------------------------------
814830// Remove all pending audio requests
815831void AudioManager::removeAllAudioRequests ()
816832{
817833 std::list<AudioRequest*>::iterator it;
818- for ( it = m_audioRequests.begin (); it != m_audioRequests.end (); it++ ) {
834+ for ( it = m_audioRequests.begin (); it != m_audioRequests.end (); ++it ) {
819835 releaseAudioRequest ( *it );
820836 }
821-
822837 m_audioRequests.clear ();
823838}
824839
@@ -1047,17 +1062,10 @@ Bool AudioManager::shouldPlayLocally(const AudioEventRTS *audioEvent)
10471062// -------------------------------------------------------------------------------------------------
10481063AudioHandle AudioManager::allocateNewHandle ()
10491064{
1050- // note, intenionally a post increment rather than a pre increment.
1065+ // note, intentionally a post increment rather than a pre increment.
10511066 return theAudioHandlePool++;
10521067}
10531068
1054- // -------------------------------------------------------------------------------------------------
1055- void AudioManager::releaseAudioEventRTS ( AudioEventRTS *&eventToRelease )
1056- {
1057- delete eventToRelease;
1058- eventToRelease = nullptr ;
1059- }
1060-
10611069// -------------------------------------------------------------------------------------------------
10621070void AudioManager::muteAudio ( MuteAudioReason reason )
10631071{
0 commit comments