diff --git a/stepmania/src/RageSoundManager.cpp b/stepmania/src/RageSoundManager.cpp index 902d127939..fbcb7e29bb 100644 --- a/stepmania/src/RageSoundManager.cpp +++ b/stepmania/src/RageSoundManager.cpp @@ -299,15 +299,27 @@ void RageSoundManager::SetPrefs(float MixVol) SoundMixBuffer::SoundMixBuffer() { vol = SOUNDMAN->GetMixVolume(); + bufsize = used = 0; + mixbuf = NULL; +} + +SoundMixBuffer::~SoundMixBuffer() +{ + free(mixbuf); } void SoundMixBuffer::write(const Sint16 *buf, unsigned size) { - if(mixbuf.size() < size) + if(bufsize < size) { - basic_string empty(size-mixbuf.size(), 0); + mixbuf = (Sint32 *) realloc(mixbuf, sizeof(Sint32) * size); + bufsize = size; + } - mixbuf.insert(mixbuf.end(), empty.begin(), empty.end()); + if(used < size) + { + memset(mixbuf + used, 0, (size - used) * sizeof(Sint32)); + used = size; } for(unsigned pos = 0; pos < size; ++pos) @@ -330,7 +342,7 @@ void SoundMixBuffer::write(const Sint16 *buf, unsigned size) void SoundMixBuffer::read(Sint16 *buf) { - for(unsigned pos = 0; pos < mixbuf.size(); ++pos) + for(unsigned pos = 0; pos < used; ++pos) { /* XXX: dither */ Sint32 out = (mixbuf[pos]) / 32768; @@ -338,5 +350,5 @@ void SoundMixBuffer::read(Sint16 *buf) buf[pos] = Sint16(out); } - mixbuf.erase(); + used = 0; } diff --git a/stepmania/src/RageSoundManager.h b/stepmania/src/RageSoundManager.h index 791ef150cc..a3cede7a2f 100644 --- a/stepmania/src/RageSoundManager.h +++ b/stepmania/src/RageSoundManager.h @@ -68,16 +68,19 @@ public: /* This inputs and outputs 16-bit 44khz stereo input. */ class SoundMixBuffer { - basic_string mixbuf; + Sint32 *mixbuf; + unsigned bufsize; /* actual allocated samples */ + unsigned used; /* used samples */ float vol; public: void write(const Sint16 *buf, unsigned size); void read(Sint16 *buf); - unsigned size() const { return mixbuf.size(); } + unsigned size() const { return used; } void SetVolume(float f); SoundMixBuffer(); + ~SoundMixBuffer(); }; extern RageSoundManager *SOUNDMAN; diff --git a/stepmania/src/SDL_utils.h b/stepmania/src/SDL_utils.h index 8da20e9397..3934778561 100644 --- a/stepmania/src/SDL_utils.h +++ b/stepmania/src/SDL_utils.h @@ -46,28 +46,5 @@ bool SDL_GetEvent(SDL_Event &event, int mask); #define TRAIT_WHITE_ONLY 0x0004 /* 8alphaonly */ int FindSurfaceTraits(const SDL_Surface *img); -struct char_traits_Sint32: public char_traits -{ - static Sint32 *copy(Sint32 *s, const Sint32 *p, size_t n) - { - memcpy(s, p, n * sizeof(Sint32)); - return s; - } - static Sint32 *move(Sint32 *s, const Sint32 *p, size_t n) - { - memmove(s, p, n * sizeof(Sint32)); - return s; - } - static Sint32 *assign(Sint32 *s, unsigned cnt, int n) - { - while(cnt--) *(s++) = n; - return s; - } - static void assign(Sint32 &c1, Sint32 c2) - { - c1 = c2; - } -}; - #endif