| version 1.2, 2003/10/18 10:28:12 | version 1.9, 2005/02/09 20:11:35 | 
| Line 6 | Line 6 | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
 | #include        "extromio.h" | #include        "extromio.h" | 
 | #include        "sound.h" | #include        "sound.h" | 
 |  | #include        "juliet.h" | 
 | #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) | 
 | #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 28 | Line 37 | 
 | static  LPDIRECTSOUND           pDSound; | static  LPDIRECTSOUND           pDSound; | 
 | static  LPDIRECTSOUNDBUFFER     pDSData3; | static  LPDIRECTSOUNDBUFFER     pDSData3; | 
 | static  UINT                            dsstreambytes; | static  UINT                            dsstreambytes; | 
| static  BYTE                            dsstreamevent; | static  UINT8                           dsstreamevent; | 
 | static  LPDIRECTSOUNDBUFFER pDSwave3[SOUND_MAXPCM]; | static  LPDIRECTSOUNDBUFFER pDSwave3[SOUND_MAXPCM]; | 
| static  BYTE                            mute; | static  UINT                            mute; | 
 | static  void                            (PARTSCALL *fnmix)(SINT16 *dst, | static  void                            (PARTSCALL *fnmix)(SINT16 *dst, | 
 | const SINT32 *src, UINT size); | const SINT32 *src, UINT size); | 
 |  |  | 
| Line 66  UINT soundmng_create(UINT rate, UINT ms) | Line 75  UINT soundmng_create(UINT rate, UINT ms) | 
 | UINT                    samples; | UINT                    samples; | 
 | DSBUFFERDESC    dsbdesc; | DSBUFFERDESC    dsbdesc; | 
 | PCMWAVEFORMAT   pcmwf; | PCMWAVEFORMAT   pcmwf; | 
 | #if defined(VERMOUTH_LIB) |  | 
 | UINT                    num; |  | 
 | #endif |  | 
 |  |  | 
 | if ((pDSound == NULL) || | if ((pDSound == NULL) || | 
 | (rate != 11025) && (rate != 22050) && (rate != 44100)) { | (rate != 11025) && (rate != 22050) && (rate != 44100)) { | 
 | goto stcre_err1; | goto stcre_err1; | 
 | } | } | 
| if (ms < 50) { | if (ms < 40) { | 
| ms = 50; | ms = 40; | 
 | } | } | 
 | else if (ms > 1000) { | else if (ms > 1000) { | 
 | ms = 1000; | ms = 1000; | 
 | } | } | 
 |  |  | 
 | // キーボード表示のディレイ設定 | // キーボード表示のディレイ設定 | 
| //      keydispr_delayinit((BYTE)((ms * 10 + 563) / 564)); | //      keydispr_delayinit((UINT8)((ms * 10 + 563) / 564)); | 
 |  |  | 
 | 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); | 
| fnmix = satuation_s16; | soundmng_setreverse(FALSE); | 
 |  |  | 
 | ZeroMemory(&pcmwf, sizeof(PCMWAVEFORMAT)); | ZeroMemory(&pcmwf, sizeof(PCMWAVEFORMAT)); | 
 | pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM; | pcmwf.wf.wFormatTag = WAVE_FORMAT_PCM; | 
| Line 110  UINT soundmng_create(UINT rate, UINT ms) | Line 116  UINT soundmng_create(UINT rate, UINT ms) | 
 |  |  | 
 | #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) | 
 | vermouth_module = midimod_create(rate); | vermouth_module = midimod_create(rate); | 
| for (num=0; num<128; num++) { | midimod_loadall(vermouth_module); | 
| midimod_loadprogram(vermouth_module, num); |  | 
| midimod_loadrhythm(vermouth_module, num); |  | 
| } |  | 
 | #endif | #endif | 
| dsstreamevent = (BYTE)-1; | dsstreamevent = (UINT8)-1; | 
 | soundmng_reset(); | soundmng_reset(); | 
 | return(samples); | return(samples); | 
 |  |  | 
| Line 143  void soundmng_reset(void) { | Line 146  void soundmng_reset(void) { | 
 | } | } | 
 | pDSData3->Unlock(blockptr1, blocksize1, blockptr2, blocksize2); | pDSData3->Unlock(blockptr1, blocksize1, blockptr2, blocksize2); | 
 | pDSData3->SetCurrentPosition(0); | pDSData3->SetCurrentPosition(0); | 
| dsstreamevent = (BYTE)-1; | dsstreamevent = (UINT8)-1; | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 170  static void streamenable(BOOL play) { | Line 173  static void streamenable(BOOL play) { | 
 | pDSData3->Stop(); | pDSData3->Stop(); | 
 | } | } | 
 | } | } | 
 |  | juliet_YMF288Enable(play); | 
 | } | } | 
 |  |  | 
 | void soundmng_play(void) { | void soundmng_play(void) { | 
| Line 242  void soundmng_sync(void) { | Line 246  void soundmng_sync(void) { | 
 |  |  | 
 | void soundmng_setreverse(BOOL reverse) { | void soundmng_setreverse(BOOL reverse) { | 
 |  |  | 
| fnmix = (reverse)?satuation_s16x:satuation_s16; | if (!reverse) { | 
|  | if (mmxflag) { | 
|  | fnmix = satuation_s16; | 
|  | } | 
|  | else { | 
|  | fnmix = satuation_s16mmx; | 
|  | } | 
|  | } | 
|  | else { | 
|  | fnmix = satuation_s16x; | 
|  | } | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 283  static void pcmstop(void) { | Line 297  static void pcmstop(void) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| void soundmng_pcmload(UINT num, const char *filename, UINT type) { | void soundmng_pcmload(UINT num, const OEMCHAR *filename, UINT type) { | 
 |  |  | 
 | EXTROMH                         erh; | EXTROMH                         erh; | 
 | RIFF_HEADER                     riff; | RIFF_HEADER                     riff; | 
| Line 447  void soundmng_deinitialize(void) { | Line 461  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; | 
 | } | } | 
 |  |  |