| CONSOLE WARNING: line 39: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu |
| CONSOLE WARNING: line 43: The Web Audio autoplay policy will be re-enabled in Chrome 70 (October 2018). Please check that your website is compatible with it. https://goo.gl/7K7WLu |
| CONSOLE WARNING: line 347: The provided value 'fancy' is not a valid enum value of type ChannelCountMode. |
| CONSOLE WARNING: line 353: The provided value 'undefined' is not a valid enum value of type ChannelInterpretation. |
| CONSOLE WARNING: line 523: The provided value '9x' is not a valid enum value of type OverSampleType. |
| CONSOLE WARNING: line 769: The provided value 'junk' is not a valid enum value of type ChannelCountMode. |
| CONSOLE WARNING: line 800: The provided value 'junk' is not a valid enum value of type ChannelCountMode. |
| This is a testharness.js-based test. |
| PASS # AUDIT TASK RUNNER STARTED. |
| PASS > [initialize] Initialize contexts for testing |
| PASS context = new AudioContext() did not throw an exception. |
| PASS otherContext = new AudioContext() did not throw an exception. |
| PASS < [initialize] All assertions passed. (total 2 assertions) |
| PASS > [createBuffer] |
| PASS context.createBuffer(99, 1, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of channels provided (99) is outside the range [1, 32].". |
| PASS context.createBuffer(0, 1, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of channels provided (0) is outside the range [1, 32].". |
| PASS context.createBuffer(1, 1, 1) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (1) is outside the range [3000, 384000].". |
| PASS context.createBuffer(1, 1, 2999) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (2999) is outside the range [3000, 384000].". |
| PASS context.createBuffer(1, 1, 384001) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (384001) is outside the range [3000, 384000].". |
| PASS context.createBuffer(1, 1, 1e6) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The sample rate provided (1.00000e+6) is outside the range [3000, 384000].". |
| PASS context.createBuffer(1, 1, 3000) did not throw an exception. |
| PASS context.createBuffer(1, 1, 192000) did not throw an exception. |
| PASS context.createBuffer(1, 1, 384000) did not throw an exception. |
| PASS context.createBuffer(1, 0, context.sampleRate) threw NotSupportedError: "Failed to execute 'createBuffer' on 'BaseAudioContext': The number of frames provided (0) is less than or equal to the minimum bound (0).". |
| PASS context.createBuffer(new ArrayBuffer(100), true) threw TypeError: "Failed to execute 'createBuffer' on 'BaseAudioContext': 3 arguments required, but only 2 present.". |
| PASS < [createBuffer] All assertions passed. (total 11 assertions) |
| PASS > [createMediaElementSource] |
| PASS context.createMediaElementSource(null) threw TypeError: "Failed to execute 'createMediaElementSource' on 'BaseAudioContext': parameter 1 is not of type 'HTMLMediaElement'.". |
| PASS < [createMediaElementSource] All assertions passed. (total 1 assertions) |
| PASS > [createMediaStreamSource] |
| PASS context.createMediaStreamSource(null) threw TypeError: "Failed to execute 'createMediaStreamSource' on 'BaseAudioContext': parameter 1 is not of type 'MediaStream'.". |
| PASS < [createMediaStreamSource] All assertions passed. (total 1 assertions) |
| PASS > [createScriptProcessor] |
| PASS context.createScriptProcessor(1, 1, 1) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': buffer size (1) must be 0 or a power of two between 256 and 16384.". |
| PASS context.createScriptProcessor(4096, 100, 1) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': number of input channels (100) exceeds maximum (32).". |
| PASS context.createScriptProcessor(4096, 1, 100) threw IndexSizeError: "Failed to execute 'createScriptProcessor' on 'BaseAudioContext': number of output channels (100) exceeds maximum (32).". |
| PASS context.createScriptProcessor() did not throw an exception. |
| PASS context.createScriptProcessor(0) did not throw an exception. |
| PASS < [createScriptProcessor] All assertions passed. (total 5 assertions) |
| PASS > [createChannelSplitter] |
| PASS context.createChannelSplitter(0) threw IndexSizeError: "Failed to execute 'createChannelSplitter' on 'BaseAudioContext': The number of outputs provided (0) is outside the range [1, 32].". |
| PASS context.createChannelSplitter(99) threw IndexSizeError: "Failed to execute 'createChannelSplitter' on 'BaseAudioContext': The number of outputs provided (99) is outside the range [1, 32].". |
| PASS context.createChannelMerger(0) threw IndexSizeError: "Failed to execute 'createChannelMerger' on 'BaseAudioContext': The number of inputs provided (0) is outside the range [1, 32].". |
| PASS < [createChannelSplitter] All assertions passed. (total 3 assertions) |
| PASS > [createChannelMerger] |
| PASS context.createChannelMerger(99) threw IndexSizeError: "Failed to execute 'createChannelMerger' on 'BaseAudioContext': The number of inputs provided (99) is outside the range [1, 32].". |
| PASS < [createChannelMerger] All assertions passed. (total 1 assertions) |
| PASS > [createPeriodicWave] |
| PASS context.createPeriodicWave(null, null) threw TypeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': The provided value cannot be converted to a sequence.". |
| PASS context.createPeriodicWave(new Float32Array(10), null) threw TypeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': The provided value cannot be converted to a sequence.". |
| PASS context.createPeriodicWave(new Float32Array(4100), new Float32Array(4100)) did not throw an exception. |
| PASS context.createPeriodicWave(new Float32Array(8192), new Float32Array(8192)) did not throw an exception. |
| PASS context.createPeriodicWave(new Float32Array(10000), new Float32Array(10000)) did not throw an exception. |
| PASS context.createPeriodicWave(new Float32Array(10), new Float32Array(7)) threw IndexSizeError: "Failed to execute 'createPeriodicWave' on 'BaseAudioContext': length of real array (10) and length of imaginary array (7) must match.". |
| PASS < [createPeriodicWave] All assertions passed. (total 6 assertions) |
| PASS > [createAnalyser] |
| PASS AnalyserNode.fftSize = 42 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The value provided (42) is not a power of two.". |
| PASS AnalyserNode.fftSize is not equal to 42. |
| PASS AnalyserNode.fftSize = 16 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The FFT size provided (16) is outside the range [32, 32768].". |
| PASS AnalyserNode.fftSize is not equal to 16. |
| PASS AnalyserNode.fftSize = 32768 did not throw an exception. |
| PASS AnalyserNode.fftSize = 65536 threw IndexSizeError: "Failed to set the 'fftSize' property on 'AnalyserNode': The FFT size provided (65536) is outside the range [32, 32768].". |
| PASS AnalyserNode.fftSize is not equal to 65536. |
| PASS AnalyserNode.minDecibels = -10 threw IndexSizeError: "Failed to set the 'minDecibels' property on 'AnalyserNode': The minDecibels provided (-10) is greater than the maximum bound (-30).". |
| PASS AnalyserNode.minDecibels is not equal to -10. |
| PASS AnalyserNode.maxDecibels = -150 threw IndexSizeError: "Failed to set the 'maxDecibels' property on 'AnalyserNode': The maxDecibels provided (-150) is less than the minimum bound (-100).". |
| PASS AnalyserNode.maxDecibels is not equal to -150. |
| PASS AnalyserNode.minDecibels = -30 threw IndexSizeError: "Failed to set the 'minDecibels' property on 'AnalyserNode': The minDecibels provided (-30) is greater than or equal to the maximum bound (-30).". |
| PASS AnalyserNode.minDecibels is not equal to -30. |
| PASS AnalyserNode.maxDecibels = -100 threw IndexSizeError: "Failed to set the 'maxDecibels' property on 'AnalyserNode': The maxDecibels provided (-100) is less than or equal to the minimum bound (-100).". |
| PASS AnalyserNode.maxDecibels is not equal to -100. |
| PASS AnalyserNode.smoothingTimeConstant = -0.1 threw IndexSizeError: "Failed to set the 'smoothingTimeConstant' property on 'AnalyserNode': The smoothing value provided (-0.1) is outside the range [0, 1].". |
| PASS AnalyserNode.smoothingTimeConstant is not equal to -0.1. |
| PASS AnalyserNode.smoothingTimeConstant = 1.5 threw IndexSizeError: "Failed to set the 'smoothingTimeConstant' property on 'AnalyserNode': The smoothing value provided (1.5) is outside the range [0, 1].". |
| PASS AnalyserNode.smoothingTimeConstant is not equal to 1.5. |
| PASS AnalyserNode.getFloatFrequencyData(null) threw TypeError: "Failed to execute 'getFloatFrequencyData' on 'AnalyserNode': parameter 1 is not of type 'Float32Array'.". |
| PASS AnalyserNode.getByteFrequencyData(null) threw TypeError: "Failed to execute 'getByteFrequencyData' on 'AnalyserNode': parameter 1 is not of type 'Uint8Array'.". |
| PASS AnalyserNode.getFloatTimeDomainData(null) threw TypeError: "Failed to execute 'getFloatTimeDomainData' on 'AnalyserNode': parameter 1 is not of type 'Float32Array'.". |
| PASS AnalyserNode.getByteTimeDomainData(null) threw TypeError: "Failed to execute 'getByteTimeDomainData' on 'AnalyserNode': parameter 1 is not of type 'Uint8Array'.". |
| PASS AnalyserNode.getFloatFrequencyData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getFloatFrequencyData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.". |
| PASS AnalyserNode.getByteFrequencyData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getByteFrequencyData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.". |
| PASS AnalyserNode.getFloatTimeDomainData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getFloatTimeDomainData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.". |
| PASS AnalyserNode.getByteTimeDomainData(SharedArrayBuffer view) threw TypeError: "Failed to execute 'getByteTimeDomainData' on 'AnalyserNode': The provided ArrayBufferView value must not be shared.". |
| PASS AudioBuffer.getChannelData(2) threw IndexSizeError: "Failed to execute 'getChannelData' on 'AudioBuffer': channel index (2) exceeds number of channels (1)". |
| PASS < [createAnalyser] All assertions passed. (total 28 assertions) |
| PASS > [Init test nodes] Create test nodes for the following tests |
| PASS node = context.createGain() did not throw an exception. |
| PASS node2 = context.createGain() did not throw an exception. |
| PASS < [Init test nodes] All assertions passed. (total 2 assertions) |
| PASS > [connections] AudioNode connections |
| PASS node.connect(null, 0, 0) threw TypeError: "Failed to execute 'connect' on 'AudioNode': parameter 1 is not of type 'AudioNode'.". |
| PASS node.connect(context.destination, 100, 0) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': output index (100) exceeds number of outputs (1).". |
| PASS node.connect(context.destination, 0, 100) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': input index (100) exceeds number of inputs (1).". |
| PASS node.connect(node2.gain, 100) threw IndexSizeError: "Failed to execute 'connect' on 'AudioNode': output index (100) exceeds number of outputs (1).". |
| PASS node.disconnect(99) threw IndexSizeError: "Failed to execute 'disconnect' on 'AudioNode': The output index provided (99) is outside the range [0, 0].". |
| PASS node.connect(otherContext.destination) threw InvalidAccessError: "Failed to execute 'connect' on 'AudioNode': cannot connect to a destination belonging to a different audio context.". |
| PASS < [connections] All assertions passed. (total 6 assertions) |
| PASS > [channel-stuff] channelCount, channelCountMode, channelInterpretation |
| PASS GainNode.channelCount = 99 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channel count provided (99) is outside the range [1, 32].". |
| PASS GainNode.channelCount is not equal to 99. |
| PASS node.channelCountMode = "fancy" did not throw an exception. |
| PASS node.channelCountMode is equal to max. |
| PASS node.channelInterpretation = mode did not throw an exception. |
| PASS node.channelInterpretation is equal to speakers. |
| PASS context.destination.channelCount = 99 threw IndexSizeError: [error message omitted]. |
| PASS < [channel-stuff] All assertions passed. (total 7 assertions) |
| PASS > [audioparam] |
| PASS param.setValueCurveAtTime(null, 0, 0) threw TypeError: "Failed to execute 'setValueCurveAtTime' on 'AudioParam': The provided value cannot be converted to a sequence.". |
| PASS node.gain.exponentialRampToValueAtTime(-1, 0.1) did not throw an exception. |
| PASS node.gain.exponentialRampToValueAtTime(0, 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).". |
| PASS node.gain.exponentialRampToValueAtTime(1e-100, 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).". |
| PASS node.gain.exponentialRampToValueAtTime(Math.pow(2, -149), 0.1) did not throw an exception. |
| PASS node.gain.exponentialRampToValueAtTime(Math.pow(2, -150), 0.1) threw RangeError: "Failed to execute 'exponentialRampToValueAtTime' on 'AudioParam': The float target value provided (0) should not be in the range (-1.40130e-45, 1.40130e-45).". |
| PASS < [audioparam] All assertions passed. (total 6 assertions) |
| PASS > [biquad] |
| PASS node.getFrequencyResponse(new Float32Array(1), new Float32Array(1), new Float32Array(1)) did not throw an exception. |
| PASS node.getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 1 is not of type 'Float32Array'.". |
| PASS node.getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 2 is not of type 'Float32Array'.". |
| PASS node.getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': parameter 3 is not of type 'Float32Array'.". |
| PASS node.getFrequencyResponse(shared_view, nonshared_view, nonshared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.". |
| PASS node.getFrequencyResponse(nonshared_view, shared_view, nonshared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.". |
| PASS node.getFrequencyResponse(nonshared_view, nonshared_view, shared_view) threw TypeError: "Failed to execute 'getFrequencyResponse' on 'BiquadFilterNode': The provided ArrayBufferView value must not be shared.". |
| PASS < [biquad] All assertions passed. (total 7 assertions) |
| PASS > [offline-audio-context] supports 32 channels |
| PASS new OfflineAudioContext(32, 100, context.sampleRate) did not throw an exception. |
| PASS < [offline-audio-context] All assertions passed. (total 1 assertions) |
| PASS > [invalid-offline-audio-context-parameters] errors for invalid channel counts |
| PASS new OfflineAudioContext(0, 100, context.sampleRate) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of channels provided (0) is outside the range [1, 32].". |
| PASS new OfflineAudioContext(99, 100, context.sampleRate) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of channels provided (99) is outside the range [1, 32].". |
| PASS new OfflineAudioContext(1, 100, 1) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The sampleRate provided (1) is outside the range [3000, 384000].". |
| PASS new OfflineAudioContext(1, 100, 1e6) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The sampleRate provided (1.00000e+6) is outside the range [3000, 384000].". |
| PASS new OfflineAudioContext(1, 0, 44100) threw NotSupportedError: "Failed to construct 'OfflineAudioContext': The number of frames provided (0) is less than the minimum bound (1).". |
| PASS < [invalid-offline-audio-context-parameters] All assertions passed. (total 5 assertions) |
| PASS > [invalid-frame-length] |
| PASS testContext = new OfflineAudioContext(1, -88200000000000, 44100) did not throw an exception. |
| PASS testContext.startRendering() rejected correctly with NotSupportedError: startRendering failed to create AudioBuffer(1, 1448390656, 44100). |
| PASS < [invalid-frame-length] All assertions passed. (total 2 assertions) |
| PASS > [waveshaper] |
| PASS node.oversample = "9x" did not throw an exception. |
| PASS node.oversample is equal to none. |
| PASS node.curve = {} threw TypeError: "Failed to set the 'curve' property on 'WaveShaperNode': The provided value is not of type 'Float32Array'.". |
| PASS node.curve = new Float32Array(1) threw InvalidAccessError: "Failed to set the 'curve' property on 'WaveShaperNode': The curve length provided (1) is less than the minimum bound (2).". |
| PASS node.curve is equal to null. |
| PASS node.curve = new Float32Array(2) did not throw an exception. |
| PASS node.curve = null did not throw an exception. |
| PASS < [waveshaper] All assertions passed. (total 7 assertions) |
| PASS > [audio-buffer-source] AudioBufferSource start/stop |
| PASS source = context.createBufferSource() did not throw an exception. |
| PASS source.buffer = buffer did not throw an exception. |
| PASS source.buffer = context.createBuffer(1, 10, context.sampleRate) threw InvalidStateError: "Failed to set the 'buffer' property on 'AudioBufferSourceNode': Cannot set buffer to non-null after it has been already been set to a non-null buffer". |
| PASS source.start(-1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The start time provided (-1) is less than the minimum bound (0).". |
| PASS source.start(Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(-Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, -Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, -1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The offset provided (-1) is less than the minimum bound (0).". |
| PASS source.start(1, -Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The offset provided (-4.94066e-324) is less than the minimum bound (0).". |
| PASS source.start(1, 1, Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, 1, -Infinity) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, 1, NaN) threw TypeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The provided double value is non-finite.". |
| PASS source.start(1, 1, -1) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The duration provided (-1) is less than the minimum bound (0).". |
| PASS source.start(1, 1, -Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioBufferSourceNode': The duration provided (-4.94066e-324) is less than the minimum bound (0).". |
| PASS source.start() did not throw an exception. |
| PASS source.stop(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The stop time provided (-4.94066e-324) is less than the minimum bound (0).". |
| PASS source.stop(Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source.stop(-Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source.stop(NaN) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source.stop() did not throw an exception. |
| PASS source2 = context.createBufferSource() did not throw an exception. |
| PASS source2.buffer = buffer did not throw an exception. |
| PASS source2.start(0, 0) did not throw an exception. |
| PASS source3 = context.createBufferSource() did not throw an exception. |
| PASS source3.buffer = buffer did not throw an exception. |
| PASS source3.start(0, -1/Infinity) did not throw an exception. |
| PASS source4 = context.createBufferSource() did not throw an exception. |
| PASS source4.start() did not throw an exception. |
| PASS source5 = context.createBufferSource() did not throw an exception. |
| PASS source5.buffer = buffer did not throw an exception. |
| PASS source5.stop() threw InvalidStateError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': cannot call stop without calling start first.". |
| PASS source6 = context.createBufferSource() did not throw an exception. |
| PASS source6.buffer = buffer did not throw an exception. |
| PASS source6.start() did not throw an exception. |
| PASS source6.start() threw InvalidStateError: "Failed to execute 'start' on 'AudioBufferSourceNode': cannot call start more than once.". |
| PASS source7 = context.createBufferSource() did not throw an exception. |
| PASS source7.buffer = buffer did not throw an exception. |
| PASS source7.start() did not throw an exception. |
| PASS source7.stop() did not throw an exception. |
| PASS < [audio-buffer-source] All assertions passed. (total 42 assertions) |
| PASS > [oscillator] start/stop |
| PASS source8 = context.createOscillator() did not throw an exception. |
| PASS source8.start(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The start time provided (-4.94066e-324) is less than the minimum bound (0).". |
| PASS source8.start(Infinity) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.start(-Infinity) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.start(NaN) threw TypeError: "Failed to execute 'start' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.start() did not throw an exception. |
| PASS source8.stop(-Number.MIN_VALUE) threw RangeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The stop time provided (-4.94066e-324) is less than the minimum bound (0).". |
| PASS source8.stop(Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.stop(-Infinity) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.stop(NaN) threw TypeError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': The provided double value is non-finite.". |
| PASS source8.stop() did not throw an exception. |
| PASS osc = context.createOscillator() did not throw an exception. |
| PASS osc.stop() threw InvalidStateError: "Failed to execute 'stop' on 'AudioScheduledSourceNode': cannot call stop without calling start first.". |
| PASS osc1 = context.createOscillator() did not throw an exception. |
| PASS osc1.start() did not throw an exception. |
| PASS osc1.stop() did not throw an exception. |
| PASS osc.setPeriodicWave(null) threw TypeError: "Failed to execute 'setPeriodicWave' on 'OscillatorNode': parameter 1 is not of type 'PeriodicWave'.". |
| PASS < [oscillator] All assertions passed. (total 17 assertions) |
| PASS > [convolver] |
| PASS oc = new OfflineAudioContext(1, 44100, 44100) did not throw an exception. |
| PASS conv = oc.createConvolver() did not throw an exception. |
| PASS conv.buffer = {} threw TypeError: "Failed to set the 'buffer' property on 'ConvolverNode': The provided value is not of type 'AudioBuffer'.". |
| PASS conv.buffer = oc.createBuffer(1, 100, 22050) threw NotSupportedError: "Failed to set the 'buffer' property on 'ConvolverNode': The buffer sample rate of 22050 does not match the context rate of 44100 Hz.". |
| PASS conv.buffer is equal to null. |
| PASS < [convolver] All assertions passed. (total 5 assertions) |
| PASS > [panner] |
| PASS panner.channelCount = 1 did not throw an exception. |
| PASS panner.channelCount = 2 did not throw an exception. |
| PASS PannerNode.channelCount = 0 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (0) is outside the range [1, 2].". |
| PASS PannerNode.channelCount is not equal to 0. |
| PASS PannerNode.channelCount = 3 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (3) is outside the range [1, 2].". |
| PASS PannerNode.channelCount is not equal to 3. |
| PASS PannerNode.channelCountMode = max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': Panner: 'max' is not allowed". |
| PASS PannerNode.channelCountMode is not equal to max. |
| PASS panner.channelCountMode = "explicit" did not throw an exception. |
| PASS panner.channelCountMode = "clamped-max" did not throw an exception. |
| PASS panner.channelCountMode = "junk" did not throw an exception. |
| PASS < [panner] All assertions passed. (total 11 assertions) |
| PASS > [script-processor] |
| PASS script = context.createScriptProcessor(256, 3) did not throw an exception. |
| PASS script.channelCount is equal to 3. |
| PASS script.channelCountMode is equal to explicit. |
| PASS script.channelCount = 3 did not throw an exception. |
| PASS ScriptProcessorNode.channelCount = 1 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': channelCount cannot be changed from 3 to 1". |
| PASS ScriptProcessorNode.channelCount is not equal to 1. |
| PASS ScriptProcessorNode.channelCount = 7 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': channelCount cannot be changed from 3 to 7". |
| PASS ScriptProcessorNode.channelCount is not equal to 7. |
| PASS script.channelCountMode = "explicit" did not throw an exception. |
| PASS ScriptProcessorNode.channelCountMode = max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': channelCountMode cannot be changed from 'explicit' to 'max'". |
| PASS ScriptProcessorNode.channelCountMode is not equal to max. |
| PASS ScriptProcessorNode.channelCountMode = clamped-max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': channelCountMode cannot be changed from 'explicit' to 'clamped-max'". |
| PASS ScriptProcessorNode.channelCountMode is not equal to clamped-max. |
| PASS script.channelCountMode = "junk" did not throw an exception. |
| PASS < [script-processor] All assertions passed. (total 14 assertions) |
| PASS > [misc] Miscellaneous tests |
| PASS osc.noteOn is equal to undefined. |
| PASS osc.noteOff is equal to undefined. |
| PASS source.noteOn is equal to undefined. |
| PASS source.noteOff is equal to undefined. |
| PASS < [misc] All assertions passed. (total 4 assertions) |
| PASS # AUDIT TASK RUNNER FINISHED: 24 tasks ran successfully. |
| Harness: the test ran to completion. |
| |