--- title: AudioContext.createPeriodicWave() slug: Web/API/BaseAudioContext/createPeriodicWave translation_of: Web/API/BaseAudioContext/createPeriodicWave original_slug: Web/API/AudioContext/createPeriodicWave ---
{{ APIRef("Web Audio API") }}
{{ domxref("AudioContext") }}インターフェースのcreatePeriodicWave()
メソッドは、周期的な波形を定義するために使われる{{domxref("PeriodicWave")}}を生成します。これは{{ domxref("OscillatorNode") }}の出力を決めるために使われます。
var audioCtx = new AudioContext(); var wave = audioCtx.createPeriodicWave(real, imag);
{{domxref("PeriodicWave")}}
The following example illustrates simple usage of createPeriodicWave()
, to create a {{domxref("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); 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.
Specification | Status | Comment |
---|---|---|
{{SpecName('Web Audio API', '#widl-AudioContext-createPeriodicWave-PeriodicWave-Float32Array-real-Float32Array-imag', 'createPeriodicWave')}} | {{Spec2('Web Audio API')}} |
{{Compat("api.BaseAudioContext.createPeriodicWave")}}