我们的志愿者还没有将这篇文章翻译为 中文 (简体)。加入我们帮助完成翻译!
您也可以阅读此文章的English (US)版。
The PeriodicWave
interface defines a periodic waveform that can be used to shape the output of an OscillatorNode
.
PeriodicWave
has no inputs or outputs; it is used to define custom oscillators when calling OscillatorNode.setPeriodicWave()
. The PeriodicWave
itself is created/returned by AudioContext.createPeriodicWave()
.
Constructor
PeriodicWave.PeriodicWave()
- Creates a new
PeriodicWave
instance using the default values for all properties. If you wish to establish custom property values at the outset, use theAudioContext.createPeriodicWave()
factory method instead.
Properties
None; also, PeriodicWave
doesn't inherit any properties.
Methods
None; also, PeriodicWave
doesn't inherit any properties.
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 a 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 'PeriodicWave' in that specification. |
Working Draft |
Browser compatibility
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 10.0webkit | (Yes) | 25.0 (25.0) | No support | 15.0webkit 22 (unprefixed) |
6.0webkit |
Constructor | (Yes) | ? | No support | No support | ? | No support |
Feature | Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | ? | (Yes) | 25.0 (25.0) | ? | ? | ? | 33.0 |
Constructor | No support | ? | No support | No support | ? | No support | (Yes) |