From: Anton Baskanov baskanov@gmail.com
--- dlls/dsound/sound3d.c | 7 +++---- dlls/dsound/tests/ds3d.c | 1 - 2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c index c22a3d5509f..0008e34755d 100644 --- a/dlls/dsound/sound3d.c +++ b/dlls/dsound/sound3d.c @@ -182,12 +182,14 @@ void DSOUND_Calc3DBuffer(IDirectSoundBufferImpl *dsb) /* we need to calculate distance between buffer and listener*/ vDistance = VectorBetweenTwoPoints(&dsb->device->ds3dl.vPosition, &dsb->ds3db_ds3db.vPosition); flDistance = VectorMagnitude (&vDistance); + vRelativeVel = VectorBetweenTwoPoints(&dsb->device->ds3dl.vVelocity, &dsb->ds3db_ds3db.vVelocity); break; case DS3DMODE_HEADRELATIVE: TRACE("Head-relative 3D processing mode\n"); /* distance between buffer and listener is same as buffer's position */ vDistance = dsb->ds3db_ds3db.vPosition; flDistance = VectorMagnitude (&vDistance); + vRelativeVel = dsb->ds3db_ds3db.vVelocity; break; default: TRACE("3D processing disabled\n"); @@ -293,14 +295,11 @@ void DSOUND_Calc3DBuffer(IDirectSoundBufferImpl *dsb) dsb->freq = dsb->ds3db_freq;
/* doppler shift*/ - vRelativeVel = VectorBetweenTwoPoints(&dsb->device->ds3dl.vVelocity, &dsb->ds3db_ds3db.vVelocity); if (!VectorMagnitude(&dsb->ds3db_ds3db.vVelocity) && !VectorMagnitude(&dsb->device->ds3dl.vVelocity)) { TRACE("doppler: Buffer and Listener don't have velocities\n"); } - else if (!(dsb->ds3db_ds3db.vVelocity.x == dsb->device->ds3dl.vVelocity.x && - dsb->ds3db_ds3db.vVelocity.y == dsb->device->ds3dl.vVelocity.y && - dsb->ds3db_ds3db.vVelocity.z == dsb->device->ds3dl.vVelocity.z) && + else if (!(vRelativeVel.x == 0.0f && vRelativeVel.y == 0.0f && vRelativeVel.z == 0.0f) && !(vDistance.x == 0.0f && vDistance.y == 0.0f && vDistance.z == 0.0f)) { /* calculate length of vRelativeVel component which causes Doppler Effect diff --git a/dlls/dsound/tests/ds3d.c b/dlls/dsound/tests/ds3d.c index 9ad8e3e58fc..9f5752a203c 100644 --- a/dlls/dsound/tests/ds3d.c +++ b/dlls/dsound/tests/ds3d.c @@ -1452,7 +1452,6 @@ static void test_doppler(GUID *guid, BOOL play) /* The shifted frequency is limited to DSBFREQUENCY_MAX. */ check_doppler(dsound, listener, play, DS3DMODE_NORMAL, 0, 0, 1, -90, 176400, 200000);
- /* Wine TODO: The frequency is too low. */ check_doppler(dsound, listener, play, DS3DMODE_HEADRELATIVE, 0, -90, 1, -90, 22050, 29400);
IDirectSound3DListener_Release(listener);