BOOLEAN _ReleaseSoundBankData (void *Snd) { STRING_TABLE fxTab = Snd; if (fxTab) { int snd_ct, index; TFB_SoundSample **sptr; snd_ct = fxTab->size; index = 0; while (snd_ct--) { int i; sptr = (TFB_SoundSample **)(fxTab->strings[index].data); for (i = 0; i < NUM_SOUNDSOURCES; ++i) { if (soundSource[i].sample == (*sptr)) { StopSource (i); soundSource[i].sample = NULL; } } if ((*sptr)->decoder) SoundDecoder_Free ((*sptr)->decoder); audio_DeleteBuffers ((*sptr)->num_buffers, (*sptr)->buffer); HFree ((*sptr)->buffer); if ((*sptr)->buffer_tag) HFree ((*sptr)->buffer_tag); HFree (*sptr); *sptr = 0; index++; } FreeStringTable (Snd); return (TRUE); } return (FALSE); }
BOOLEAN _ReleaseSoundBankData (MEM_HANDLE Snd) { STRING_TABLEPTR fxTab; LockStringTable (Snd, &fxTab); if (fxTab) { int snd_ct; TFB_SoundSample **sptr; snd_ct = fxTab->StringCount; sptr = (TFB_SoundSample **)((BYTE *)fxTab + fxTab->StringOffsets[0]); while (snd_ct--) { int i; for (i = 0; i < NUM_SOUNDSOURCES; ++i) { if (soundSource[i].sample == (*sptr)) { StopSource (i); soundSource[i].sample = NULL; } } if ((*sptr)->decoder) SoundDecoder_Free ((*sptr)->decoder); audio_DeleteBuffers ((*sptr)->num_buffers, (*sptr)->buffer); HFree ((*sptr)->buffer); if ((*sptr)->buffer_tag) HFree ((*sptr)->buffer_tag); HFree (*sptr); *sptr++ = 0; } UnlockStringTable (Snd); FreeStringTable (Snd); return (TRUE); } return (FALSE); }