# Text-to-speech destinations

> Choose destinations for text-to-speech output.

Text-to-speech (TTS) messages are injected to destinations. Destinations determine two factors: output and mechanism.

* Output is where the synthesized speech plays to and decides who hears the TTS message. Each destination uses one of the following outputs:

  * **Local Playback** - messages injected here play back locally on the user’s default render device (for example, loudspeakers or headphones).
  * **Remote Transmission** - messages injected here are sent to remote participants in connected sessions according to transmission policies (the same sessions that basic voice transmits to).
  * **Local and Remote** - messages injected here are simultaneously injected to Local Playback and Remote Transmission.

* Mechanism is how new messages are handled when there is an ongoing message playing. Each destination uses one of the following injection mechanisms:

  * **Simple** - destinations using this mechanism mix together new messages and ongoing messages to play them concurrently.
  * **Queue** - destinations using this mechanism queue new messages in the order they are sent. When the ongoing message finishes playing, this mechanism auto-triggers the message that is next in line.
  * **Replace** - destinations using this mechanism cancel any ongoing message and then replaces it with the new message.

You can inject synthesized speech into the following destinations:

> **Note:**
>
> Most destinations are independent and do not affect the behavior of any other destinations. However, the two queued destinations involving remote transmission share a queue.

* **Remote Transmission**

  * Enum value: `TTSDestination::RemoteTransmission`
  * Output: Remote Transmission
  * Mechanism: Simple

* **Local Playback**

  * Enum value: `TTSDestination::LocalPlayback`
  * Output: Local Playback
  * Mechanism: Simple

* **Remote Transmission with Local Playback**

  * Enum value: `TTSDestination::RemoteTransmissionWithLocalPlayback`
  * Output: Local and Remote
  * Mechanism: Simple

* **Queued Remote Transmission**

  * Enum value: `TTSDestination::QueuedRemoteTransmission`
  * Output: Remote Transmission
  * Mechanism: Queue
  * Caveat: Shares queue with Queued Remote Transmission with Local Playback.

* **Queued Local Playback**

  * Enum value: `TTSDestination::QueuedLocalPlayback`
  * Output: Local Playback
  * Mechanism: Queue

* **Queued Remote Transmission with Local Playback**

  * Enum value: `TTSDestination::QueuedRemoteTransmissionWithLocalPlayback`
  * Output: Local and Remote
  * Mechanism: Queue
  * Caveat: Shares queue with Queued Remote Transmission

* **Screen Reader**

  * Enum value: `TTSDestination::ScreenReader`
  * Output: Local Playback
  * Mechanism: Replace

You can obtain the state and content of all messages that are playing or are enqueued in any destination by using `ITextToSpeech::GetMessages(TTSDestination Destination)`. Queued destinations return their `TArray<ITTSMessage\*>` in queue order, and others in the order that speech was injected.
