Add DopplerFactor to Audio Source

This commit is contained in:
Wojtek Figat
2023-04-20 16:01:27 +02:00
parent c8dc8396f9
commit eb613d3e8a
4 changed files with 37 additions and 4 deletions

View File

@@ -119,6 +119,7 @@ namespace XAudio2
XAUDIO2_SEND_DESCRIPTOR Destination;
float Pitch;
float StartTime;
float DopplerFactor;
uint64 LastBufferStartSamplesPlayed;
int32 BuffersProcessed;
bool IsDirty;
@@ -398,6 +399,7 @@ void AudioBackendXAudio2::Source_OnAdd(AudioSource* source)
aSource->Data.InnerRadius = FLAX_DST_TO_XAUDIO(source->GetMinDistance());
aSource->Is3D = source->Is3D();
aSource->Pitch = source->GetPitch();
aSource->DopplerFactor = source->GetDopplerFactor();
aSource->UpdateTransform(source);
aSource->UpdateVelocity(source);
@@ -502,6 +504,7 @@ void AudioBackendXAudio2::Source_SpatialSetupChanged(AudioSource* source)
if (aSource)
{
// TODO: implement attenuation settings for 3d audio
aSource->DopplerFactor = source->GetDopplerFactor();
aSource->Data.InnerRadius = FLAX_DST_TO_XAUDIO(source->GetMinDistance());
aSource->IsDirty = true;
}
@@ -827,7 +830,7 @@ void AudioBackendXAudio2::Base_Update()
}
}
const float frequencyRatio = dopplerFactor * source.Pitch * dsp.DopplerFactor;
const float frequencyRatio = dopplerFactor * source.Pitch * dsp.DopplerFactor * source.DopplerFactor;
source.Voice->SetFrequencyRatio(frequencyRatio);
source.Voice->SetOutputMatrix(XAudio2::MasteringVoice, dsp.SrcChannelCount, dsp.DstChannelCount, dsp.pMatrixCoefficients);