Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

SSL test_delayNodeCycles.html

  Interaktion und
PortierbarkeitHTML
 

 products/Sources/formale Sprachen/C/Firefox/dom/media/webaudio/test/test_delayNodeCycles.html


<!DOCTYPE HTML>
<html>
<head>
  <title>Test the support of cycles.</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="webaudio.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">

SimpleTest.waitForExplicitFinish();

const sampleRate = 48000;
const inputLength = 2048;

addLoadEvent(function() {
  function addSine(b) {
    for (var i = 0i < b.length; i++) {
      b[i] += Math.sin(440 * 2 * Math.PI * i / sampleRate);
    }
  }

  function getSineBuffer(ctx) {
    var buffer = ctx.createBuffer(1, inputLength, ctx.sampleRate);
    addSine(buffer.getChannelData(0));
    return buffer;
  }

  function createAndPlayWithCycleAndDelayNode(ctx, delayFrames) {
    var source = ctx.createBufferSource();
    source.buffer = getSineBuffer(ctx);

    var gain = ctx.createGain();
    var delay = ctx.createDelay();
    delay.delayTime.value = delayFrames/ctx.sampleRate;

    source.connect(gain);
    gain.connect(delay);
    delay.connect(ctx.destination);
    // cycle
    delay.connect(gain);

    source.start(0);
  }

  function createAndPlayWithCycleAndNoDelayNode(ctx) {
    var source = ctx.createBufferSource();
    source.loop = true;
    source.buffer = getSineBuffer(ctx);

    var gain = ctx.createGain();
    var gain2 = ctx.createGain();

    source.connect(gain);
    gain.connect(gain2);
    // cycle
    gain2.connect(gain);
    gain2.connect(ctx.destination);

    source.start(0);
  }

  function createAndPlayWithCycleAndNoDelayNodeInCycle(ctx) {
    var source = ctx.createBufferSource();
    source.loop = true;
    source.buffer = getSineBuffer(ctx);

    var delay = ctx.createDelay();
    var gain = ctx.createGain();
    var gain2 = ctx.createGain();

    // Their is a cycle, a delay, but the delay is not in the cycle.
    source.connect(delay);
    delay.connect(gain);
    gain.connect(gain2);
    // cycle
    gain2.connect(gain);
    gain2.connect(ctx.destination);

    source.start(0);
  }

  var remainingTests = 0;
  function finish() {
    if (--remainingTests == 0) {
      SimpleTest.finish();
    }
  }

  function getOfflineContext(oncomplete) {
    var ctx = new OfflineAudioContext(1, sampleRate, sampleRate);
    ctx.oncomplete = oncomplete;
    return ctx;
  }

  function checkSilentBuffer(e) {
    var buffer = e.renderedBuffer.getChannelData(0);
    for (var i = 0i < buffer.length; i++) {
      if (buffer[i] != 0.0) {
        ok(false, "buffer should be silent.");
        finish();
        return;
      }
    }
    ok(true, "buffer should be silent.");
    finish();
  }

  function checkNoisyBuffer(e, aDelayFrames) {
    let delayFrames = Math.max(128, aDelayFrames);

    var expected = new Float32Array(e.renderedBuffer.length);
    for (var i = delayFrames; i < expected.length; i += delayFrames) {
      addSine(expected.subarray(ii + inputLength));
    }

    compareChannels(e.renderedBuffer.getChannelData(0), expected);
    finish();
  }

  function expectSilentOutput(f) {
    remainingTests++;
    var ctx = getOfflineContext(checkSilentBuffer);
    f(ctx);
    ctx.startRendering();
  }

  function expectNoisyOutput(delayFrames) {
    remainingTests++;
    var ctx = getOfflineContext();
    ctx.oncomplete = function(e) { checkNoisyBuffer(e, delayFrames); };
    createAndPlayWithCycleAndDelayNode(ctx, delayFrames);
    ctx.startRendering();
  }

  // This is trying to make a graph with a cycle and no DelayNode in the graph.
  // The cycle subgraph should be muted, in this graph the output should be silent.
  expectSilentOutput(createAndPlayWithCycleAndNoDelayNode);
  // This is trying to make a graph with a cycle and a DelayNode in the graph, but
  // not part of the cycle.
  // The cycle subgraph should be muted, in this graph the output should be silent.
  expectSilentOutput(createAndPlayWithCycleAndNoDelayNodeInCycle);
  // Those are making legal graphs, with at least one DelayNode in the cycle.
  // There should be some non-silent output.
  expectNoisyOutput(sampleRate/4);
  // DelayNode.delayTime will be clamped to 128/ctx.sampleRate.
  // There should be some non-silent output.
  expectNoisyOutput(0);
});

</script>
</pre>
</body>
</html>

Messung V0.5 in Prozent
C=90 H=96 G=93

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.24Angebot  (Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-08-26) ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002