|
|
| version 1.1, 2003/10/21 14:57:41 | version 1.5, 2003/11/28 08:01:34 |
|---|---|
| Line 5 | Line 5 |
| #include "soundmng.h" | #include "soundmng.h" |
| #include "sound.h" | #include "sound.h" |
| #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) |
| #include "vermouth.h" | #include "commng.h" |
| #include "cmver.h" | |
| #endif | #endif |
| Line 29 static DWORD lasttick = 0; | Line 30 static DWORD lasttick = 0; |
| static DWORD retry = 0; | static DWORD retry = 0; |
| static UINT currate = 22050; | static UINT currate = 22050; |
| static UINT curms = 500; | static UINT curms = 500; |
| static BYTE playing; | static UINT mute; |
| #if defined(VERMOUTH_LIB) | |
| MIDIMOD vermouth_module = NULL; | |
| #endif | |
| static const DWORD capsfmt[] = { | static const DWORD capsfmt[] = { |
| WAVE_FORMAT_1S16, WAVE_FORMAT_2S16, WAVE_FORMAT_4S16}; | WAVE_FORMAT_1S16, WAVE_FORMAT_2S16, WAVE_FORMAT_4S16}; |
| Line 46 static const DWORD capsfmt[] = { | Line 43 static const DWORD capsfmt[] = { |
| extern HWND hWndMain; | extern HWND hWndMain; |
| void wavemng_cb(UINT msg, HWAVEOUT hwo, WAVEHDR *whd) { | void soundmng_cb(UINT msg, HWAVEOUT hwo, WAVEHDR *whd) { |
| short *dst; | short *dst; |
| const SINT32 *pcm; | const SINT32 *pcm; |
| Line 56 const SINT32 *pcm; | Line 53 const SINT32 *pcm; |
| if (whd->lpData) { | if (whd->lpData) { |
| dst = (short *)whd->lpData; | dst = (short *)whd->lpData; |
| pcm = NULL; | pcm = NULL; |
| if (playing) { | if (!mute) { |
| pcm = sound_pcmlock(); | pcm = sound_pcmlock(); |
| } | } |
| if (pcm) { | if (pcm) { |
| Line 84 const SINT32 *pcm; | Line 81 const SINT32 *pcm; |
| if (((WAVEHDR *)dwParam1)->lpData) { | if (((WAVEHDR *)dwParam1)->lpData) { |
| dst = (short *)((WAVEHDR *)dwParam1)->lpData; | dst = (short *)((WAVEHDR *)dwParam1)->lpData; |
| pcm = NULL; | pcm = NULL; |
| if (playing) { | if (!mute) { |
| pcm = sound_pcmlock(); | pcm = sound_pcmlock(); |
| } | } |
| if (pcm) { | if (pcm) { |
| Line 180 UINT soundmng_create(UINT rate, UINT ms) | Line 177 UINT soundmng_create(UINT rate, UINT ms) |
| waveOutWrite(w_ctrl.hwave, w_ctrl.wh + i, sizeof(WAVEHDR)); | waveOutWrite(w_ctrl.hwave, w_ctrl.wh + i, sizeof(WAVEHDR)); |
| } | } |
| #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) |
| vermouth_module = midimod_create(rate); | cmvermouth_load(rate); |
| for (num=0; num<128; num++) { | |
| midimod_loadprogram(vermouth_module, num); | |
| midimod_loadrhythm(vermouth_module, num); | |
| } | |
| #endif | #endif |
| currate = rate; | currate = rate; |
| curms = ms; | curms = ms; |
| waveopened = TRUE; | waveopened = TRUE; |
| TRACEOUT(("soundmng success.")); | |
| mute = 0; | |
| return(w_ctrl.samples); | return(w_ctrl.samples); |
| } | } |
| _MFREE(w_ctrl.buffer); | _MFREE(w_ctrl.buffer); |
| TRACEOUT(("soundmng failure.")); | |
| } | } |
| return(0); | return(0); |
| } | } |
| void soundmng_destroy(void) { | void soundmng_destroy(void) { |
| int i; | #if defined(_WIN32_WCE) |
| int retry = 10; | OSVERSIONINFO osvi; |
| #endif | |
| BOOL hpc4; | |
| int i; | |
| int retry = 10; | |
| if (waveopened) { | if (waveopened) { |
| #if (defined(WIN32_PLATFORM_PSPC)) || (!defined(ARM)) | #if defined(_WIN32_WCE) |
| for (i=0; i<2; i++) { | ZeroMemory(&osvi, sizeof(osvi)); |
| waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, | 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)); | 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); | else { |
| waveOutReset(w_ctrl.hwave); | waveOutReset(w_ctrl.hwave); |
| #else | for (i=0; i<2; i++) { |
| waveOutReset(w_ctrl.hwave); | waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, |
| for (i=0; i<2; i++) { | |
| waveOutUnprepareHeader(w_ctrl.hwave, w_ctrl.wh + i, | |
| sizeof(WAVEHDR)); | sizeof(WAVEHDR)); |
| w_ctrl.wh[i].lpData = NULL; | w_ctrl.wh[i].lpData = NULL; |
| } | |
| } | } |
| #endif | |
| do { | do { |
| if (waveOutClose(w_ctrl.hwave) == MMSYSERR_NOERROR) { | if (waveOutClose(w_ctrl.hwave) == MMSYSERR_NOERROR) { |
| _HANDLE_REM(w_ctrl.hwave); | _HANDLE_REM(w_ctrl.hwave); |
| Line 227 void soundmng_destroy(void) { | Line 236 void soundmng_destroy(void) { |
| } while(--retry); | } while(--retry); |
| _MFREE(w_ctrl.buffer); | _MFREE(w_ctrl.buffer); |
| #if defined(VERMOUTH_LIB) | #if defined(VERMOUTH_LIB) |
| midimod_destroy(vermouth_module); | // cmvermouth_unload(); // 終了時に unload |
| vermouth_module = NULL; | |
| #endif | #endif |
| waveopened = FALSE; | 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) { | void soundmng_awake(void) { |
| Line 265 void soundmng_awake(void) { | Line 274 void soundmng_awake(void) { |
| } | } |
| } | } |
| void soundmng_enable(UINT proc) { | |
| mute &= ~(1 << proc); | |
| } | |
| void soundmng_disable(UINT proc) { | |
| mute |= 1 << proc; | |
| } | |