setValueAtTime-within-block.html (1567B)
1 <!DOCTYPE html> 2 <title>Test setValueAtTime with start time not on a block boundary</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script> 6 promise_test(function() { 7 const bufferSize = 200; 8 const offset = 65; 9 const sampleRate = 48000; 10 const scheduledValue = -2.0; 11 12 var context = new OfflineAudioContext(1, bufferSize, sampleRate); 13 14 var gain = context.createGain(); 15 gain.gain.setValueAtTime(scheduledValue, offset/sampleRate); 16 gain.connect(context.destination); 17 18 // Apply unit DC signal to gain node. 19 var source = context.createBufferSource(); 20 source.buffer = 21 function() { 22 var buffer = context.createBuffer(1, 1, context.sampleRate); 23 buffer.getChannelData(0)[0] = 1.0; 24 return buffer; 25 }(); 26 source.loop = true; 27 source.start(); 28 source.connect(gain); 29 30 return context.startRendering(). 31 then(function(buffer) { 32 assert_equals(buffer.length, bufferSize, "output buffer length"); 33 var output = buffer.getChannelData(0); 34 var i = 0; 35 for (; i < offset; ++i) { 36 // "Its default value is 1." 37 assert_equals(output[i], 1.0, "default gain at sample " + i); 38 } 39 for (; i < buffer.length; ++i) { 40 // "If there are no more events after this SetValue event, then for 41 // t≥T0, v(t)=V, where T0 is the startTime parameter and V is the 42 // value parameter." 43 assert_equals(output[i], scheduledValue, 44 "scheduled value at sample " + i); 45 } 46 }); 47 }); 48 </script>