Changes: 1 dlls/dsound/dsound_main.c : Added waveOutSeVolume when open sound driver for dsound. Otherwise, there is no sound if we use aRts. 2 dlls/winmm/winearts/audio.c : Modified volume_effect8 for taking unsigned data as singed data, and wodPlayer_WriteMaxFrags because of wrong data length which lead to strange noise and volume control working incorrectly. Here is the content of patch.diff : Index: dlls/dsound/dsound_main.c =================================================================== RCS file: /home/wine/wine/dlls/dsound/dsound_main.c,v retrieving revision 1.64 diff -u -r1.64 dsound_main.c --- dlls/dsound/dsound_main.c 12 Sep 2002 22:07:02 -0000 1.64 +++ dlls/dsound/dsound_main.c 14 Sep 2002 04:21:07 -0000 @@ -668,6 +668,8 @@ } (*ippDS)->drvdesc.dnDevNode--; /* take away last increment */ + + /* for aRts sound server */ + if (err == DS_OK) waveOutSetVolume( (*ippDS)->drvdesc.dnDevNode, 0xFFFFFFFFL ); } if (drv && (err == DS_OK)) Index: dlls/winmm/winearts/audio.c =================================================================== RCS file: /home/wine/wine/dlls/winmm/winearts/audio.c,v retrieving revision 1.6 diff -u -r1.6 audio.c --- dlls/winmm/winearts/audio.c 17 Aug 2002 00:43:18 -0000 1.6 +++ dlls/winmm/winearts/audio.c 14 Sep 2002 04:21:11 -0000 @@ -202,8 +202,8 @@ void volume_effect8(void *bufin, void* bufout, int length, int left, int right, int nChannels) { - char *d_out = (char *)bufout; - char *d_in = (char *)bufin; + BYTE *d_out = (BYTE *)bufout; + BYTE *d_in = (BYTE *)bufin; int i, v; /* @@ -214,11 +214,11 @@ for(i = 0; i < length; i+=(nChannels)) { - v = (char) ((*(d_in++) * left) / 100); + v = (BYTE) ((*(d_in++) * left) / 100); *(d_out++) = (v>255) ? 255 : ((v<0) ? 0 : v); if(nChannels == 2) { - v = (char) ((*(d_in++) * right) / 100); + v = (BYTE) ((*(d_in++) * right) / 100); *(d_out++) = (v>255) ? 255 : ((v<0) ? 0 : v); } } @@ -645,7 +645,7 @@ { /* apply volume to the buffer we are about to send */ volume_effect8(wwo->lpPlayPtr->lpData + wwo->dwPartialOffset, - wwo->sound_buffer, toWrite>>1, wwo->volume_left, + wwo->sound_buffer, toWrite, wwo->volume_left, wwo->volume_right, wwo->format.wf.nChannels); } else {