void BURGERCALL MADSndClose(MADDriverRec *inMADDriver) { if (inMADDriver->MusicChannelPP) { SndDisposeChannel(inMADDriver->MusicChannelPP,TRUE); inMADDriver->MusicChannelPP = 0; } if (inMADDriver->CallBackUPP) { DisposeSndCallBackUPP(inMADDriver->CallBackUPP); inMADDriver->CallBackUPP = 0; } DeallocAPointer(inMADDriver->SndBuffer); inMADDriver->SndBuffer = 0; }
static void SoundChannel_Term(void) { volatile QSOUND qs; SndChannelPtr hdl; SndCallBackUPP cb; qs = &QSound; hdl = qs->hdl; qs->hdl = NULL; cb = qs->cb; qs->cb = NULL; #if TARGET_API_MAC_CARBON if (cb) { DisposeSndCallBackUPP(cb); } #endif if (hdl) { SndDisposeChannel(hdl, TRUE); } }
int BURGERCALL MADSndOpen( MADDriverRec *inMADDriver) { int err; SndChannelPtr mySndChan; // pointer to a sound channel SndCallBackUPP CallBack; CallBack = NewSndCallBackUPP(MyDoubleBackProc); err=-1; if (CallBack) { mySndChan = 0L; err = SndNewChannel(&mySndChan, sampledSynth, 0, CallBack); if (!err) { if (mySndChan) { /* Failsafe */ inMADDriver->CallBackUPP = CallBack; inMADDriver->MusicChannelPP = mySndChan; mySndChan->userInfo = (long)inMADDriver; return DBSndPlay(inMADDriver, inMADDriver->MusicChannelPP); } err = MADSoundManagerErr; } DisposeSndCallBackUPP(CallBack); /* Kill the callback */ } return err; }