W3cubDocs

/DOM

BaseAudioContext.createPeriodicWave

The createPeriodicWave() method of the BaseAudioContext 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).
constraints Optional
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 to true, normalization is disabled for the periodic wave. The default is false.

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. (a+bi)ei,(c+di)e2i,(f+gi)e3i\left(a+bi\right)e^{i} , \left(c+di\right)e^{2i} , \left(f+gi\right)e^{3i} 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

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.

See also

© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createPeriodicWave