The setPeriodicWave()
method of the OscillatorNode
interface is used to point to a PeriodicWave
defining a periodic waveform that can be used to shape the oscillator's output, when type
is custom
.
The setPeriodicWave()
method of the OscillatorNode
interface is used to point to a PeriodicWave
defining a periodic waveform that can be used to shape the oscillator's output, when type
is custom
.
js
setPeriodicWave(wave)
wave
A PeriodicWave
object representing the waveform to use as the shape of the oscillator's output.
None (undefined
).
The following example illustrates simple usage of createPeriodicWave()
, recreating a sine wave from a periodic wave.
js
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); osc.setPeriodicWave(wave); osc.connect(ac.destination); osc.start(); osc.stop(2);
This works because a sound that contains only a fundamental tone is by definition a sine wave.
Here, we create a PeriodicWave
with two values. The first value is the DC offset, which is the value at which the oscillator starts. 0 is good here, because we want to start the curve at the middle of the [-1.0; 1.0] range.
The second and subsequent values are sine and cosine components. You can think of it as the result of a Fourier transform, where you get frequency domain values from time domain value. Here, with createPeriodicWave()
, you specify the frequencies, and the browser performs an inverse Fourier transform to get a time domain buffer for the frequency of the oscillator. Here, we only set one component at full volume (1.0) on the fundamental tone, so we get a sine wave.
Specification |
---|
Web Audio API # dom-oscillatornode-setperiodicwave |
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
setPeriodicWave |
30 | 12 | 25 | No | 17 | 8 | ≤37 | 30 | 25 | 18 | 8 | 2.0 |
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode/setPeriodicWave