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
.
var wave = AudioContext.createPeriodicWave(real, imag[, constraints]);
A PeriodicWave
.
real
imag
constraints
Optional
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.
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.
Specification | Status | Comment |
---|---|---|
Web Audio API The definition of 'createPeriodicWave' in that specification. | Working Draft |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 59
|
Yes | 25 | No | 22
|
6
|
Possible to disable normalisation | Yes | Yes | No | No | ? | ? |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | 59
|
59
|
Yes | 26 | Yes | No | ? |
Possible to disable normalisation | ? | ? | Yes | No | ? | ? | ? |
© 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