BaseAudioContext: createPeriodicWave()-Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
Die createPeriodicWave()
-Methode der BaseAudioContext
-Schnittstelle wird verwendet, um eine PeriodicWave
zu erstellen. Diese Welle wird verwendet, um eine periodische Wellenform zu definieren, die verwendet werden kann, um die Ausgabe eines OscillatorNode
zu formen.
Syntax
createPeriodicWave(real, imag)
createPeriodicWave(real, imag, constraints)
Parameter
real
-
Ein Array von Kosinustermen (traditionell die A-Terme).
imag
-
Ein Array von Sinustermen (traditionell die B-Terme).
Die real
- und imag
-Arrays müssen die gleiche Länge haben, andernfalls wird ein Fehler ausgelöst.
constraints
Optional-
Ein Wörterbuchobjekt, das angibt, ob die Normalisierung deaktiviert werden soll. Wenn nicht angegeben, ist die Normalisierung standardmäßig aktiviert. Es nimmt eine Eigenschaft:
disableNormalization
-
Wenn auf
true
gesetzt, wird die Normalisierung für die periodische Welle deaktiviert. Der Standardwert istfalse
.
Hinweis: Wenn normalisiert, wird die resultierende Welle einen maximalen absoluten Spitzenwert von 1 haben.
Rückgabewert
Eine PeriodicWave
.
Beispiele
Das folgende Beispiel veranschaulicht die einfache Verwendung von createPeriodicWave()
, um ein PeriodicWave
-Objekt zu erstellen, das eine einfache Sinuswelle enthält.
const real = new Float32Array(2);
const imag = new Float32Array(2);
const ac = new AudioContext();
const osc = ac.createOscillator();
real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;
const wave = ac.createPeriodicWave(real, imag, { disableNormalization: true });
osc.setPeriodicWave(wave);
osc.connect(ac.destination);
osc.start();
osc.stop(2);
Dies funktioniert, weil ein Ton, der nur einen Grundton enthält, definitionsgemäß eine Sinuswelle ist.
Hier erstellen wir eine PeriodicWave
mit zwei Werten. Der erste Wert ist der DC-Offset, welcher der Wert ist, mit dem der Oszillator beginnt. Ein Wert von 0
ist hier gut, da er die Kurve in der Mitte des [-1.0; 1.0]
-Bereichs startet. Die zweiten und nachfolgenden Werte sind Sinus- und Kosinuskomponenten, ähnlich dem Ergebnis einer Fourier-Transformation, die Zeitbereichswerte in Frequenzbereichswerte umwandelt. Hier, mit createPeriodicWave()
, geben Sie die Frequenzen an, und der Browser führt eine inverse Fourier-Transformation durch, um einen Zeitbereichspuffer für die Frequenz des Oszillators zu erhalten. In diesem Beispiel setzen wir nur eine Komponente auf voller Lautstärke (1.0
) beim Grundton, sodass wir eine Sinuswelle erhalten. Bedenken Sie, dass der Grundton der Frequenz des Oszillators entspricht (der standardmäßig 440 Hz
beträgt). Daher verschiebt sich die Frequenz dieser periodischen Welle effektiv mit, wenn Sie die Frequenz des Oszillators ändern.
Die Koeffizienten der Fourier-Transformation sollten in aufsteigender Reihenfolge angegeben werden (d.h. usw.) und können positiv oder negativ sein. Eine einfache Methode, um solche Koeffizienten manuell zu erhalten (obwohl nicht die beste), ist die Verwendung eines grafikfähigen Taschenrechners.
Spezifikationen
Specification |
---|
Web Audio API # dom-baseaudiocontext-createperiodicwave |