--- np2/win9xc/soundmng.cpp 2003/11/21 06:51:15 1.2 +++ np2/win9xc/soundmng.cpp 2005/02/07 14:46:15 1.4 @@ -28,8 +28,10 @@ static LPDIRECTSOUND pDSound; static LPDIRECTSOUNDBUFFER pDSData3; static UINT dsstreambytes; -static BYTE dsstreamevent; -static BYTE mute; +static UINT8 dsstreamevent; +static UINT mute; +static void (PARTSCALL *fnmix)(SINT16 *dst, + const SINT32 *src, UINT size); // ---- directsound @@ -72,11 +74,12 @@ UINT soundmng_create(UINT rate, UINT ms) } // キーボード表示のディレイ設定 -// keydispr_delayinit((BYTE)((ms * 10 + 563) / 564)); +// keydispr_delayinit((UINT8)((ms * 10 + 563) / 564)); samples = (rate * ms) / 2000; samples = (samples + 3) & (~3); dsstreambytes = samples * 2 * sizeof(SINT16); + soundmng_setreverse(FALSE); ZeroMemory(&pcmwf, sizeof(PCMWAVEFORMAT)); pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM; @@ -100,7 +103,7 @@ UINT soundmng_create(UINT rate, UINT ms) #if defined(VERMOUTH_LIB) cmvermouth_load(rate); #endif - dsstreamevent = (BYTE)-1; + dsstreamevent = (UINT8)-1; soundmng_reset(); return(samples); @@ -128,7 +131,7 @@ void soundmng_reset(void) { } pDSData3->Unlock(blockptr1, blocksize1, blockptr2, blocksize2); pDSData3->SetCurrentPosition(0); - dsstreamevent = (BYTE)-1; + dsstreamevent = (UINT8)-1; } } @@ -191,7 +194,7 @@ const SINT32 *pcm; } if (SUCCEEDED(hr)) { if (pcm) { - satuation_s16((SINT16 *)blockptr1, pcm, blocksize1); + (*fnmix)((SINT16 *)blockptr1, pcm, blocksize1); } else { ZeroMemory(blockptr1, blocksize1); @@ -225,6 +228,13 @@ void soundmng_sync(void) { } void soundmng_setreverse(BOOL reverse) { + + if (!reverse) { + fnmix = satuation_s16; + } + else { + fnmix = satuation_s16x; + } } @@ -251,20 +261,23 @@ void soundmng_deinitialize(void) { // ---- -void soundmng_enable(void) { +void soundmng_enable(UINT proc) { - if (mute) { - mute = 0; + if (!(mute & (1 << proc))) { + return; + } + mute &= ~(1 << proc); + if (!mute) { soundmng_reset(); streamenable(TRUE); } } -void soundmng_disable(void) { +void soundmng_disable(UINT proc) { if (!mute) { - mute = 1; streamenable(FALSE); } + mute |= 1 << proc; }