From e356c173157f398a48c661c04c2e94eb3f5a74ab Mon Sep 17 00:00:00 2001 From: Paul Kaplan <pkaplan@media.mit.edu> Date: Fri, 4 Aug 2017 13:54:13 -0400 Subject: [PATCH] Add tests for the audio effects --- test/unit/util/audio-effects.test.js | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 test/unit/util/audio-effects.test.js diff --git a/test/unit/util/audio-effects.test.js b/test/unit/util/audio-effects.test.js new file mode 100644 index 000000000..b70ea2f40 --- /dev/null +++ b/test/unit/util/audio-effects.test.js @@ -0,0 +1,59 @@ +/* eslint-env jest */ +/* global AudioNode AudioContext WebAudioTestAPI */ +import 'web-audio-test-api'; +WebAudioTestAPI.setState({ + 'OfflineAudioContext#startRendering': 'promise' +}); + +import AudioEffects from '../../../src/lib/audio/audio-effects'; +import RobotEffect from '../../../src/lib/audio/effects/robot-effect'; +import EchoEffect from '../../../src/lib/audio/effects/echo-effect'; +import VolumeEffect from '../../../src/lib/audio/effects/volume-effect'; + +describe('Audio Effects manager', () => { + let audioContext = new AudioContext(); + let audioBuffer = audioContext.createBuffer(1, 400, 44100); + + test('changes buffer length and playback rate for faster effect', () => { + const audioEffects = new AudioEffects(audioBuffer, 'faster'); + expect(audioEffects.audioContext._.length).toEqual(Math.floor(400 / 1.5)); + expect(audioEffects.source.playbackRate.value).toEqual(1.5); + }); + + test('changes buffer length and playback rate for slower effect', () => { + const audioEffects = new AudioEffects(audioBuffer, 'slower'); + expect(audioEffects.audioContext._.length).toEqual(Math.floor(400 / 0.5)); + expect(audioEffects.source.playbackRate.value).toEqual(0.5); + }); + + test('changes buffer length for echo effect', () => { + const audioEffects = new AudioEffects(audioBuffer, 'echo'); + expect(audioEffects.audioContext._.length).toBeGreaterThan(400); + }); + + test.skip('process starts the offline rendering context and returns a promise', () => { + // @todo haven't been able to get web audio test api to actually run render + }); +}); + +describe('Effects', () => { + let audioContext; + + beforeEach(() => { + audioContext = new AudioContext(); + }); + + test('all effects provide an input and output that are connected', () => { + const robotEffect = new RobotEffect(audioContext, 0.5); + expect(robotEffect.input).toBeInstanceOf(AudioNode); + expect(robotEffect.output).toBeInstanceOf(AudioNode); + + const echoEffect = new EchoEffect(audioContext, 0.5); + expect(echoEffect.input).toBeInstanceOf(AudioNode); + expect(echoEffect.output).toBeInstanceOf(AudioNode); + + const volumeEffect = new VolumeEffect(audioContext, 0.5); + expect(volumeEffect.input).toBeInstanceOf(AudioNode); + expect(volumeEffect.output).toBeInstanceOf(AudioNode); + }); +}); -- GitLab