# createAudioPlayer

URL: https://www.caprid.com/docs/reference/typescript/caprid/moq-media/functions/createaudioplayer/

```ts
function createAudioPlayer<Context>(options): Promise<AudioPlayer<ReturnType<Context["createGain"]>>>;
```

Defined in: [audio-player.ts:476](https://github.com/caprids/relay-sdks/blob/main/ts/packages/moq-media/src/audio-player.ts#L476)

Create an audio player on `context`: it loads the jitter buffer's worklet once per context, so it resolves after
that. Connect `player.output` yourself.

```ts
const context = new AudioContext({ sampleRate: 48_000, latencyHint: 'interactive' });
const player = await createAudioPlayer({ context });
player.output.connect(context.destination);
const clock = createPlayoutClock({ targetLatencyUs: AUDIO_ONLY_TARGET_LATENCY_US });
const input = player.addInput({ clock, decoderConfig: audioDecoderConfigFromTrack(audioTrack) });
const reader = createFrameReader(createFrameSequencer({ clock, grouping: 'frame' }), { onFrame: input.push });
subscriber.subscribe({ namespace, track: 'audio' }, { ...reader, onError });
```

## Type Parameters

| Type Parameter |
| ------ |
| <a id="type-parameter-context"></a> `Context` *extends* [`AudioPlayerContext`](https://www.caprid.com/docs/reference/typescript/caprid/moq-media/interfaces/audioplayercontext/) |

## Parameters

| Parameter | Type |
| ------ | ------ |
| `options` | [`AudioPlayerOptions`](https://www.caprid.com/docs/reference/typescript/caprid/moq-media/interfaces/audioplayeroptions/)\<`Context`\> |

## Returns

`Promise`\<[`AudioPlayer`](https://www.caprid.com/docs/reference/typescript/caprid/moq-media/interfaces/audioplayer/)\<`ReturnType`\<`Context`\[`"createGain"`\]\>\>\>
