--- np2/macosx/soundmng.cpp 2003/11/06 01:58:36 1.4 +++ np2/macosx/soundmng.cpp 2004/02/25 19:30:40 1.10 @@ -6,10 +6,12 @@ #include "soundmng.h" #include "sound.h" #if defined(VERMOUTH_LIB) -#include "vermouth.h" +#include "commng.h" +#include "cmver.h" #endif #include "soundrecording.h" +#include "np2opening.h" #define SOUNDBUFFERS 2 @@ -19,6 +21,10 @@ typedef struct { UINT rate; UINT samples; UINT buffersize; +#if !defined(SOUND_CRITICAL) + SINT16 *indata; + SINT16 *extendbuffer; +#endif ExtSoundHeader *buf[SOUNDBUFFERS]; SndCommand cmd[SOUNDBUFFERS]; SndCommand cbcmd[SOUNDBUFFERS]; @@ -28,10 +34,6 @@ static BOOL QS_Avail = FALSE; static _QSOUND QSound; static BOOL QSound_Playing = FALSE; -#if defined(VERMOUTH_LIB) - MIDIMOD vermouth_module = NULL; -#endif - static void (PARTSCALL *fnmix)(SINT16 *dst, const SINT32 *src, UINT size); @@ -41,12 +43,20 @@ static pascal void QSoundCallback(SndCha QSOUND qs; int nextbuf; void *dst; +#if defined(SOUND_CRITICAL) const SINT32 *src; +#endif if (QS_Avail) { qs = &QSound; nextbuf = inCommand->param1; dst = qs->buf[nextbuf]->sampleArea; +#if !defined(SOUND_CRITICAL) + if (qs->indata) { + CopyMemory((SINT16 *)dst, qs->indata, qs->buffersize); + qs->indata = NULL; + } +#else src = NULL; if (QSound_Playing) { src = sound_pcmlock(); @@ -58,6 +68,7 @@ const SINT32 *src; } sound_pcmunlock(src); } +#endif else { ZeroMemory(dst, qs->buffersize); } @@ -123,6 +134,14 @@ static BOOL SoundBuffer_Init(UINT rate, qs->buffersize = buffersize; drate = rate; dtox80(&drate, &extFreq); + +#if !defined(SOUND_CRITICAL) + qs->extendbuffer = (SINT16 *)_MALLOC(buffersize, "Extend buffer"); + if (qs->extendbuffer == NULL) { + goto sbinit_err; + } +#endif + buffersize += sizeof(ExtSoundHeader); for (i=0; iindata = NULL; + if (qs->extendbuffer) { + _MFREE(qs->extendbuffer); + qs->extendbuffer = NULL; + } +#endif } UINT soundmng_create(UINT rate, UINT ms) { UINT samples; -#if defined(VERMOUTH_LIB) - UINT num; -#endif QSound_Playing = FALSE; @@ -188,17 +211,18 @@ UINT soundmng_create(UINT rate, UINT ms) if (SoundChannel_Init()) { goto qsinit_err; } - samples = rate * ms / 1000; +#if !defined(SOUND_CRITICAL) + samples = rate * ms / (SOUNDBUFFERS * 1000); samples = (samples + 3) & (~3); +#else + samples = rate * ms / 1000; + samples = (samples + 255) & (~255); +#endif if (SoundBuffer_Init(rate, samples)) { goto qsinit_err; } #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 return(samples); @@ -210,13 +234,12 @@ qsinit_err: void soundmng_destroy(void) { if (QS_Avail) { -#if defined(VERMOUTH_LIB) - midimod_destroy(vermouth_module); - vermouth_module = NULL; -#endif QS_Avail = FALSE; SoundBuffer_Term(); SoundChannel_Term(); +#if defined(VERMOUTH_LIB) + cmvermouth_unload(); +#endif } } @@ -240,6 +263,27 @@ void soundmng_setreverse(BOOL reverse) { } } +#if !defined(SOUND_CRITICAL) +void soundmng_sync(void) { + + QSOUND qs; +const SINT32 *src; + + qs = &QSound; + + if ((QSound_Playing) && (qs->indata == NULL)) { + src = sound_pcmlock(); + if (src) { + (*fnmix)(qs->extendbuffer, src, qs->buffersize); + recOPM((BYTE *)qs->extendbuffer, qs->buffersize); + sound_pcmunlock(src); + qs->indata = qs->extendbuffer; + } + } +} +#endif + +#ifdef SUPPORT_HWSEEKSND // -------------------------------------------------------------------------- #include #include "np2.h" @@ -253,12 +297,15 @@ static Movie setupWAV(const char* name) short resID = 0; Movie wav = NULL; - char path[MAX_PATH]; - Str255 fname; + if (!getResourceFile(name, &fs)) { + char path[MAX_PATH]; + Str255 fname; + + file_cpyname(path, file_getcd(name), MAX_PATH); + mkstr255(fname, path); + FSMakeFSSpec(0, 0, fname, &fs); + } - file_cpyname(path, file_getcd(name), MAX_PATH); - mkstr255(fname, path); - FSMakeFSSpec(0, 0, fname, &fs); if (OpenMovieFile( &fs, &movieRefNum, fsRdPerm ) == noErr) { if (NewMovieFromFile(&wav,movieRefNum, &resID, NULL, newMovieActive, NULL) != noErr) { return NULL; @@ -277,8 +324,8 @@ void soundmng_deinitialize(void) { BOOL soundmng_initialize(void) { EnterMovies(); - seekWAV[0] = setupWAV("Fddseek.wav"); - seekWAV[1] = setupWAV("Fddseek1.wav"); + seekWAV[0] = setupWAV("fddseek.wav"); + seekWAV[1] = setupWAV("fddseek1.wav"); if (seekWAV[0] == NULL || seekWAV[1] == NULL) { return false; } @@ -306,3 +353,4 @@ void soundmng_pcmstop(UINT num) { } } +#endif