<!doctype html>
<html>
<head>
<title>A disabled audio track is rendered as silence</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#introduction">
<link rel="help" href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreams-as-media-elements">
</head>
<body>
<p class="instructions">When prompted, accept to share your audio stream.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that a disabled audio track in a
MediaStream is rendered as silence. It relies on the
<a href="https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html">
Web Audio API</a>.</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var t = async_test("Tests that a disabled audio track in a MediaStream is rendered as silence");
var aud = document.getElementById("aud");
t.step(function() {
  navigator.mediaDevices.getUserMedia({audio: true}).then(t.step_func(function (stream) {
    var ctx = new AudioContext();
    var streamSource = ctx.createMediaStreamSource(stream);
    var silenceDetector = ctx.createScriptProcessor(1024);
    var count = 10;
    silenceDetector.onaudioprocess = t.step_func(function (e) {
       var buffer1 = e.inputBuffer.getChannelData(0);
       var buffer2 = e.inputBuffer.getChannelData(1);
       var out = e.outputBuffer.getChannelData(0);
       out = new Float32Array(buffer1);
       for (var i = 0; i < buffer1.length; i++) {
          assert_equals(buffer1[i], 0, "Audio buffer entry #" + i + " in channel 0 is silent");
       }
       for (var i = 0; i < buffer2.length; i++) {
          assert_equals(buffer2[i], 0, "Audio buffer entry #" + i + " in channel 1 is silent");
       }
       count--;
       if (count === 0) {
         silenceDetector.onaudioprocess = null;
         t.done();
        }
    });
    stream.getAudioTracks()[0].enabled = false;

    streamSource.connect(silenceDetector);
    silenceDetector.connect(ctx.destination);
  }), function(error) {});
});
</script>
</body>
</html>
