OscillatorNode
==============

The **`OscillatorNode`** interface represents a periodic waveform, such as a sine wave. It is an `AudioScheduledSourceNode` audio-processing module that causes a specified frequency of a given wave to be created—in effect, a constant tone.

EventTarget

AudioNode

AudioScheduledSourceNode

OscillatorNode

|  |  |
| --- | --- |
| Number of inputs | `0` |
| Number of outputs | `1` |
| Channel count mode | `max` |
| Channel count | `2` (not used in the default count mode) |
| Channel interpretation | `speakers` |

Constructor
-----------

`OscillatorNode()`

Creates a new instance of an `OscillatorNode` object, optionally providing an object specifying default values for the node's properties. As an alternative, you can use the `BaseAudioContext.createOscillator()` factory method; see Creating an AudioNode.

Instance properties
-------------------

*Inherits properties from its parent, `AudioScheduledSourceNode`, and adds the following properties:*

`OscillatorNode.frequency`

An a-rate `AudioParam` representing the frequency of oscillation in hertz (though the `AudioParam` returned is read-only, the value it represents is not). The default value is 440 Hz (a standard middle-A note).

`OscillatorNode.detune`

An a-rate `AudioParam` representing detuning of oscillation in cents (though the `AudioParam` returned is read-only, the value it represents is not). The default value is 0.

`OscillatorNode.type`

A string which specifies the shape of waveform to play; this can be one of a number of standard values, or `custom` to use a `PeriodicWave` to describe a custom waveform. Different waves will produce different tones. Standard values are `"sine"`, `"square"`, `"sawtooth"`, `"triangle"` and `"custom"`. The default is `"sine"`.

### Event handlers

`AudioScheduledSourceNode.ended_event`

Sets the event handler for the `ended` event, which fires when the tone has stopped playing.

Instance methods
----------------

*Inherits methods from its parent, `AudioScheduledSourceNode`, and adds the following:*

`OscillatorNode.setPeriodicWave()`

Sets a `PeriodicWave` which describes a periodic waveform to be used instead of one of the standard waveforms; calling this sets the `type` to `custom`.

`AudioScheduledSourceNode.start()`

Specifies the exact time to start playing the tone.

`AudioScheduledSourceNode.stop()`

Specifies the time to stop playing the tone.

Examples
--------

The following example shows basic usage of an `AudioContext` to create an oscillator node and to start playing a tone on it. For an applied example, check out our Violent Theremin demo (see app.js for relevant code).


```js
// create web audio api context
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();

// create Oscillator node
const oscillator = audioCtx.createOscillator();

oscillator.type = "square";
oscillator.frequency.setValueAtTime(440, audioCtx.currentTime); // value in hertz
oscillator.connect(audioCtx.destination);
oscillator.start();
```

Specifications
--------------

| Specification |
| --- |
| Web Audio API # OscillatorNode |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* Using the Web Audio API