> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# setOutputDeviceAsync()

> Sets the audio output (speaker) device for the call.

`setOutputDeviceAsync({ outputDeviceId })`

<Badge color="green">{"✓"} Prebuilt</Badge> <Badge color="green">{"✓"} Custom</Badge>

## Parameters

<ParamField body="outputDeviceId" type="string" required>
  The ID of the audio output device to use, as returned by [`enumerateDevices()`](/reference/daily-js/instance-methods/enumerate-devices).
</ParamField>

## Return value

Returns a `Promise` that resolves to a `DailyDeviceInfos` object:

```json theme={null}
{
  "camera": { "deviceId": "video-device-id" },
  "mic": { "deviceId": "audio-device-id" },
  "speaker": { "deviceId": "output-device-id" }
}
```

## Browser support

Firefox \<116 and Safari \<18.4 do not support `setSinkId` or listing audio output devices in `enumerateDevices()`. On these browsers, `setOutputDeviceAsync()` logs a warning and returns the device list with `speaker` set to `{}` — it does not throw.

<Warning>
  Safari 18.4 is the first version to introduce speaker selection support, but our experience is that it does not work reliably. Current Safari Technology Preview versions appear to resolve these issues. If a user encounters audio problems after switching speaker devices, recommend trying another browser or refreshing the page.
</Warning>

For browsers that don't report output devices, we recommend listing the speaker as "Default" and hiding any speaker-selection UI.

## Example

```javascript theme={null}
const devices = await call.enumerateDevices();
const speakers = devices.devices.filter((d) => d.kind === 'audiooutput');

await call.setOutputDeviceAsync({ outputDeviceId: speakers[0].deviceId });
```

## See also

<CardGroup>
  <Card title="Methods" icon="code" iconType="solid">
    * [enumerateDevices()](/reference/daily-js/instance-methods/enumerate-devices)
    * [getInputDevices()](/reference/daily-js/instance-methods/get-input-devices)
    * [setInputDevicesAsync()](/reference/daily-js/instance-methods/set-input-devices-async)
  </Card>

  <Card title="Events" icon="bolt" iconType="solid">
    * [available-devices-updated](/reference/daily-js/events/settings-events#available-devices-updated)
    * [selected-devices-updated](/reference/daily-js/events/settings-events#selected-devices-updated)
  </Card>

  <Card title="Guides" icon="book-open" iconType="solid">
    * [Audio and video](/docs/daily-js/guides/audio-video)
  </Card>
</CardGroup>
