mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-03 20:40:35 +00:00
SoundAsset Refactor
This commit is contained in:
parent
9f29bee45f
commit
da40838560
61 changed files with 1333 additions and 1828 deletions
|
|
@ -88,7 +88,6 @@ SFXAmbience::SFXAmbience()
|
|||
mEnvironment( NULL )
|
||||
{
|
||||
dMemset( mState, 0, sizeof( mState ) );
|
||||
INIT_ASSET(SoundTrack);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -133,7 +132,6 @@ bool SFXAmbience::onAdd()
|
|||
|
||||
Sim::getSFXAmbienceSet()->addObject( this );
|
||||
|
||||
_setSoundTrack(getSoundTrack());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -153,7 +151,7 @@ bool SFXAmbience::preload( bool server, String& errorStr )
|
|||
if( !sfxResolve( &mEnvironment, errorStr ) )
|
||||
return false;
|
||||
|
||||
if (!isSoundTrackValid())
|
||||
if (!getSoundTrackSFXTrack())
|
||||
{
|
||||
//return false; -TODO: trigger asset download
|
||||
}
|
||||
|
|
@ -173,7 +171,7 @@ void SFXAmbience::packData( BitStream* stream )
|
|||
Parent::packData( stream );
|
||||
|
||||
sfxWrite( stream, mEnvironment );
|
||||
PACKDATA_ASSET(SoundTrack);
|
||||
PACKDATA_ASSET_REFACTOR(SoundTrack);
|
||||
|
||||
stream->write( mRolloffFactor );
|
||||
stream->write( mDopplerFactor );
|
||||
|
|
@ -189,7 +187,7 @@ void SFXAmbience::unpackData( BitStream* stream )
|
|||
Parent::unpackData( stream );
|
||||
|
||||
sfxRead( stream, &mEnvironment );
|
||||
UNPACKDATA_ASSET(SoundTrack);
|
||||
UNPACKDATA_ASSET_REFACTOR(SoundTrack);
|
||||
|
||||
stream->read( &mRolloffFactor );
|
||||
stream->read( &mDopplerFactor );
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ class SFXAmbience : public SimDataBlock
|
|||
|
||||
/// Sound track to play when inside the ambient space.
|
||||
DECLARE_SOUNDASSET(SFXAmbience, SoundTrack);
|
||||
DECLARE_ASSET_SETGET(SFXAmbience, SoundTrack);
|
||||
|
||||
/// Reverb environment to apply when inside the ambient space.
|
||||
SFXEnvironment* mEnvironment;
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ inline F32 SFXDistanceAttenuation( SFXDistanceModel model, F32 minDistance, F32
|
|||
distance = getMax( distance, minDistance );
|
||||
distance = getMin( distance, maxDistance );
|
||||
|
||||
gain = ( 1 - ( distance - minDistance ) / ( maxDistance - minDistance ) );
|
||||
gain = ( 1 - rolloffFactor * ( distance - minDistance ) / ( maxDistance - minDistance ) );
|
||||
break;
|
||||
|
||||
case SFXDistanceModelLogarithmic:
|
||||
|
|
@ -363,8 +363,8 @@ public:
|
|||
flGain = 0.0f;
|
||||
flGainHF = 0.0f;
|
||||
flGainLF = 0.0000f;
|
||||
flDecayTime = 0.0f;
|
||||
flDecayHFRatio = 0.0f;
|
||||
flDecayTime = 0.1f;
|
||||
flDecayHFRatio = 0.1f;
|
||||
flDecayLFRatio = 0.0f;
|
||||
flReflectionsGain = 0.0f;
|
||||
flReflectionsDelay = 0.0f;
|
||||
|
|
@ -372,15 +372,17 @@ public:
|
|||
flLateReverbGain = 0.0f;
|
||||
flLateReverbDelay = 0.0f;
|
||||
dMemset(flLateReverbPan, 0, sizeof(flLateReverbPan));
|
||||
flEchoTime = 0.0f;
|
||||
flEchoTime = 0.075f;
|
||||
flEchoDepth = 0.0f;
|
||||
flModulationTime = 0.0f;
|
||||
flModulationTime = 0.04f;
|
||||
flModulationDepth = 0.0f;
|
||||
flAirAbsorptionGainHF = 0.0f;
|
||||
flAirAbsorptionGainHF = 0.892f;
|
||||
flHFReference = 0.0f;
|
||||
flLFReference = 0.0f;
|
||||
flRoomRolloffFactor = 0.0f;
|
||||
iDecayHFLimit = 0;
|
||||
|
||||
validate();
|
||||
}
|
||||
|
||||
void validate()
|
||||
|
|
|
|||
|
|
@ -173,7 +173,6 @@ SFXDescription::SFXDescription( const SFXDescription& desc )
|
|||
mStreamPacketSize( desc.mStreamPacketSize ),
|
||||
mUseReverb( desc.mUseReverb ),
|
||||
mStreamReadAhead( desc.mStreamReadAhead ),
|
||||
mReverb( desc.mReverb ),
|
||||
mScatterDistance( desc.mScatterDistance ),
|
||||
mPriority( desc.mPriority )
|
||||
{
|
||||
|
|
@ -206,7 +205,6 @@ SFXDescription::SFXDescription(const SFXDescription& other, bool temp_clone)
|
|||
mStreamPacketSize( other.mStreamPacketSize ),
|
||||
mStreamReadAhead( other.mStreamReadAhead ),
|
||||
mUseReverb( other.mUseReverb ),
|
||||
mReverb( other.mReverb ),
|
||||
mPriority( other.mPriority ),
|
||||
mScatterDistance( other.mScatterDistance )
|
||||
{
|
||||
|
|
@ -390,54 +388,12 @@ void SFXDescription::initPersistFields()
|
|||
|
||||
addGroup( "Reverb" );
|
||||
|
||||
addField("useCustomReverb", TypeBool, Offset(mUseReverb, SFXDescription),
|
||||
addField("allowReverb", TypeBool, Offset(mUseReverb, SFXDescription),
|
||||
"If true, use the reverb properties defined here on sounds.\n"
|
||||
"By default, sounds will be assigned a generic reverb profile. By setting this flag to true, "
|
||||
"a custom reverb setup can be defined using the \"Reverb\" properties that will then be assigned "
|
||||
"to sounds playing with the description.\n\n"
|
||||
"@ref SFX_reverb");
|
||||
addFieldV("reverbDensity", TypeRangedF32, Offset(mReverb.flDensity, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Density of reverb environment.");
|
||||
addFieldV("reverbDiffusion", TypeRangedF32, Offset(mReverb.flDiffusion, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Environment diffusion.");
|
||||
addFieldV("reverbGain", TypeRangedF32, Offset(mReverb.flGain, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb Gain Level.");
|
||||
addFieldV("reverbGainHF", TypeRangedF32, Offset(mReverb.flGainHF, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb Gain to high frequencies");
|
||||
addFieldV("reverbGainLF", TypeRangedF32, Offset(mReverb.flGainLF, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb Gain to high frequencies");
|
||||
addFieldV("reverbDecayTime", TypeRangedF32, Offset(mReverb.flDecayTime, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Decay time for the reverb.");
|
||||
addFieldV("reverbDecayHFRatio", TypeRangedF32, Offset(mReverb.flDecayHFRatio, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"High frequency decay time ratio.");
|
||||
addFieldV("reverbDecayLFRatio", TypeRangedF32, Offset(mReverb.flDecayLFRatio, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"High frequency decay time ratio.");
|
||||
addFieldV("reflectionsGain", TypeRangedF32, Offset(mReverb.flReflectionsGain, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reflection Gain.");
|
||||
addFieldV("reflectionDelay", TypeRangedF32, Offset(mReverb.flReflectionsDelay, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"How long to delay reflections.");
|
||||
addFieldV("lateReverbGain", TypeRangedF32, Offset(mReverb.flLateReverbGain, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Late reverb gain amount.");
|
||||
addFieldV("lateReverbDelay", TypeRangedF32, Offset(mReverb.flLateReverbDelay, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Late reverb delay time.");
|
||||
addFieldV("reverbEchoTime", TypeRangedF32, Offset(mReverb.flEchoTime, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb echo time.");
|
||||
addFieldV("reverbEchoDepth", TypeRangedF32, Offset(mReverb.flEchoDepth, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb echo depth.");
|
||||
addFieldV("reverbModTime", TypeRangedF32, Offset(mReverb.flModulationTime, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb Modulation time.");
|
||||
addFieldV("reverbModDepth", TypeRangedF32, Offset(mReverb.flModulationDepth, SFXDescription), &CommonValidators::NormalizedFloat,
|
||||
"Reverb Modulation Depth.");
|
||||
addFieldV("airAbsorbtionGainHF", TypeRangedF32, Offset(mReverb.flAirAbsorptionGainHF, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"High Frequency air absorbtion");
|
||||
addFieldV("reverbHFRef", TypeRangedF32, Offset(mReverb.flHFReference, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb High Frequency Reference.");
|
||||
addFieldV("reverbLFRef", TypeRangedF32, Offset(mReverb.flLFReference, SFXDescription), &CommonValidators::PositiveFloat,
|
||||
"Reverb Low Frequency Reference.");
|
||||
addFieldV("roomRolloffFactor", TypeRangedF32, Offset(mReverb.flRoomRolloffFactor, SFXDescription), &CommonValidators::NegDefaultF32,
|
||||
"Rolloff factor for reverb.");
|
||||
addFieldV("decayHFLimit", TypeRangedS32, Offset(mReverb.iDecayHFLimit, SFXDescription), &CommonValidators::PositiveInt,
|
||||
"High Frequency decay limit.");
|
||||
endGroup("Reverb");
|
||||
|
||||
Parent::initPersistFields();
|
||||
|
|
@ -495,11 +451,6 @@ void SFXDescription::validate()
|
|||
mConeInsideAngle = mClamp( mConeInsideAngle, 0, 360 );
|
||||
mConeOutsideAngle = mClamp( mConeOutsideAngle, mConeInsideAngle, 360 );
|
||||
mConeOutsideVolume = mClampF( mConeOutsideVolume, 0, 1 );
|
||||
|
||||
if( !mIs3D )
|
||||
mUseReverb = false;
|
||||
|
||||
mReverb.validate();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -534,30 +485,6 @@ void SFXDescription::packData( BitStream *stream )
|
|||
|
||||
stream->writeFloat( mConeOutsideVolume, 6 );
|
||||
|
||||
if( mUseReverb )
|
||||
{
|
||||
stream->write(mReverb.flDensity);
|
||||
stream->write(mReverb.flDiffusion);
|
||||
stream->write(mReverb.flGain);
|
||||
stream->write(mReverb.flGainHF);
|
||||
stream->write(mReverb.flGainLF);
|
||||
stream->write(mReverb.flDecayTime);
|
||||
stream->write(mReverb.flDecayHFRatio);
|
||||
stream->write(mReverb.flDecayLFRatio);
|
||||
stream->write(mReverb.flReflectionsGain);
|
||||
stream->write(mReverb.flReflectionsDelay);
|
||||
stream->write(mReverb.flLateReverbGain);
|
||||
stream->write(mReverb.flLateReverbDelay);
|
||||
stream->write(mReverb.flEchoTime);
|
||||
stream->write(mReverb.flEchoDepth);
|
||||
stream->write(mReverb.flModulationTime);
|
||||
stream->write(mReverb.flModulationDepth);
|
||||
stream->write(mReverb.flAirAbsorptionGainHF);
|
||||
stream->write(mReverb.flHFReference);
|
||||
stream->write(mReverb.flLFReference);
|
||||
stream->write(mReverb.flRoomRolloffFactor);
|
||||
stream->write(mReverb.iDecayHFLimit);
|
||||
}
|
||||
}
|
||||
|
||||
stream->write( mFadeInTime );
|
||||
|
|
@ -607,30 +534,6 @@ void SFXDescription::unpackData( BitStream *stream )
|
|||
|
||||
mConeOutsideVolume = stream->readFloat( 6 );
|
||||
|
||||
if( mUseReverb )
|
||||
{
|
||||
stream->read(&mReverb.flDensity);
|
||||
stream->read(&mReverb.flDiffusion);
|
||||
stream->read(&mReverb.flGain);
|
||||
stream->read(&mReverb.flGainHF);
|
||||
stream->read(&mReverb.flGainLF);
|
||||
stream->read(&mReverb.flDecayTime);
|
||||
stream->read(&mReverb.flDecayHFRatio);
|
||||
stream->read(&mReverb.flDecayLFRatio);
|
||||
stream->read(&mReverb.flReflectionsGain);
|
||||
stream->read(&mReverb.flReflectionsDelay);
|
||||
stream->read(&mReverb.flLateReverbGain);
|
||||
stream->read(&mReverb.flLateReverbDelay);
|
||||
stream->read(&mReverb.flEchoTime);
|
||||
stream->read(&mReverb.flEchoDepth);
|
||||
stream->read(&mReverb.flModulationTime);
|
||||
stream->read(&mReverb.flModulationDepth);
|
||||
stream->read(&mReverb.flAirAbsorptionGainHF);
|
||||
stream->read(&mReverb.flHFReference);
|
||||
stream->read(&mReverb.flLFReference);
|
||||
stream->read(&mReverb.flRoomRolloffFactor);
|
||||
stream->read(&mReverb.iDecayHFLimit);
|
||||
}
|
||||
}
|
||||
|
||||
stream->read( &mFadeInTime );
|
||||
|
|
|
|||
|
|
@ -171,9 +171,6 @@ class SFXDescription : public SimDataBlock
|
|||
/// Only relevant if "isStreaming" is true.
|
||||
U32 mStreamReadAhead;
|
||||
|
||||
/// Reverb properties for sound playback.
|
||||
SFXSoundReverbProperties mReverb;
|
||||
|
||||
/// Parameters to which sources playing with this description should automatically
|
||||
/// connect when created.
|
||||
StringTableEntry mParameters[ MaxNumParameters ];
|
||||
|
|
@ -202,4 +199,4 @@ class SFXDescription : public SimDataBlock
|
|||
};
|
||||
|
||||
|
||||
#endif // _SFXDESCRIPTION_H_
|
||||
#endif // _SFXDESCRIPTION_H_
|
||||
|
|
|
|||
|
|
@ -261,10 +261,8 @@ bool SFXSound::_allocVoice( SFXDevice* device )
|
|||
_setCone( mConeInsideAngle, mConeOutsideAngle, mConeOutsideVolume );
|
||||
}
|
||||
|
||||
// Set reverb, if enabled.
|
||||
|
||||
if( mDescription->mUseReverb )
|
||||
mVoice->setReverb( mDescription->mReverb );
|
||||
// Set reverb, if the source group allows it.
|
||||
mVoice->setReverb(getSourceGroup()->getDescription()->mUseReverb);
|
||||
|
||||
// Update the duration... it shouldn't have changed, but
|
||||
// its probably better that we're accurate if it did.
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ void SFXSoundscapeManager::update()
|
|||
|
||||
if( !soundscape->_isOverridden() )
|
||||
{
|
||||
SFXTrack* track = ambience->getSoundTrackProfile();
|
||||
SFXTrack* track = ambience->getSoundTrackSFXTrack();
|
||||
if( !soundscape->mSource || soundscape->mSource->getTrack() != track )
|
||||
{
|
||||
if( soundscape->mSource != NULL )
|
||||
|
|
|
|||
|
|
@ -1621,13 +1621,13 @@ DefineEngineFunction( sfxPlayOnce, S32, (StringTableEntry assetId, const char* a
|
|||
|
||||
if (String::isEmpty(arg0) || !tempSoundAsset->is3D())
|
||||
{
|
||||
source = SFX->playOnce(tempSoundAsset->getSfxProfile());
|
||||
source = SFX->playOnce(tempSoundAsset->getSFXTrack());
|
||||
}
|
||||
else
|
||||
{
|
||||
MatrixF transform;
|
||||
transform.set(EulerF(0, 0, 0), Point3F(dAtof(arg0), dAtof(arg1), dAtof(arg2)));
|
||||
source = SFX->playOnce(tempSoundAsset->getSfxProfile(), &transform, NULL, dAtof(arg3));
|
||||
source = SFX->playOnce(tempSoundAsset->getSFXTrack(), &transform, NULL, dAtof(arg3));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ class SFXVoice : public StrongRefBase,
|
|||
|
||||
/// Set the reverb properties for playback of this sound.
|
||||
/// @note Has no effect on devices that do not support reverb.
|
||||
virtual void setReverb( const SFXSoundReverbProperties& reverb ) {}
|
||||
virtual void setReverb( bool useReverb ) {}
|
||||
|
||||
/// Set the priority of this voice. Default 1.0.
|
||||
/// @note Has no effect on devices that do not support voice management.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue