OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <html> | |
3 | |
4 <head> | |
5 <script src="../resources/js-test.js"></script> | |
6 <script src="resources/compatibility.js"></script> | |
7 <script src="resources/audit-util.js"></script> | |
8 <script src="resources/audio-testing.js"></script> | |
9 <script src="resources/audiobuffersource-testing.js"></script> | |
10 <script src="resources/buffer-loader.js"></script> | |
11 </head> | |
12 | |
13 <body> | |
14 <script> | |
15 description('AudioBufferSourceNode: oscillator-driven detune modulation.'); | |
16 window.jsTestIsAsync = true; | |
17 | |
18 var sampleRate = 44100; | |
19 var duration = 0.25; | |
20 | |
21 var context = new OfflineAudioContext(1, sampleRate * duration, sampleRate); | |
22 var referenceBuffer; | |
23 | |
24 var audit = Audit.createTaskRunner(); | |
25 | |
26 // Task: Load the reference file asynchronously. In order to create a new | |
27 // reference file, use the task 'generate-reference' below. | |
28 audit.defineTask('load-reference', function (done) { | |
29 var loader = new BufferLoader(context, [ | |
30 'audiobuffersource-detune-modulation-expected.wav' | |
31 ], function (bufferList) { | |
32 referenceBuffer = bufferList[0]; | |
33 done(); | |
34 }); | |
35 | |
36 loader.load(); | |
37 }); | |
38 | |
39 | |
40 // Task: Render the actual buffer and compare with the reference. | |
41 audit.defineTask('generate-verify', function (done) { | |
42 | |
43 // With this setting, the detune will be changing continuously and | |
44 // repeatedly within the range of [-1200, 1200] around 440Hz, based on the | |
45 // input from the oscillator. | |
46 createSawtoothWithModulation(context, 'detune', 440, 1200); | |
47 | |
48 context.startRendering().then(function (renderedBuffer) { | |
49 var actual = renderedBuffer.getChannelData(0); | |
50 var expected = referenceBuffer.getChannelData(0); | |
51 | |
52 // Compare two buffers with arbitrary (yet reasonable) constraints. | |
53 // There parameters are determined by try bot experiments. | |
54 compareBuffersWithConstraints(actual, expected, { | |
55 thresholdSNR: 93.31, | |
56 thresholdDiffULP: 1.01, | |
57 thresholdDiffCount: 0, | |
58 bitDepth: 16 | |
59 }); | |
60 | |
61 }).then(done); | |
62 }); | |
63 | |
64 // Task: Create a new reference audio file. See .runTasks() below to run | |
65 // this task. | |
66 audit.defineTask('generate-reference', function (done) { | |
67 if (!window.testRunner) { | |
68 done(); | |
69 return; | |
70 } | |
71 | |
72 // With this setting, the detune will be changing continuously and | |
73 // repeatedly within the range of [-1200, 1200] around 440Hz, based on the | |
74 // input from the oscillator. | |
75 createSawtoothWithModulation(context, 'detune', 440, 1200); | |
76 | |
77 // |finishAudioTest| will automatically create a reference audio file from | |
78 // the OAC rendering if the reference file does not exist. | |
79 context.oncomplete = finishAudioTest; | |
80 context.startRendering(); | |
81 testRunner.waitUntilDone(); | |
82 | |
83 done(); | |
84 }); | |
85 | |
86 audit.defineTask('finish', function (done) { | |
87 finishJSTest(); | |
88 done(); | |
89 }); | |
90 | |
91 window.onload = function () { | |
92 audit.runTasks( | |
93 'load-reference', | |
94 'generate-verify', | |
95 'finish' | |
96 ); | |
97 }; | |
98 | |
99 // Use this task to generate a new reference audio file. Make sure to | |
100 // comment out .runTasks() above before use this. | |
101 // audit.runTasks('generate-reference'); | |
102 | |
103 successfullyParsed = true; | |
104 </script> | |
105 </body> | |
106 | |
107 </html> | |
OLD | NEW |