summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-output-channel-count.https.html
blob: 8dafa2f8111a8b522be5540a2fbf4f9a3ee5cd6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE html>
<html>
  <head>
    <title>
      Test the construction of AudioWorkletNode with real-time context
    </title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      const audit = Audit.createTaskRunner();
      const context = new AudioContext();

      setup(function () {
        context.audioWorklet.addModule(
          'processors/channel-count-processor.js').then(() => audit.run());

        // Test if the output channe count dynamically changes if the input
        // and output is 1.
        audit.define(
            {label: 'Dynamically change the channel count to if unspecified.'},
            (task, should) => {
              // Use arbitrary parameters for the test.
              const buffer = new AudioBuffer({
                numberOfChannels: 17,
                length: 1,
                sampleRate: context.sampleRate,
              });
              const source = new AudioBufferSourceNode(context);
              source.buffer = buffer;

              const node = new AudioWorkletNode(context, 'channel-count', {
                numberOfInputs: 1,
                numberOfOutputs: 1,
              });

              node.port.onmessage = (message) => {
                const expected = message.data;
                should(expected.outputChannel,
                       'The expected output channel count').beEqualTo(17);
                task.done();
              };

              // We need to make an actual connection becasue the channel count
              // change happen when the rendering starts. It is to test if the
              // channel count adapts to the upstream node correctly.
              source.connect(node).connect(context.destination);
              source.start();
            });

        // Test if outputChannelCount is honored as expected even if the input
        // and output is 1.
        audit.define(
            {label: 'Givien outputChannelCount must be honored.'},
            (task, should) => {
              const node = new AudioWorkletNode(
                  context, 'channel-count', {
                    numberOfInputs: 1,
                    numberOfOutputs: 1,
                    outputChannelCount: [2],
                  });

              node.port.onmessage = (message) => {
                const expected = message.data;
                should(expected.outputChannel,
                       'The expected output channel count').beEqualTo(2);
                task.done();
              };

              // We need to make an actual connection becasue the channel count
              // change might happen when the rendering starts. It is to test
              // if the specified channel count is kept correctly.
              node.connect(context.destination);
            });
      });
    </script>
  </body>
</html>