Based on testing and a brief code examination of AudioParamTimeline.cpp, AudioParam.setValueCurveAtTime is performing nearest neighbor sampling for missing values, rather than linear interpolation. Per the WebAudio specification, linear interpolation should be used: https://webaudio.github.io/web-audio-api/#widl-AudioParam-setValueCurveAtTime-AudioParam-sequence-float--values-double-startTime-double-duration Chrome 46+ and Firefox use linear interpolation. My test case involved making a Float32 array with 2 values: 1.0 and 0.0. I then used this on a GainNode to perform a fadeout. Expected behavior was a fadeout, actual behavior was immediate silence.
<rdar://problem/33693466>