When in attract and not playing attract sounds, have SOUNDMAN only play sounds with RageSoundParams.m_bCriticalSound == true.
Currently, only the coin sound has RageSoundParams.m_bCriticalSound = true.
This commit is contained in:
@@ -1647,7 +1647,7 @@ bool GameState::OneIsHot() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameState::IsTimeToPlaySounds() const
|
bool GameState::IsTimeToPlayAttractSounds() const
|
||||||
{
|
{
|
||||||
if( !GAMESTATE->m_bDemonstrationOrJukebox )
|
if( !GAMESTATE->m_bDemonstrationOrJukebox )
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ public:
|
|||||||
// Attract stuff
|
// Attract stuff
|
||||||
//
|
//
|
||||||
int m_iNumTimesThroughAttract; // negative means play regardless of m_iAttractSoundFrequency setting
|
int m_iNumTimesThroughAttract; // negative means play regardless of m_iAttractSoundFrequency setting
|
||||||
bool IsTimeToPlaySounds() const;
|
bool IsTimeToPlayAttractSounds() const;
|
||||||
void VisitAttractScreen( const CString sScreenName );
|
void VisitAttractScreen( const CString sScreenName );
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
#include "arch/ArchHooks/ArchHooks.h"
|
#include "arch/ArchHooks/ArchHooks.h"
|
||||||
#include "RageSoundUtil.h"
|
#include "RageSoundUtil.h"
|
||||||
#include "GameState.h"
|
|
||||||
|
|
||||||
#include "RageSoundReader_Preload.h"
|
#include "RageSoundReader_Preload.h"
|
||||||
#include "RageSoundReader_Resample.h"
|
#include "RageSoundReader_Resample.h"
|
||||||
@@ -52,14 +51,12 @@ RageSoundParams::RageSoundParams():
|
|||||||
m_LengthSeconds = -1;
|
m_LengthSeconds = -1;
|
||||||
m_FadeLength = 0;
|
m_FadeLength = 0;
|
||||||
m_Volume = 1.0f;
|
m_Volume = 1.0f;
|
||||||
|
|
||||||
if( !GAMESTATE->IsTimeToPlaySounds() )
|
|
||||||
m_Volume = 0;
|
|
||||||
|
|
||||||
m_Balance = 0; // center
|
m_Balance = 0; // center
|
||||||
speed_input_samples = speed_output_samples = 1;
|
speed_input_samples = speed_output_samples = 1;
|
||||||
m_bAccurateSync = false;
|
m_bAccurateSync = false;
|
||||||
StopMode = M_AUTO;
|
StopMode = M_AUTO;
|
||||||
|
|
||||||
|
m_bIsCriticalSound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RageSound::RageSound():
|
RageSound::RageSound():
|
||||||
@@ -890,6 +887,8 @@ float RageSound::GetAbsoluteVolume() const
|
|||||||
{
|
{
|
||||||
float f = m_Param.m_Volume;
|
float f = m_Param.m_Volume;
|
||||||
f *= SOUNDMAN->GetMixVolume();
|
f *= SOUNDMAN->GetMixVolume();
|
||||||
|
if( SOUNDMAN->GetPlayOnlyCriticalSounds() && !m_Param.m_bIsCriticalSound )
|
||||||
|
f *= 0;
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ struct RageSoundParams
|
|||||||
M_CONTINUE,
|
M_CONTINUE,
|
||||||
M_AUTO
|
M_AUTO
|
||||||
} StopMode;
|
} StopMode;
|
||||||
|
|
||||||
|
bool m_bIsCriticalSound; // "is a sound that should be played even during attract"
|
||||||
};
|
};
|
||||||
|
|
||||||
class RageSound: public RageSoundBase
|
class RageSound: public RageSoundBase
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ RageSoundManager::RageSoundManager()
|
|||||||
{
|
{
|
||||||
pos_map_queue.reserve( 1024 );
|
pos_map_queue.reserve( 1024 );
|
||||||
m_fMixVolume = 1.0f;
|
m_fMixVolume = 1.0f;
|
||||||
|
m_bPlayOnlyCriticalSounds = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundManager::Init( CString sDrivers )
|
void RageSoundManager::Init( CString sDrivers )
|
||||||
@@ -328,13 +329,20 @@ void RageSoundManager::PlayOnce( CString sPath )
|
|||||||
DeleteSoundWhenFinished( pSound );
|
DeleteSoundWhenFinished( pSound );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RageSoundManager::SetPrefs( float fMixVol )
|
void RageSoundManager::SetMixVolume( float fMixVol )
|
||||||
{
|
{
|
||||||
g_SoundManMutex.Lock(); /* lock for access to m_fMixVolume */
|
g_SoundManMutex.Lock(); /* lock for access to m_fMixVolume */
|
||||||
m_fMixVolume = fMixVol;
|
m_fMixVolume = fMixVol;
|
||||||
g_SoundManMutex.Unlock(); /* finished with m_fMixVolume */
|
g_SoundManMutex.Unlock(); /* finished with m_fMixVolume */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RageSoundManager::SetPlayOnlyCriticalSounds( bool bPlayOnlyCriticalSounds )
|
||||||
|
{
|
||||||
|
g_SoundManMutex.Lock(); /* lock for access to m_bPlayOnlyCriticalSounds */
|
||||||
|
m_bPlayOnlyCriticalSounds = bPlayOnlyCriticalSounds;
|
||||||
|
g_SoundManMutex.Unlock(); /* finished with m_bPlayOnlyCriticalSounds */
|
||||||
|
}
|
||||||
|
|
||||||
/* Standalone helpers: */
|
/* Standalone helpers: */
|
||||||
void RageSoundManager::AttenuateBuf( int16_t *pBuf, int iSamples, float fVolume )
|
void RageSoundManager::AttenuateBuf( int16_t *pBuf, int iSamples, float fVolume )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ public:
|
|||||||
void Init( CString sDrivers );
|
void Init( CString sDrivers );
|
||||||
|
|
||||||
float GetMixVolume() const { return m_fMixVolume; }
|
float GetMixVolume() const { return m_fMixVolume; }
|
||||||
void SetPrefs( float fMixVol );
|
void SetMixVolume( float fMixVol );
|
||||||
|
bool GetPlayOnlyCriticalSounds() const { return m_bPlayOnlyCriticalSounds; }
|
||||||
|
void SetPlayOnlyCriticalSounds( bool bPlayOnlyCriticalSounds );
|
||||||
|
|
||||||
void Update( float fDeltaTime );
|
void Update( float fDeltaTime );
|
||||||
void StartMixing( RageSoundBase *snd ); /* used by RageSound */
|
void StartMixing( RageSoundBase *snd ); /* used by RageSound */
|
||||||
@@ -72,6 +74,8 @@ private:
|
|||||||
|
|
||||||
/* Prefs: */
|
/* Prefs: */
|
||||||
float m_fMixVolume;
|
float m_fMixVolume;
|
||||||
|
bool m_bPlayOnlyCriticalSounds;
|
||||||
|
|
||||||
struct queued_pos_map_t
|
struct queued_pos_map_t
|
||||||
{
|
{
|
||||||
int ID, pos, got_frames;
|
int ID, pos, got_frames;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "GameSoundManager.h"
|
#include "GameSoundManager.h"
|
||||||
#include "CommonMetrics.h"
|
#include "CommonMetrics.h"
|
||||||
#include "InputEventPlus.h"
|
#include "InputEventPlus.h"
|
||||||
|
#include "RageSoundManager.h"
|
||||||
|
|
||||||
#define START_SCREEN(sScreenName) THEME->GetMetric (sScreenName,"StartScreen")
|
#define START_SCREEN(sScreenName) THEME->GetMetric (sScreenName,"StartScreen")
|
||||||
|
|
||||||
@@ -26,6 +27,7 @@ ScreenAttract::ScreenAttract( CString sName, bool bResetGameState ) : ScreenWith
|
|||||||
GAMESTATE->Reset();
|
GAMESTATE->Reset();
|
||||||
|
|
||||||
GAMESTATE->VisitAttractScreen( sName );
|
GAMESTATE->VisitAttractScreen( sName );
|
||||||
|
SOUNDMAN->SetPlayOnlyCriticalSounds( GAMESTATE->IsTimeToPlayAttractSounds() ); // mute attract sounds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +72,7 @@ void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuEle
|
|||||||
SCREENMAN->PlayCoinSound();
|
SCREENMAN->PlayCoinSound();
|
||||||
|
|
||||||
pScreen->Cancel( SM_GoToStartScreen );
|
pScreen->Cancel( SM_GoToStartScreen );
|
||||||
|
SOUNDMAN->SetPlayOnlyCriticalSounds( false ); // unmute attract sounds
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ void ChangeVolume( float fDelta )
|
|||||||
fVol += fDelta;
|
fVol += fDelta;
|
||||||
CLAMP( fVol, 0.0f, 1.0f );
|
CLAMP( fVol, 0.0f, 1.0f );
|
||||||
PREFSMAN->m_fSoundVolume.Set( fVol );
|
PREFSMAN->m_fSoundVolume.Set( fVol );
|
||||||
SOUNDMAN->SetPrefs( PREFSMAN->m_fSoundVolume );
|
SOUNDMAN->SetMixVolume( PREFSMAN->m_fSoundVolume );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -86,13 +86,11 @@ void ScreenDemonstration::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
}
|
}
|
||||||
else if( SM == SM_LoseFocus )
|
else if( SM == SM_LoseFocus )
|
||||||
{
|
{
|
||||||
SOUNDMAN->SetPrefs( PREFSMAN->GetSoundVolume() ); // turn volume back on
|
|
||||||
}
|
}
|
||||||
else if( SM == SM_GoToNextScreen )
|
else if( SM == SM_GoToNextScreen )
|
||||||
{
|
{
|
||||||
if( m_pSoundMusic )
|
if( m_pSoundMusic )
|
||||||
m_pSoundMusic->Stop();
|
m_pSoundMusic->Stop();
|
||||||
SOUNDMAN->SetPrefs( PREFSMAN->GetSoundVolume() ); // turn volume back on
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScreenJukebox::HandleScreenMessage( SM );
|
ScreenJukebox::HandleScreenMessage( SM );
|
||||||
|
|||||||
@@ -1374,7 +1374,7 @@ float ScreenGameplay::StartPlayingSong(float MinTimeToNotes, float MinTimeToMusi
|
|||||||
p.m_StartSecond = fStartSecond;
|
p.m_StartSecond = fStartSecond;
|
||||||
|
|
||||||
// Silence music if not playing attract sounds in demonstration.
|
// Silence music if not playing attract sounds in demonstration.
|
||||||
if( !GAMESTATE->IsTimeToPlaySounds() )
|
if( !GAMESTATE->IsTimeToPlayAttractSounds() )
|
||||||
p.m_Volume = 0;
|
p.m_Volume = 0;
|
||||||
|
|
||||||
ASSERT( !m_pSoundMusic->IsPlaying() );
|
ASSERT( !m_pSoundMusic->IsPlaying() );
|
||||||
|
|||||||
@@ -812,6 +812,7 @@ void ScreenManager::PlayCoinSound()
|
|||||||
{
|
{
|
||||||
RageSoundParams p;
|
RageSoundParams p;
|
||||||
p.m_Volume = PREFSMAN->m_fSoundVolume;
|
p.m_Volume = PREFSMAN->m_fSoundVolume;
|
||||||
|
p.m_bIsCriticalSound = true;
|
||||||
m_soundCoin.Play( &p );
|
m_soundCoin.Play( &p );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ void ScreenOptionsMaster::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
|
|
||||||
if( m_iChangeMask & OPT_APPLY_SOUND )
|
if( m_iChangeMask & OPT_APPLY_SOUND )
|
||||||
{
|
{
|
||||||
SOUNDMAN->SetPrefs( PREFSMAN->GetSoundVolume() );
|
SOUNDMAN->SetMixVolume( PREFSMAN->GetSoundVolume() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_iChangeMask & OPT_APPLY_SONG )
|
if( m_iChangeMask & OPT_APPLY_SONG )
|
||||||
|
|||||||
@@ -1098,7 +1098,7 @@ int main(int argc, char* argv[])
|
|||||||
LOG->Info( "Sound writeahead has been overridden to %i", PREFSMAN->m_iSoundWriteAhead.Get() );
|
LOG->Info( "Sound writeahead has been overridden to %i", PREFSMAN->m_iSoundWriteAhead.Get() );
|
||||||
SOUNDMAN = new RageSoundManager;
|
SOUNDMAN = new RageSoundManager;
|
||||||
SOUNDMAN->Init( PREFSMAN->GetSoundDrivers() );
|
SOUNDMAN->Init( PREFSMAN->GetSoundDrivers() );
|
||||||
SOUNDMAN->SetPrefs( PREFSMAN->GetSoundVolume() );
|
SOUNDMAN->SetMixVolume( PREFSMAN->GetSoundVolume() );
|
||||||
SOUND = new GameSoundManager;
|
SOUND = new GameSoundManager;
|
||||||
BOOKKEEPER = new Bookkeeper;
|
BOOKKEEPER = new Bookkeeper;
|
||||||
LIGHTSMAN = new LightsManager( PREFSMAN->GetLightsDriver() );
|
LIGHTSMAN = new LightsManager( PREFSMAN->GetLightsDriver() );
|
||||||
|
|||||||
Reference in New Issue
Block a user