The createPeriodicWave() method of the AudioContext Interface is used to create a PeriodicWave, which is used to define a periodic waveform that can be used to shape the output of an OscillatorNode.
Syntax
var wave = AudioContext.createPeriodicWave(real, imag, constraints);
Returns
A PeriodicWave.
Parameters
real- An array of cosine terms (traditionally the A terms).
imag- An array of sine terms (traditionally the B terms).
constraintsOptional- An dictionary object that specifies whether normalization should be disabled (if not specified, normalization is enabled by default.) It takes one property:
disableNormalization: If set totrue, normalization is disabled for the periodic wave. The default isfalse.
If normalized, the resulting wave will have a maximum absolute peak value of 1.
Example
The following example illustrates simple usage of createPeriodicWave(), to create a PeriodicWave object containing a simple sine wave.
var real = new Float32Array(2);
var imag = new Float32Array(2);
var ac = new AudioContext();
var osc = ac.createOscillator();
real[0] = 0;
imag[0] = 0;
real[1] = 1;
imag[1] = 0;
var wave = ac.createPeriodicWave(real, imag, {disableNormalization: true});
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.
The coefficients of the Fourier transform should be given in ascending order (i.e. etc.) and can be positive or negative. A simple way of manually obtaining such coefficients (though not the best) is to use a graphing calculator.
Specifications
| Specification | Status | Comment |
|---|---|---|
| Web Audio API The definition of 'createPeriodicWave' in that specification. |
Working Draft |
Browser compatibility
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | 10webkit 57 (unprefixed)[1] |
(Yes) | 25.0 (25.0) | No support | 15.0webkit 22 (unprefixed) |
6.0webkit |
| Disable normalisation | yes | (Yes) | no | ? | ? | ? |
| Feature | Android Webview | Chrome for Android | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|---|---|
| Basic support | 33webkit 57 (unprefixed)[1] |
33webkit 57 (unprefixed)[1] |
(Yes) | 26.0 | 1.2 | ? | ? | ? |
| Disable normalisation | ? | ? | (Yes) | no | no | ? | ? | ? |
[1] Before Chrome 59, the default values were not supported.