diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index be75c972..1bb2a2e3 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: mixer.cpp,v 1.34 2005-07-19 19:45:32 qbix79 Exp $ */ +/* $Id: mixer.cpp,v 1.35 2005-12-05 12:04:40 qbix79 Exp $ */ /* Remove the sdl code from here and have it handeld in the sdlmain. @@ -198,6 +198,7 @@ INLINE void MixerChannel::AddSamples(Bitu len,void * data) { Bitu mixpos=mixer.pos+done; freq_index&=MIXER_REMAIN; Bitu pos=0;Bitu new_pos; + goto thestart; while (1) { new_pos=freq_index >> MIXER_SHIFT; @@ -347,9 +348,9 @@ static void MIXER_Mix_NoSound(void) { static void MIXER_CallBack(void * userdata, Uint8 *stream, int len) { Bitu need=(Bitu)len/MIXER_SSIZE; if (need>mixer.done) { -// LOG_MSG("Buffer underrun"); + //LOG_MSG("%d Buffer underrun %d done and %d needed",count++,mixer.done,need); return; - } + }//else LOG_MSG("%d Buffer regular run %d done and %d needed",count++,mixer.done,need); /* Reduce done count in all channels */ for (MixerChannel * chan=mixer.channels;chan;chan=chan->next) { if (chan->done>need) chan->done-=need; @@ -357,12 +358,12 @@ static void MIXER_CallBack(void * userdata, Uint8 *stream, int len) { } mixer.done-=need; mixer.needed-=need; - if (mixer.done>mixer.min_needed) { + if (mixer.done > mixer.min_needed) { Bitu diff=mixer.done-mixer.min_needed; - mixer.tick_add=((mixer.freq-(diff>>2)) << MIXER_SHIFT)/1000; + mixer.tick_add = ((mixer.freq-(diff/5)) << MIXER_SHIFT)/1000; } else { - Bitu diff=mixer.needed-mixer.done; - mixer.tick_add=((mixer.freq+diff*3) << MIXER_SHIFT)/1000; + Bitu diff = ((mixer.min_needed>mixer.needed)?mixer.min_needed:mixer.needed) - mixer.done; + mixer.tick_add = ((mixer.freq+(diff*3)) << MIXER_SHIFT)/1000; } Bit16s * output=(Bit16s *)stream; Bits sample; diff --git a/src/hardware/pcspeaker.cpp b/src/hardware/pcspeaker.cpp index c6d02cfe..9e321c11 100644 --- a/src/hardware/pcspeaker.cpp +++ b/src/hardware/pcspeaker.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - /* $Id: pcspeaker.cpp,v 1.20 2005-03-25 11:52:32 qbix79 Exp $ */ + /* $Id: pcspeaker.cpp,v 1.21 2005-12-05 12:04:40 qbix79 Exp $ */ #include #include "dosbox.h" @@ -223,7 +223,7 @@ void PCSPEAKER_SetType(Bitu mode) { ForwardPIT(newindex); switch (mode) { case 0: - spkr.mode=SPKR_OFF; + spkr.mode=SPKR_OFF; AddDelayEntry(newindex,-SPKR_VOLUME); break; case 1: @@ -299,7 +299,14 @@ static void PCSPEAKER_CallBack(Bitu len) { *stream++=(Bit16s)(value/sample_add); } if(spkr.chan) spkr.chan->AddSamples_m16(len,(Bit16s*)MixTemp); - if ((spkr.last_ticks+10000)Enable(false); + } + if((spkr.mode == SPKR_OFF) && ((spkr.last_ticks+1000) Enable(false); }