--- np2/wince/soundmng.cpp 2003/10/21 14:57:41 1.1 +++ np2/wince/soundmng.cpp 2005/02/11 21:17:23 1.8 @@ -5,7 +5,8 @@ #include "soundmng.h" #include "sound.h" #if defined(VERMOUTH_LIB) -#include "vermouth.h" +#include "commng.h" +#include "cmver.h" #endif @@ -15,7 +16,7 @@ typedef struct { HWAVEOUT hwave; - BYTE *buffer; + UINT8 *buffer; DWORD samples; DWORD bufalign; WAVEHDR wh[2]; @@ -29,11 +30,7 @@ static DWORD lasttick = 0; static DWORD retry = 0; static UINT currate = 22050; static UINT curms = 500; -static BYTE playing; - -#if defined(VERMOUTH_LIB) - MIDIMOD vermouth_module = NULL; -#endif +static UINT mute; static const DWORD capsfmt[] = { WAVE_FORMAT_1S16, WAVE_FORMAT_2S16, WAVE_FORMAT_4S16}; @@ -46,7 +43,7 @@ static const DWORD capsfmt[] = { extern HWND hWndMain; -void wavemng_cb(UINT msg, HWAVEOUT hwo, WAVEHDR *whd) { +void soundmng_cb(UINT msg, HWAVEOUT hwo, WAVEHDR *whd) { short *dst; const SINT32 *pcm; @@ -56,7 +53,7 @@ const SINT32 *pcm; if (whd->lpData) { dst = (short *)whd->lpData; pcm = NULL; - if (playing) { + if (!mute) { pcm = sound_pcmlock(); } if (pcm) { @@ -84,7 +81,7 @@ const SINT32 *pcm; if (((WAVEHDR *)dwParam1)->lpData) { dst = (short *)((WAVEHDR *)dwParam1)->lpData; pcm = NULL; - if (playing) { + if (!mute) { pcm = sound_pcmlock(); } if (pcm) { @@ -114,6 +111,9 @@ UINT soundmng_create(UINT rate, UINT ms) if (waveopened) { return(0); } + + mute = 1 << SNDPROC_NP2; + switch(rate) { case 11025: type = 0; @@ -148,7 +148,7 @@ UINT soundmng_create(UINT rate, UINT ms) } w_ctrl.samples = (ms * rate) / 1000; w_ctrl.bufalign = w_ctrl.samples * 2 * 2; - w_ctrl.buffer = (BYTE *)_MALLOC(w_ctrl.bufalign * 2, "wave mng"); + w_ctrl.buffer = (UINT8 *)_MALLOC(w_ctrl.bufalign * 2, "wave mng"); if (w_ctrl.buffer == NULL) { return(0); } @@ -180,44 +180,56 @@ UINT soundmng_create(UINT rate, UINT ms) waveOutWrite(w_ctrl.hwave, w_ctrl.wh + i, sizeof(WAVEHDR)); } #if defined(VERMOUTH_LIB) - vermouth_module = midimod_create(rate); - for (num=0; num<128; num++) { - midimod_loadprogram(vermouth_module, num); - midimod_loadrhythm(vermouth_module, num); - } + cmvermouth_load(rate); #endif currate = rate; curms = ms; waveopened = TRUE; + TRACEOUT(("soundmng success.")); return(w_ctrl.samples); } _MFREE(w_ctrl.buffer); + TRACEOUT(("soundmng failure.")); } return(0); } void soundmng_destroy(void) { - int i; - int retry = 10; +#if defined(_WIN32_WCE) + OSVERSIONINFO osvi; +#endif + BOOL hpc4; + int i; + int retry = 10; if (waveopened) { -#if (defined(WIN32_PLATFORM_PSPC)) || (!defined(ARM)) - for (i=0; i<2; i++) { - waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, +#if defined(_WIN32_WCE) + ZeroMemory(&osvi, sizeof(osvi)); + osvi.dwOSVersionInfoSize = sizeof(osvi); + GetVersionEx(&osvi); + hpc4 = (osvi.dwMajorVersion >= 4); +#else + hpc4 = FALSE; +#endif + if (!hpc4) { + for (i=0; i<2; i++) { + waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, sizeof(WAVEHDR)); - w_ctrl.wh[i].lpData = NULL; + w_ctrl.wh[i].lpData = NULL; + } + waveOutPause(w_ctrl.hwave); + waveOutReset(w_ctrl.hwave); } - waveOutPause(w_ctrl.hwave); - waveOutReset(w_ctrl.hwave); -#else - waveOutReset(w_ctrl.hwave); - for (i=0; i<2; i++) { - waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, + else { + // 誰かシグマリ3でのマトモな開放方法教えてくだちい… + // waveOutReset(w_ctrl.hwave); + for (i=0; i<2; i++) { + waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, sizeof(WAVEHDR)); - w_ctrl.wh[i].lpData = NULL; + w_ctrl.wh[i].lpData = NULL; + } } -#endif do { if (waveOutClose(w_ctrl.hwave) == MMSYSERR_NOERROR) { _HANDLE_REM(w_ctrl.hwave); @@ -227,25 +239,25 @@ void soundmng_destroy(void) { } while(--retry); _MFREE(w_ctrl.buffer); #if defined(VERMOUTH_LIB) - midimod_destroy(vermouth_module); - vermouth_module = NULL; +// cmvermouth_unload(); // 終了時に unload #endif waveopened = FALSE; } } -void soundmng_play(void) { - - playing = TRUE; -} -void soundmng_stop(void) { +// ---- - playing = FALSE; +// WinCE版 … vermouthのロードに時間掛かるので +void soundmng_initialize(void) { } +void soundmng_deinitialize(void) { -// ---- +#if defined(VERMOUTH_LIB) + cmvermouth_unload(); +#endif +} void soundmng_awake(void) { @@ -265,3 +277,13 @@ void soundmng_awake(void) { } } +void soundmng_enable(UINT proc) { + + mute &= ~(1 << proc); +} + +void soundmng_disable(UINT proc) { + + mute |= 1 << proc; +} +