static void S_Update_ (void) { unsigned int endtime; int samps; if (!sound_started || (snd_blocked > 0)) return; SNDDMA_LockBuffer (); if (! shm->buffer) return; // Updates DMA time GetSoundtime(); // check to make sure that we haven't overshot if (paintedtime < soundtime) { // Con_Printf ("S_Update_ : overflow\n"); paintedtime = soundtime; } // mix ahead of current position endtime = soundtime + (unsigned int)(_snd_mixahead.value * shm->speed); samps = shm->samples >> (shm->channels - 1); endtime = q_min(endtime, (unsigned int)(soundtime + samps)); S_PaintChannels (endtime); SNDDMA_Submit (); }
void S_ClearBuffer(void) { int err; int clear; if (!sound_started || !shm) return; err = SNDDMA_LockBuffer(); if (err) { S_Shutdown(); return; } clear = (shm->samplebits == 8) ? 0x80 : 0; memset(shm->buffer, clear, shm->samples * shm->samplebits / 8); SNDDMA_UnlockBuffer(); }
void S_ClearBuffer (void) { int clear; if (!sound_started || !shm) return; SNDDMA_LockBuffer (); if (! shm->buffer) return; s_rawend = 0; if (shm->samplebits == 8 && !shm->signed8) clear = 0x80; else clear = 0; memset(shm->buffer, clear, shm->samples * shm->samplebits / 8); SNDDMA_Submit (); }