OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 | |
3 <!-- | |
4 Tests that GainNode is properly scaling the gain. | |
5 We'll render 11 notes, starting at a gain of 1.0, decreasing in gain by 0.1. | |
6 The 11th note will be of gain 0.0, so it should be silent (at the end in the ren
dered output). | |
7 --> | |
8 | |
9 <html> | |
10 <head> | |
11 <script src="resources/audit-util.js"></script> | |
12 <script src="resources/audio-testing.js"></script> | |
13 | |
14 </head> | |
15 <body> | |
16 | |
17 <script> | |
18 | |
19 window.onload = init; | |
20 | |
21 var sampleRate = 44100.0; | |
22 var bufferDurationSeconds = 0.125; | |
23 var numberOfNotes = 11; | |
24 var noteSpacing = bufferDurationSeconds + 0.020; // leave 20ms of silence betwee
n each "note" | |
25 var lengthInSeconds = numberOfNotes * noteSpacing; | |
26 | |
27 var context = 0; | |
28 var sinWaveBuffer = 0; | |
29 | |
30 function createSinWaveBuffer(lengthInSeconds, frequency) { | |
31 var audioBuffer = context.createBuffer(2, lengthInSeconds * sampleRate, samp
leRate); | |
32 | |
33 var n = audioBuffer.length; | |
34 var channelL = audioBuffer.getChannelData(0); | |
35 var channelR = audioBuffer.getChannelData(1); | |
36 | |
37 for (var i = 0; i < n; ++i) { | |
38 channelL[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate); | |
39 channelR[i] = channelL[i]; | |
40 } | |
41 | |
42 return audioBuffer; | |
43 } | |
44 | |
45 function playNote(time, gain) { | |
46 var source = context.createBufferSource(); | |
47 source.buffer = sinWaveBuffer; | |
48 | |
49 var gainNode = context.createGain(); | |
50 gainNode.gain.value = gain; | |
51 | |
52 source.connect(gainNode); | |
53 gainNode.connect(context.destination); | |
54 | |
55 source.start(time); | |
56 } | |
57 | |
58 function init() { | |
59 if (!window.testRunner) | |
60 return; | |
61 | |
62 // Create offline audio context. | |
63 context = new OfflineAudioContext(2, sampleRate * lengthInSeconds, sampleRat
e); | |
64 | |
65 // Create a buffer for a short "note". | |
66 sinWaveBuffer = createSinWaveBuffer(bufferDurationSeconds, 880.0); | |
67 | |
68 // Render 11 notes, starting at a gain of 1.0, decreasing in gain by 0.1. | |
69 // The last note will be of gain 0.0, so shouldn't be perceptible in the ren
dered output. | |
70 for (var i = 0; i < numberOfNotes; ++i) { | |
71 var time = i * noteSpacing; | |
72 var gain = 1.0 - i / (numberOfNotes - 1); | |
73 playNote(time, gain); | |
74 } | |
75 | |
76 context.oncomplete = finishAudioTest; | |
77 context.startRendering(); | |
78 | |
79 testRunner.waitUntilDone(); | |
80 } | |
81 | |
82 </script> | |
83 | |
84 </body> | |
85 </html> | |
OLD | NEW |