Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: LayoutTests/webaudio/osc-sine-sweep-snr.html

Issue 670863002: Rebase oscillator sine test result. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase and update TestExpectations Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 <!doctype html>
2 <html>
3 <head>
4 <title>Test Oscillator Node: sine</title>
5 <script src="resources/compatibility.js"></script>
6 <script src="resources/buffer-loader.js"></script>
7 <script src="../resources/js-test.js"></script>
8 <script src="resources/oscillator-testing.js"></script>
9 </head>
10
11 <body>
12 <script>
13 // See oscillator-sine.html for more info on the actual wave shape
hongchan 2014/11/11 19:03:14 TYPO: Missing period?
Raymond Toy 2014/11/11 19:48:02 Done.
14 //
15 // This test is a partial duplicate of oscillator-sine but is designed t o be less sensitive
16 // to the actual output versus the reference. Instead of requiring an ex act match, we check
17 // that for several criteria to pass. The SNR between the actual and exp ected signals be
hongchan 2014/11/11 19:03:14 TYPO: "should" or "must" be?
Raymond Toy 2014/11/11 19:48:02 Done.
18 // large enough. The maximum difference must be below a threshold and t he actual number of
19 // points that are different must be below a threshold.
20
21 var sampleRate = 44100.0;
22 var nyquist = 0.5 * sampleRate;
23 var lengthInSeconds = 4;
24 var lowFrequency = 10;
25 var highFrequency = nyquist + 2000; // go slightly higher than nyquist t o make sure we generate silence there
26 var context = 0;
27 var reference = 0;
28 var renderedData = 0;
29 var signalPower = 0;
30 var noisePower = 0;
31
32 // SNR must be greater than this to pass the test.
33 // Q: Why is the SNR threshold not infinity?
34 // A: The reference result is a 16-bit WAV file, so it won't compare exa ctly with the
35 // floating point result.
36 var thresholdSNR = 86.5;
37 // Max diff must be less than this to pass the test
38 var thresholdDiff = 1.5;
39 // The number of times the diff exceeds the threshold should be less tha n this to pass.
40 var thresholdDiffCount = 8000;
41
42 function db(sPower, nPower)
43 {
44 if (nPower == 0 && sPower > 0) {
45 return 1000;
46 }
47 return 10 * Math.log10(sPower / nPower);
48 }
49
50 function checkResult (event) {
51 renderedData = event.renderedBuffer.getChannelData(0);
52 // Compute signal to noise ratio between the result and the referenc e. Also keep track
53 // of the max difference (and position).
54
55 var maxError = -1;
56 var errorPosition = -1;
57 var diffCount = 0;
58
59 for (var k = 0; k < renderedData.length; ++k) {
60 var diff = renderedData[k] - reference[k];
61 noisePower += diff * diff;
62 signalPower += reference[k] * reference[k];
63 if (Math.abs(diff) > maxError) {
64 maxError = Math.abs(diff);
65 errorPosition = k;
66 }
67 // The reference file is a 16-bit WAV file, so we will never get an exact match
68 // between it and the actual floating-point result.
69 if (diff > 1/32768) {
70 diffCount++;
71 }
72 }
73
74 var snr = db(signalPower, noisePower);
75 if (snr < thresholdSNR) {
76 testFailed("Expected SNR of " + thresholdSNR + " dB, but actual SNR is " + snr + " dB");
77 } else {
78 testPassed("Exceeded SNR threshold of " + thresholdSNR + " dB");
79 }
80 if (maxError > thresholdDiff) {
81 testFailed("Maximum difference of " + maxError + " at " + errorP osition + " exceeded threshold of " + thresholdDiff);
82 } else {
83 testPassed("Maximum difference below threshold of " + thresholdD iff);
84 }
85 if (diffCount > thresholdDiffCount) {
86 testFailed(diffCount + " differences found but expected no more than " + thresholdDiffCount);
87 } else {
88 testPassed("Number of differences between actual and expected re sult is less than " + thresholdDiffCount);
89 }
90
91 finishJSTest();
92 }
93
94 function finishedLoading(bufferList) {
95 reference = bufferList[0].getChannelData(0);
96 generateExponentialOscillatorSweep(context, "sine");
97 context.oncomplete = checkResult;
98 context.startRendering();
99 }
100
101 function runTest () {
102 window.jsTestIsAsync = true;
103
104 // Create offline audio context.
105 context = new OfflineAudioContext(1, sampleRate * lengthInSeconds, s ampleRate);
106
107 bufferLoader = new BufferLoader(
108 context,
109 [ "oscillator-sine-expected.wav" ],
110 finishedLoading);
111
112 bufferLoader.load();
113 }
114
115 runTest();
116 successfullyParsed = true;
117 </script>
118 </body>
119 </html>
OLDNEW
« no previous file with comments | « LayoutTests/platform/win/webaudio/oscillator-sine-expected.wav ('k') | LayoutTests/webaudio/osc-sine-sweep-snr-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698