# Say - Text to Speech

Use the built-in text-to-speech engine to say the text you provide.

## Overview

2,058 Installs  
[Install Extension](raycast://extensions/litomore/say?source=webstore)

## Features

- **Type to Say** - Quick type your text and say  
- **Text to Say** - Input your text or paragraph and say  
- **Selected Text to Say** - Say the selected text on any application  
- **Stop Running Say** - Stop the current running Say process  
- **Configure Say** - Configure the voice, rate, and output device

## Configurations

Currently, the `Configure Say` command we provided does not alter your system settings.  
You can go to macOS System Settings or Windows Settings to download new voices and get more advanced configurations.

On macOS, see [https://support.apple.com/en-us/guide/mac-help/spch638/mac](https://support.apple.com/en-us/guide/mac-help/spch638/mac).  
On Windows, open `Windows Settings -> Time & language -> Speech`.

## Recommended Voices on macOS

Siri is the closest thing to a real human voice.  
You can go to `System Settings -> Accessibility -> Live Speech`. Pick your favorite Siri voice for the best experience.

## API

With this extension, users can use this extension's configuration page for more settings within Raycast.

### Use `raycast-cross-extension`

This is the most recommended way, `raycast-cross-extension` will verify the `crossExtensions` field in the `package.json`.  
This helps your upstream extension provider to get to know who is using their extension. For more details, see [Raycast Cross Extension Conventions](https://github.com/LitoMore/raycast-cross-extension-conventions).

```javascript
import { crossLaunchCommand } from "raycast-cross-extension";

crossLaunchCommand({
  name: "typeToSay",
  type: LaunchType.Background,
  extensionName: "say",
  ownerOrAuthorName: "litomore",
  arguments: {
    content: "Hello, world!",
  },
  context: {
    sayOptions: {
      voice: "Cellos",
    },
  },
});
```

### Use `launchCommand`

```javascript
import { launchCommand } from "@raycast/api";

launchCommand({
  name: "typeToSay",
  type: LaunchType.Background,
  extensionName: "say",
  ownerOrAuthorName: "litomore",
  arguments: {
    content: "Hello, world!",
  },
  context: {
    sayOptions: {
      voice: "Cellos",
    },
  },
});
```

### Use Deeplinks

```shell
arguments=$(jq -rR @uri <<< '{"content":"Hello from Deeplinks!"}')
launchContext=$(jq -rR @uri <<< '{"sayOptions":{"voice":"Cello"}}')
deeplink="raycast://extensions/litomore/say/typeToSay?launchType=background&arguments=$arguments&launchContext=$launchContext"
open $deeplink
```

### Use `native-say`

Get it from [https://www.npmjs.com/package/native-say](https://www.npmjs.com/package/native-say).

It provides JavaScript interfaces for the built-in text-to-speech engines on macOS and Windows. You can use it if you want some advanced API usage.

## FAQ

### 1. How to stop a speaking agent?

You could type a space or any other new contents to the `Type to Say` command to abort current speaking agent.

### 2. Some voices can be found in system settings but not listed in the Configure Say command.

Yes. Not all voices are listed in the Configure Say command because it's limited by the OS. But you can choose those voices from system settings.

## License

MIT

## Compatibility

- macOS
- Windows

## Categories

- [Communication](/content/search?q=category%3ACommunication%20/index.html)  
- [Productivity](/content/search?q=category%3AProductivity%20/index.html)  
- [System](/content/search?q=category%3ASystem%20/index.html)  
- [Fun](/content/search?q=category%3AFun%20/index.html)  
- [AI Extensions](/content/search?q=category%3A%22AI%20Extensions%22/index.html)

## Source code

[View source](https://github.com/raycast/extensions/tree/186d955eda64f9e956b25a3fdf5566b1d38f57f2/extensions/say/)
