aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sword2/driver/d_sound.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp
index c8bbd03b5f..013877e6e9 100644
--- a/sword2/driver/d_sound.cpp
+++ b/sword2/driver/d_sound.cpp
@@ -331,7 +331,7 @@ MusicInputStream::~MusicInputStream() {
inline bool MusicInputStream::eosIntern() const {
if (_looping)
return false;
- return _pos >= _bufferEnd;
+ return _remove || _pos >= _bufferEnd;
}
int MusicInputStream::readBuffer(int16 *buffer, const int numSamples) {
@@ -409,12 +409,15 @@ void MusicInputStream::refill() {
if (_fading > 0) {
// Fade down
for (ptr = _buffer; ptr < buf; ptr++) {
- if (--_fading <= 0) {
+ if (_fading > 0) {
+ _fading--;
+ *ptr = (*ptr * _fading) / _fadeSamples;
+ }
+ if (_fading == 0) {
_looping = false;
_remove = true;
- break;
+ *ptr = 0;
}
- *ptr = (*ptr * _fading) / _fadeSamples;
}
} else if (_fading < 0) {
// Fade up