| version 1.1.1.1, 2003/10/16 17:58:48 | version 1.4, 2003/10/30 12:45:38 | 
| Line 10 | Line 10 | 
 | #include        "vermouth.h" | #include        "vermouth.h" | 
 | #endif | #endif | 
 |  |  | 
 |  | #ifdef __cplusplus | 
 |  | extern "C" { | 
 |  | #endif | 
 |  | void __fastcall satuation_s16mmx(SINT16 *dst, const SINT32 *src, UINT size); | 
 |  | #ifdef __cplusplus | 
 |  | } | 
 |  | #endif | 
 |  |  | 
 |  |  | 
 | #if 1 | #if 1 | 
 | #define DSBUFFERDESC_SIZE       20                      // DirectX3 Structsize | #define DSBUFFERDESC_SIZE       20                      // DirectX3 Structsize | 
| Line 30  static LPDIRECTSOUNDBUFFER pDSData3; | Line 38  static LPDIRECTSOUNDBUFFER pDSData3; | 
 | static  UINT                            dsstreambytes; | static  UINT                            dsstreambytes; | 
 | static  BYTE                            dsstreamevent; | static  BYTE                            dsstreamevent; | 
 | static  LPDIRECTSOUNDBUFFER pDSwave3[SOUND_MAXPCM]; | static  LPDIRECTSOUNDBUFFER pDSwave3[SOUND_MAXPCM]; | 
| static  BYTE                            mute; | static  UINT                            mute; | 
|  | static  void                            (PARTSCALL *fnmix)(SINT16 *dst, | 
|  | const SINT32 *src, UINT size); | 
 |  |  | 
 | #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) | 
 | MIDIMOD         vermouth_module = NULL; | MIDIMOD         vermouth_module = NULL; | 
| Line 85  UINT soundmng_create(UINT rate, UINT ms) | Line 95  UINT soundmng_create(UINT rate, UINT ms) | 
 | samples = (rate * ms) / 2000; | samples = (rate * ms) / 2000; | 
 | samples = (samples + 3) & (~3); | samples = (samples + 3) & (~3); | 
 | dsstreambytes = samples * 2 * sizeof(SINT16); | dsstreambytes = samples * 2 * sizeof(SINT16); | 
 |  | soundmng_setreverse(FALSE); | 
 |  |  | 
 | ZeroMemory(&pcmwf, sizeof(PCMWAVEFORMAT)); | ZeroMemory(&pcmwf, sizeof(PCMWAVEFORMAT)); | 
 | pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM; | pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM; | 
| Line 204  const SINT32 *pcm; | Line 215  const SINT32 *pcm; | 
 | } | } | 
 | if (SUCCEEDED(hr)) { | if (SUCCEEDED(hr)) { | 
 | if (pcm) { | if (pcm) { | 
| satuation_s16((SINT16 *)blockptr1, pcm, blocksize1); | (*fnmix)((SINT16 *)blockptr1, pcm, blocksize1); | 
 | } | } | 
 | else { | else { | 
 | ZeroMemory(blockptr1, blocksize1); | ZeroMemory(blockptr1, blocksize1); | 
| Line 238  void soundmng_sync(void) { | Line 249  void soundmng_sync(void) { | 
 | } | } | 
 |  |  | 
 | void soundmng_setreverse(BOOL reverse) { | void soundmng_setreverse(BOOL reverse) { | 
 |  |  | 
 |  | if (!reverse) { | 
 |  | if (mmxflag) { | 
 |  | fnmix = satuation_s16; | 
 |  | } | 
 |  | else { | 
 |  | fnmix = satuation_s16mmx; | 
 |  | } | 
 |  | } | 
 |  | else { | 
 |  | fnmix = satuation_s16x; | 
 |  | } | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 442  void soundmng_deinitialize(void) { | Line 465  void soundmng_deinitialize(void) { | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| void soundmng_enable(void) { | void soundmng_enable(UINT proc) { | 
 |  |  | 
| if (mute) { | if (!(mute & (1 << proc))) { | 
| mute = 0; | return; | 
|  | } | 
|  | mute &= ~(1 << proc); | 
|  | if (!mute) { | 
 | soundmng_reset(); | soundmng_reset(); | 
 | streamenable(TRUE); | streamenable(TRUE); | 
 | } | } | 
 | } | } | 
 |  |  | 
| void soundmng_disable(void) { | void soundmng_disable(UINT proc) { | 
 |  |  | 
 | if (!mute) { | if (!mute) { | 
 | mute = 1; |  | 
 | streamenable(FALSE); | streamenable(FALSE); | 
 | pcmstop(); | pcmstop(); | 
 | } | } | 
 |  | mute |= 1 << proc; | 
 | } | } | 
 |  |  |