|
|
| version 1.1, 2003/10/16 17:59:38 | version 1.4, 2003/11/06 01:58:36 |
|---|---|
| Line 9 | Line 9 |
| #include "vermouth.h" | #include "vermouth.h" |
| #endif | #endif |
| #include "soundrecording.h" | |
| #define SOUNDBUFFERS 2 | #define SOUNDBUFFERS 2 |
| Line 31 static BOOL QSound_Playing = FALSE; | Line 32 static BOOL QSound_Playing = FALSE; |
| MIDIMOD vermouth_module = NULL; | MIDIMOD vermouth_module = NULL; |
| #endif | #endif |
| static void (PARTSCALL *fnmix)(SINT16 *dst, | |
| const SINT32 *src, UINT size); | |
| static pascal void QSoundCallback(SndChannelPtr /*inChannel*/, | static pascal void QSoundCallback(SndChannelPtr /*inChannel*/, |
| SndCommand *inCommand) { | SndCommand *inCommand) { |
| Line 47 const SINT32 *src; | Line 50 const SINT32 *src; |
| src = NULL; | src = NULL; |
| if (QSound_Playing) { | if (QSound_Playing) { |
| src = sound_pcmlock(); | src = sound_pcmlock(); |
| if (src) { | } |
| satuation_s16((SINT16 *)dst, src, qs->buffersize); | if (src) { |
| } | (*fnmix)((SINT16 *)dst, src, qs->buffersize); |
| if (QSound_Playing) { | |
| recOPM((BYTE*)dst, qs->buffersize); | |
| } | |
| sound_pcmunlock(src); | sound_pcmunlock(src); |
| } | } |
| if (src == NULL) { | else { |
| ZeroMemory(dst, qs->buffersize); | ZeroMemory(dst, qs->buffersize); |
| } | } |
| SndDoCommand(qs->hdl, &qs->cmd[nextbuf], TRUE); | SndDoCommand(qs->hdl, &qs->cmd[nextbuf], TRUE); |
| Line 182 UINT soundmng_create(UINT rate, UINT ms) | Line 188 UINT soundmng_create(UINT rate, UINT ms) |
| if (SoundChannel_Init()) { | if (SoundChannel_Init()) { |
| goto qsinit_err; | goto qsinit_err; |
| } | } |
| samples = (rate / 3) & (~3); | samples = rate * ms / 1000; |
| samples = (samples + 3) & (~3); | |
| if (SoundBuffer_Init(rate, samples)) { | if (SoundBuffer_Init(rate, samples)) { |
| goto qsinit_err; | goto qsinit_err; |
| } | } |
| Line 197 UINT soundmng_create(UINT rate, UINT ms) | Line 204 UINT soundmng_create(UINT rate, UINT ms) |
| qsinit_err: | qsinit_err: |
| soundmng_destroy(); | soundmng_destroy(); |
| (void)ms; | |
| return(0); | return(0); |
| } | } |
| Line 216 void soundmng_destroy(void) { | Line 222 void soundmng_destroy(void) { |
| void soundmng_play(void) { | void soundmng_play(void) { |
| QSound_Playing = TRUE; | if (!QSound_Playing) QSound_Playing = TRUE; |
| } | } |
| void soundmng_stop(void) { | void soundmng_stop(void) { |
| QSound_Playing = FALSE; | if (QSound_Playing) QSound_Playing = FALSE; |
| } | |
| void soundmng_setreverse(BOOL reverse) { | |
| if (!reverse) { | |
| fnmix = satuation_s16; | |
| } | |
| else { | |
| fnmix = satuation_s16x; | |
| } | |
| } | |
| // -------------------------------------------------------------------------- | |
| #include <QuickTime/Movies.h> | |
| #include "np2.h" | |
| #include "dosio.h" | |
| static Movie seekWAV[2]; | |
| static Movie setupWAV(const char* name) { | |
| FSSpec fs; | |
| short movieRefNum; | |
| short resID = 0; | |
| Movie wav = NULL; | |
| char path[MAX_PATH]; | |
| Str255 fname; | |
| 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; | |
| } | |
| } | |
| return wav; | |
| } | |
| void soundmng_deinitialize(void) { | |
| StopMovie(seekWAV[0]); | |
| StopMovie(seekWAV[1]); | |
| seekWAV[0] = NULL; | |
| seekWAV[1] = NULL; | |
| ExitMovies(); | |
| } | |
| BOOL soundmng_initialize(void) { | |
| EnterMovies(); | |
| seekWAV[0] = setupWAV("Fddseek.wav"); | |
| seekWAV[1] = setupWAV("Fddseek1.wav"); | |
| if (seekWAV[0] == NULL || seekWAV[1] == NULL) { | |
| return false; | |
| } | |
| return(true); | |
| } | |
| void soundmng_pcmvolume(UINT num, int volume) { | |
| if (seekWAV[num]) { | |
| SetMovieVolume(seekWAV[num], kFullVolume*volume/100); | |
| } | |
| } | |
| BOOL soundmng_pcmplay(UINT num, BOOL loop) { | |
| if (seekWAV[num]) { | |
| GoToBeginningOfMovie(seekWAV[num]); | |
| StartMovie(seekWAV[num]); | |
| return SUCCESS; | |
| } | |
| return(FAILURE); | |
| } | |
| void soundmng_pcmstop(UINT num) { | |
| if (seekWAV[num]) { | |
| StopMovie(seekWAV[num]); | |
| } | |
| } | } |