MediaStreamAudioSourceNode
==========================

The **`MediaStreamAudioSourceNode`** interface is a type of `AudioNode` which operates as an audio source whose media is received from a `MediaStream` obtained using the WebRTC or Media Capture and Streams APIs.

This media could be from a microphone (through `getUserMedia()`) or from a remote peer on a WebRTC call (using the `RTCPeerConnection`'s audio tracks).

A `MediaStreamAudioSourceNode` has no inputs and exactly one output, and is created using the `AudioContext.createMediaStreamSource()` method.

The `MediaStreamAudioSourceNode` takes the audio from the *first* `MediaStreamTrack` whose `kind` attribute's value is `audio`. See Track ordering for more information about the order of tracks.

The number of channels output by the node matches the number of tracks found in the selected audio track.

EventTarget

AudioNode

MediaStreamAudioSourceNode

|  |  |
| --- | --- |
| Number of inputs | `0` |
| Number of outputs | `1` |
| Channel count | 2 (but note that `AudioNode.channelCount` is only used for up-mixing and down-mixing `AudioNode` inputs, and `MediaStreamAudioSourceNode` doesn't have any input) |

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

`new MediaStreamAudioSourceNode()`

Creates a new `MediaStreamAudioSourceNode` object instance with the specified options.

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

*In addition to the following properties, `MediaStreamAudioSourceNode` inherits the properties of its parent, `AudioNode`.*

`mediaStream` Read only 

The `MediaStream` used when constructing this `MediaStreamAudioSourceNode`.

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

*Inherits methods from its parent, `AudioNode`*.

Exceptions
----------

`InvalidStateError` `DOMException`

Thrown if the stream specified by the `mediaStream` parameter does not contain any audio tracks.

Usage notes
-----------

### Track ordering

For the purposes of the `MediaStreamTrackAudioSourceNode` interface, the order of the audio tracks on the stream is determined by taking the tracks whose `kind` is `audio`, then sorting the tracks by their `id` property's values, in Unicode code point order (essentially, in alphabetical or lexicographical order, for IDs which are simple alphanumeric strings).

The **first** track, then, is the track whose `id` comes first when the tracks' IDs are all sorted by Unicode code point.

However, it's important to note that the rule establishing this ordering was added long after this interface was first introduced into the Web Audio API. As such, you can't easily rely on the order matching between any two browsers or browser versions.

The `MediaStreamTrackAudioSourceNode` interface is similar to `MediaStreamAudioSourceNode`, but avoids this problem by letting you specify which track you want to use.

Example
-------

See `AudioContext.createMediaStreamSource()` for example code that uses this object.

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

| Specification |
| --- |
| Web Audio API # MediaStreamAudioSourceNode |

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

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

See also
--------

* Using the Web Audio API
* WebRTC API
* Media Capture and Streams API (Media Streams)
* `MediaStreamTrackAudioSourceNode`