test_getUserMedia_audioConstraints.html (3256B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <script type="application/javascript" src="mediaStreamPlayback.js"></script> 5 </head> 6 <body> 7 <pre id="test"> 8 <script type="application/javascript"> 9 "use strict"; 10 11 createHTML({ 12 title: "Test that microphone getSettings report correct settings after applyConstraints", 13 bug: "1447982", 14 }); 15 16 function testTrackAgainstAudioConstraints(track, audioConstraints) { 17 let constraints = track.getConstraints(); 18 is(constraints.autoGainControl, audioConstraints.autoGainControl, 19 "Should report correct autoGainControl constraint"); 20 is(constraints.echoCancellation, audioConstraints.echoCancellation, 21 "Should report correct echoCancellation constraint"); 22 is(constraints.noiseSuppression, audioConstraints.noiseSuppression, 23 "Should report correct noiseSuppression constraint"); 24 25 let settings = track.getSettings(); 26 is(settings.autoGainControl, audioConstraints.autoGainControl, 27 "Should report correct autoGainControl setting"); 28 is(settings.echoCancellation, audioConstraints.echoCancellation, 29 "Should report correct echoCancellation setting"); 30 is(settings.noiseSuppression, audioConstraints.noiseSuppression, 31 "Should report correct noiseSuppression setting"); 32 } 33 34 async function testAudioConstraints(track, audioConstraints) { 35 // We applyConstraints() first and do a fresh gUM later, to avoid 36 // testing multiple concurrent captures at different settings. 37 38 info(`Testing applying constraints ${JSON.stringify(audioConstraints)} ` + 39 `to track with settings ${JSON.stringify(track.getSettings())}`); 40 await track.applyConstraints(audioConstraints); 41 testTrackAgainstAudioConstraints(track, audioConstraints); 42 43 info("Testing fresh gUM request with audio constraints " + 44 JSON.stringify(audioConstraints)); 45 let stream = await getUserMedia({audio: audioConstraints}); 46 testTrackAgainstAudioConstraints(stream.getTracks()[0], audioConstraints); 47 stream.getTracks().forEach(t => t.stop()); 48 } 49 50 runTest(async () => { 51 let audioDevice = SpecialPowers.getCharPref("media.audio_loopback_dev", ""); 52 if (!audioDevice) { 53 ok(false, "No device set by framework. Try --use-test-media-devices"); 54 return; 55 } 56 57 let supportedConstraints = navigator.mediaDevices.getSupportedConstraints(); 58 is(supportedConstraints.autoGainControl, true, 59 "autoGainControl constraint should be supported"); 60 is(supportedConstraints.echoCancellation, true, 61 "echoCancellation constraint should be supported"); 62 is(supportedConstraints.noiseSuppression, true, 63 "noiseSuppression constraint should be supported"); 64 65 let egn = (e, g, n) => ({ 66 echoCancellation: e, 67 autoGainControl: g, 68 noiseSuppression: n 69 }); 70 71 let stream = await getUserMedia({ 72 audio: egn(true, true, true), 73 }); 74 let track = stream.getTracks()[0]; 75 let audioConstraintsToTest = [ 76 egn(false, true, true), 77 egn(true, false, true), 78 egn(true, true, false), 79 egn(false, false, true), 80 egn(false, true, false), 81 egn(true, false, false), 82 egn(false, false, false), 83 egn(true, true, true), 84 ]; 85 for (let audioConstraints of audioConstraintsToTest) { 86 await testAudioConstraints(track, audioConstraints); 87 } 88 track.stop(); 89 }); 90 </script> 91 </pre> 92 </body> 93 </html>