From fc991cab5ca0d3d0e73e4f2aefccc7c3dc15b0ce Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Tue, 5 Nov 2019 02:06:50 +0000 Subject: [PATCH] [#1317] Don't ramp volume when set at start of playback (#1318) Closes #1317 ## Changes: - Only apply volume ramp if sound is already playing. --- src/engine/Resources/Sound/AudioInstance.ts | 2 +- src/spec/WebAudioInstanceSpec.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/engine/Resources/Sound/AudioInstance.ts b/src/engine/Resources/Sound/AudioInstance.ts index 52075665..122e1eb5 100644 --- a/src/engine/Resources/Sound/AudioInstance.ts +++ b/src/engine/Resources/Sound/AudioInstance.ts @@ -193,7 +193,7 @@ export class WebAudioInstance extends AudioInstance { this._volume = value; - if (this._volumeNode.gain.setTargetAtTime) { + if (this._isPlaying && this._volumeNode.gain.setTargetAtTime) { // https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/setTargetAtTime // After each .1 seconds timestep, the target value will ~63.2% closer to the target value. // This exponential ramp provides a more pleasant trasition in gain diff --git a/src/spec/WebAudioInstanceSpec.ts b/src/spec/WebAudioInstanceSpec.ts index eea46de3..414b3bfd 100644 --- a/src/spec/WebAudioInstanceSpec.ts +++ b/src/spec/WebAudioInstanceSpec.ts @@ -31,6 +31,12 @@ describe('A webaudio instance', () => { setValueAtTime: () => { /*empty*/ } + }, + start: () => { + /*empty*/ + }, + stop: () => { + /*empty*/ } }; @@ -51,8 +57,15 @@ describe('A webaudio instance', () => { expect(webaudio).toBeDefined(); }); - it('should use specific settings for volume', () => { - webaudio.volume = 1; + it('should set volume immediately', () => { + webaudio.volume = 0.5; + expect(mockGainNode.gain.value).toEqual(0.5); + expect(mockGainNode.gain.setTargetAtTime).not.toHaveBeenCalled(); + }); + + it('should ramp volume when set during playback', () => { + webaudio.play(); + webaudio.volume = 0.25; expect(mockGainNode.gain.setTargetAtTime).toHaveBeenCalledWith(webaudio.volume, 0, 0.1); }); }); -- 2.51.2