diff options
-rw-r--r-- | Alc/ALu.c | 3 | ||||
-rw-r--r-- | OpenAL32/alSource.c | 9 |
2 files changed, 10 insertions, 2 deletions
@@ -1460,8 +1460,9 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size) voice_end = voice + ctx->VoiceCount; for(;voice != voice_end;++voice) { + ALboolean IsVoiceInit = (voice->Step > 0); source = voice->Source; - if(source && source->state == AL_PLAYING) + if(source && source->state == AL_PLAYING && IsVoiceInit) MixSource(voice, source, device, SamplesToDo); } diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c index 5cc6c34b..e79f0fc3 100644 --- a/OpenAL32/alSource.c +++ b/OpenAL32/alSource.c @@ -2986,10 +2986,17 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state) voice->Source = Source; } - /* Clear previous samples if playback is discontinuous. */ if(discontinuity) + { + /* Clear previous samples if playback is discontinuous. */ memset(voice->PrevSamples, 0, sizeof(voice->PrevSamples)); + /* Clear the stepping value so the mixer knows not to mix this + * until the update gets applied. + */ + voice->Step = 0; + } + voice->Moving = AL_FALSE; for(i = 0;i < MAX_INPUT_CHANNELS;i++) { |