I have changed this when creating the new resampler patch but it's not really related to the main patchset.<br><br>---<br> dlls/dsound/mixer.c | 40 ++++++++++++++++++++++------------------<br> 1 files changed, 22 insertions(+), 18 deletions(-)<br>
<br>diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c<br>index 4e9e2c9..6e9fdf5 100644<br>--- a/dlls/dsound/mixer.c<br>+++ b/dlls/dsound/mixer.c<br>@@ -46,36 +46,40 @@ WINE_DEFAULT_DEBUG_CHANNEL(dsound);<br> void DSOUND_RecalcVolPan(PDSVOLUMEPAN volpan)<br>
{<br> double temp;<br>- TRACE("(%p)\n",volpan);<br> <br>- TRACE("Vol=%d Pan=%d\n", volpan->lVolume, volpan->lPan);<br>+ /* 0.01dB units: vol=100*20*log(amp); amp = 10^(vol/2000) */<br>
+ temp = pow(10.0, volpan->lVolume / 2e3);<br>+<br> /* the AmpFactors are expressed in 16.16 fixed point */<br>- volpan->dwVolAmpFactor = (ULONG) (pow(2.0, volpan->lVolume / 600.0) * 0xffff);<br>- /* FIXME: dwPan{Left|Right}AmpFactor */<br>
+ volpan->dwVolAmpFactor = (DWORD)(temp*(DOUBLE)0x10000);<br>+ volpan->dwTotalLeftAmpFactor = volpan->dwVolAmpFactor;<br>+ volpan->dwTotalRightAmpFactor = volpan->dwVolAmpFactor;<br> <br>- /* FIXME: use calculated vol and pan ampfactors */<br>
- temp = (double) (volpan->lVolume - (volpan->lPan > 0 ? volpan->lPan : 0));<br>- volpan->dwTotalLeftAmpFactor = (ULONG) (pow(2.0, temp / 600.0) * 0xffff);<br>- temp = (double) (volpan->lVolume + (volpan->lPan < 0 ? volpan->lPan : 0));<br>
- volpan->dwTotalRightAmpFactor = (ULONG) (pow(2.0, temp / 600.0) * 0xffff);<br>+ if (volpan->lPan > 0) /* left channel attenuated */<br>+ volpan->dwTotalLeftAmpFactor = (DWORD)(temp*(DOUBLE)0x10000<br>
+ * pow(10.0, -volpan->lPan / 2e3));<br> <br>- TRACE("left = %x, right = %x\n", volpan->dwTotalLeftAmpFactor, volpan->dwTotalRightAmpFactor);<br>+ if (volpan->lPan < 0) /* right channel attenuated */<br>
+ volpan->dwTotalRightAmpFactor = (DWORD)(temp*(DOUBLE)0x10000<br>+ * pow(10.0, volpan->lPan / 2e3));<br> }<br> <br> void DSOUND_AmpFactorToVolPan(PDSVOLUMEPAN volpan)<br> {<br> double left,right;<br>
- TRACE("(%p)\n",volpan);<br> <br>- TRACE("left=%x, right=%x\n",volpan->dwTotalLeftAmpFactor,volpan->dwTotalRightAmpFactor);<br>- if (volpan->dwTotalLeftAmpFactor==0)<br>- left=-10000;<br>
+#define LOG10(x) log(x)/log(10)<br>+<br>+ if (volpan->dwTotalLeftAmpFactor == 0)<br>+ left = -10000;<br> else<br>- left=600 * log(((double)volpan->dwTotalLeftAmpFactor) / 0xffff) / log(2);<br>- if (volpan->dwTotalRightAmpFactor==0)<br>
- right=-10000;<br>+ left = 2e3 * LOG10((DOUBLE)volpan->dwTotalLeftAmpFactor / 0x10000);<br>+<br>+ if (volpan->dwTotalRightAmpFactor == 0)<br>+ right =- 10000;<br> else<br>- right=600 * log(((double)volpan->dwTotalRightAmpFactor) / 0xffff) / log(2);<br>
+ right= 2e3 * LOG10((DOUBLE)volpan->dwTotalRightAmpFactor / 0x10000);<br>+<br> if (left<right)<br> {<br> volpan->lVolume=right;<br>-- <br>1.7.2.3<br><br><br>