--- src/kernel/qsoundqss_qws.cpp.orig Wed Jan 30 12:49:24 2002 +++ src/kernel/qsoundqss_qws.cpp Wed Jan 30 12:47:41 2002 @@ -142,6 +142,19 @@ public: return wavedata_remaining < 0 || !max; } private: + int getOneSample() + { + int sample; + if ( chunkdata.wBitsPerSample == 8 ) { + sample = (data[out++] - 128) * 128; + wavedata_remaining--; + } else { + sample = ((short*)data)[out/2]; + out += 2; + wavedata_remaining -= 2; + } + return sample; + } void getSample(int& l, int& r) { l = r = 0; @@ -152,38 +165,22 @@ private: if ( out >= max ) { max = dev->readBlock((char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining)); - wavedata_remaining -= max; out = 0; if ( max <= 0 ) { max = 0; return; } } - if ( chunkdata.wBitsPerSample == 8 ) { - l = (data[out++] - 128) * 128; - } else { - l = ((short*)data)[out/2]; - out += 2; - } + l = getOneSample(); if ( sound_stereo ) { if ( chunkdata.channels == 1 ) { r = l; } else { - if ( chunkdata.wBitsPerSample == 8 ) { - r = (data[out++] - 128) * 128; - } else { - r = ((short*)data)[out/2]; - out += 2; - } + r = getOneSample(); } } else { if ( chunkdata.channels == 2 ) { - if ( chunkdata.wBitsPerSample == 8 ) { - r = (data[out++] - 128) * 128; - } else { - r = ((short*)data)[out/2]; - out += 2; - } + r = getOneSample(); l = l + r; } }