File: k-rate-audioworklet.https.html

package info (click to toggle)
thunderbird 1%3A128.14.0esr-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,334,824 kB
  • sloc: cpp: 7,391,917; javascript: 5,617,271; ansic: 3,833,216; python: 1,230,742; xml: 619,690; asm: 456,022; java: 179,892; sh: 118,796; makefile: 21,908; perl: 14,825; objc: 12,399; yacc: 4,583; pascal: 2,973; lex: 1,720; ruby: 1,190; exp: 762; sql: 674; awk: 580; php: 436; lisp: 430; sed: 70; csh: 10
file content (79 lines) | stat: -rw-r--r-- 2,377 bytes parent folder | download | duplicates (28)
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
<!doctype html>
<html>
  <head>
    <title>Test k-rate AudioParam of AudioWorkletNode</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/webaudio/resources/audit-util.js"></script>
    <script src="/webaudio/resources/audit.js"></script>
  </head>

  <body>
    <script>
      const audit = Audit.createTaskRunner();

      // Use the worklet gain node to test k-rate parameters.
      const filePath =
          '../the-audioworklet-interface/processors/gain-processor.js';

      // Context for testing
      let context;

      audit.define('Create Test Worklet', (task, should) => {

        // Arbitrary sample rate and duration.
        const sampleRate = 8000;

        // Only new a few render quanta to verify things are working.
        const testDuration = 4 * 128 / sampleRate;

        context = new OfflineAudioContext({
          numberOfChannels: 3,
          sampleRate: sampleRate,
          length: testDuration * sampleRate
        });

        should(
            context.audioWorklet.addModule(filePath),
            'Construction of AudioWorklet')
            .beResolved()
            .then(() => task.done());
      });

      audit.define('AudioWorklet k-rate AudioParam', (task, should) => {
        let src = new ConstantSourceNode(context);

        let kRateNode = new AudioWorkletNode(context, 'gain');

        src.connect(kRateNode).connect(context.destination);

        let kRateParam = kRateNode.parameters.get('gain');
        kRateParam.automationRate = 'k-rate';

        // Automate the gain
        kRateParam.setValueAtTime(0, 0);
        kRateParam.linearRampToValueAtTime(
            10, context.length / context.sampleRate);

        src.start();

        context.startRendering()
            .then(audioBuffer => {
              let output = audioBuffer.getChannelData(0);

              // Verify that the output from the worklet is step-wise
              // constant.
              for (let k = 0; k < output.length; k += 128) {
                should(
                    output.slice(k, k + 128),
                    ` k-rate output [${k}: ${k + 127}]`)
                    .beConstantValueOf(output[k]);
              }
            })
            .then(() => task.done());
      });

      audit.run();
    </script>
  </body>
</html>