Index: content/test/data/media/webrtc_test_audio.js |
diff --git a/content/test/data/media/webrtc_test_audio.js b/content/test/data/media/webrtc_test_audio.js |
index 52c7d3897daf7e508c6545315e0263069ce72417..40668c6d38180c9e3b96f1de13d26f8a5ae6a41c 100644 |
--- a/content/test/data/media/webrtc_test_audio.js |
+++ b/content/test/data/media/webrtc_test_audio.js |
@@ -3,9 +3,6 @@ |
// found in the LICENSE file. |
// Audio test utilities. |
- |
-// GetStats reports audio output energy in the [0, 32768] range. |
-var MAX_AUDIO_OUTPUT_ENERGY = 32768; |
// Gathers |numSamples| samples at |frequency| number of times per second and |
// calls back |callback| with an array with numbers in the [0, 32768] range. |
@@ -25,29 +22,28 @@ |
}, 1000 / frequency); |
} |
-// Tries to identify the beep-every-half-second signal generated by the fake |
-// audio device in media/video/capture/fake_video_capture_device.cc. Fails the |
-// test if we can't see a signal. The samples should have been gathered over at |
-// least two seconds since we expect to see at least three "peaks" in there |
-// (we should see either 3 or 4 depending on how things line up). |
+// Tries to identify the beep-every-second signal generated by the fake audio |
+// media/audio/fake_audio_input_stream.cc. Fails the test if we can't see a |
+// signal. |
function verifyAudioIsPlaying(samples) { |
- var numPeaks = 0; |
- var threshold = MAX_AUDIO_OUTPUT_ENERGY * 0.7; |
- var currentlyOverThreshold = false; |
+ var average = 0; |
+ for (var i = 0; i < samples.length; ++i) |
+ average += samples[i] / samples.length; |
- // Detect when we have been been over the threshold and is going back again |
- // (i.e. count peaks). We should see about one peak per second. |
- for (var i = 0; i < samples.length; ++i) { |
- if (currentlyOverThreshold && samples[i] < threshold) |
- numPeaks++; |
- currentlyOverThreshold = samples[i] >= threshold; |
- } |
+ var largest = 0; |
+ for (var i = 0; i < samples.length; ++i) |
+ largest = Math.max(largest, samples[i]); |
- console.log('Number of peaks identified: ' + numPeaks); |
+ console.log('Average audio level: ' + average + ', largest: ' + largest); |
- if (numPeaks < 2) |
- failTest('Expected to see at least two peaks in audio signal, got ' + |
- numPeaks + '. Dumping samples for analysis: "' + samples + '"'); |
+ // TODO(phoglund): Make a more sophisticated curve-fitting algorithm. We want |
+ // to see a number of peaks with relative silence between them. The following |
+ // seems to work fine on a nexus 7. |
+ if (average < 3000 || average > 8000) |
+ failTest('Unexpected avg audio level: got ' + average + ', expected it ' + |
+ 'to be 4000 < avg < 8000.'); |
+ if (largest < 25000) |
+ failTest('Too low max audio level: got ' + largest + ', expected > 30000.'); |
} |
// If silent (like when muted), we should get very near zero audio level. |