> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/argmaxinc/WhisperKit/llms.txt
> Use this file to discover all available pages before exploring further.

# Voices & Languages

> Available voices, languages, and voice selection for Qwen3 TTS models

TTSKit supports 9 built-in voices and 10 languages through the Qwen3 TTS models.

## Available Voices

The following voices are available:

<AccordionGroup>
  <Accordion title="Ryan" icon="user">
    **Identifier:** `ryan`

    **Enum:** `.ryan`

    **Description:** Default male voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Hello", speaker: .ryan)
    ```
  </Accordion>

  <Accordion title="Aiden" icon="user">
    **Identifier:** `aiden`

    **Enum:** `.aiden`

    **Description:** Male voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Hello", speaker: .aiden)
    ```
  </Accordion>

  <Accordion title="Ono Anna" icon="user">
    **Identifier:** `ono-anna`

    **Enum:** `.onoAnna`

    **Description:** Female voice

    ```swift theme={null}
    let result = try await tts.generate(text: "こんにちは", speaker: .onoAnna, language: .japanese)
    ```
  </Accordion>

  <Accordion title="Sohee" icon="user">
    **Identifier:** `sohee`

    **Enum:** `.sohee`

    **Description:** Female voice

    ```swift theme={null}
    let result = try await tts.generate(text: "안녕하세요", speaker: .sohee, language: .korean)
    ```
  </Accordion>

  <Accordion title="Eric" icon="user">
    **Identifier:** `eric`

    **Enum:** `.eric`

    **Description:** Male voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Hello", speaker: .eric)
    ```
  </Accordion>

  <Accordion title="Dylan" icon="user">
    **Identifier:** `dylan`

    **Enum:** `.dylan`

    **Description:** Male voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Hello", speaker: .dylan)
    ```
  </Accordion>

  <Accordion title="Serena" icon="user">
    **Identifier:** `serena`

    **Enum:** `.serena`

    **Description:** Female voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Bonjour", speaker: .serena, language: .french)
    ```
  </Accordion>

  <Accordion title="Vivian" icon="user">
    **Identifier:** `vivian`

    **Enum:** `.vivian`

    **Description:** Female voice

    ```swift theme={null}
    let result = try await tts.generate(text: "Hello", speaker: .vivian)
    ```
  </Accordion>

  <Accordion title="Uncle Fu" icon="user">
    **Identifier:** `uncle-fu`

    **Enum:** `.uncleFu`

    **Description:** Male voice

    ```swift theme={null}
    let result = try await tts.generate(text: "你好", speaker: .uncleFu, language: .chinese)
    ```
  </Accordion>
</AccordionGroup>

## Available Languages

TTSKit supports 10 languages:

| Language   | Identifier   | Enum          |
| ---------- | ------------ | ------------- |
| English    | `english`    | `.english`    |
| Chinese    | `chinese`    | `.chinese`    |
| Japanese   | `japanese`   | `.japanese`   |
| Korean     | `korean`     | `.korean`     |
| German     | `german`     | `.german`     |
| French     | `french`     | `.french`     |
| Russian    | `russian`    | `.russian`    |
| Portuguese | `portuguese` | `.portuguese` |
| Spanish    | `spanish`    | `.spanish`    |
| Italian    | `italian`    | `.italian`    |

## Using Voices and Languages

### String Identifiers

You can use string identifiers directly:

```swift theme={null}
let result = try await tts.generate(
    text: "こんにちは世界",
    voice: "ono-anna",
    language: "japanese"
)
```

### Typed Enums (Recommended)

For type safety, use the `Qwen3Speaker` and `Qwen3Language` enums:

```swift theme={null}
import TTSKit

let result = try await tts.generate(
    text: "こんにちは世界",
    speaker: .onoAnna,
    language: .japanese
)
```

### Default Voice and Language

If not specified, TTSKit uses the model's defaults:

```swift theme={null}
// Uses default voice (ryan) and language (english)
let result = try await tts.generate(text: "Hello")
```

The defaults are:

* **Voice:** `ryan`
* **Language:** `english`

## Voice Selection Examples

### English

```swift theme={null}
// Multiple English voices
let ryan = try await tts.generate(text: "Hello from Ryan", speaker: .ryan)
let aiden = try await tts.generate(text: "Hello from Aiden", speaker: .aiden)
let eric = try await tts.generate(text: "Hello from Eric", speaker: .eric)
let dylan = try await tts.generate(text: "Hello from Dylan", speaker: .dylan)
let serena = try await tts.generate(text: "Hello from Serena", speaker: .serena)
let vivian = try await tts.generate(text: "Hello from Vivian", speaker: .vivian)
```

### Japanese

```swift theme={null}
let result = try await tts.generate(
    text: "こんにちは、世界。今日はいい天気ですね。",
    speaker: .onoAnna,
    language: .japanese
)
```

### Chinese

```swift theme={null}
let result = try await tts.generate(
    text: "你好，世界。今天天气很好。",
    speaker: .uncleFu,
    language: .chinese
)
```

### Korean

```swift theme={null}
let result = try await tts.generate(
    text: "안녕하세요, 세계. 오늘 날씨가 좋네요.",
    speaker: .sohee,
    language: .korean
)
```

### French

```swift theme={null}
let result = try await tts.generate(
    text: "Bonjour le monde. Il fait beau aujourd'hui.",
    speaker: .serena,
    language: .french
)
```

### German

```swift theme={null}
let result = try await tts.generate(
    text: "Hallo Welt. Heute ist schönes Wetter.",
    speaker: .eric,
    language: .german
)
```

### Spanish

```swift theme={null}
let result = try await tts.generate(
    text: "Hola mundo. Hace buen tiempo hoy.",
    speaker: .vivian,
    language: .spanish
)
```

### Portuguese

```swift theme={null}
let result = try await tts.generate(
    text: "Olá mundo. Está um bom tempo hoje.",
    speaker: .dylan,
    language: .portuguese
)
```

### Russian

```swift theme={null}
let result = try await tts.generate(
    text: "Привет мир. Сегодня хорошая погода.",
    speaker: .aiden,
    language: .russian
)
```

### Italian

```swift theme={null}
let result = try await tts.generate(
    text: "Ciao mondo. Oggi è una bella giornata.",
    speaker: .serena,
    language: .italian
)
```

## Voice and Language Matching

<Info>
  All voices work with all languages, but some voices may sound more natural with certain languages based on the training data.
</Info>

For the best results:

* **English:** All voices work well
* **Chinese:** `uncleFu` is recommended
* **Japanese:** `onoAnna` is recommended
* **Korean:** `sohee` is recommended
* **Other languages:** Experiment with different voices

## Prompt Cache by Voice/Language

TTSKit caches the prompt prefix separately for each voice/language combination:

```swift theme={null}
// First call builds cache for (ryan, english)
let result1 = try await tts.generate(text: "Hello", speaker: .ryan, language: .english)

// Second call reuses cache (fast)
let result2 = try await tts.generate(text: "World", speaker: .ryan, language: .english)

// Different voice builds new cache
let result3 = try await tts.generate(text: "Hello", speaker: .aiden, language: .english)

// Different language builds new cache
let result4 = try await tts.generate(text: "こんにちは", speaker: .ryan, language: .japanese)
```

The cache eliminates \~90% of prefill cost on subsequent calls with the same voice/language.

## Qwen3Speaker Enum

The `Qwen3Speaker` enum provides type-safe voice selection:

```swift theme={null}
public enum Qwen3Speaker: String, CaseIterable, Sendable {
    case ryan       = "ryan"
    case aiden      = "aiden"
    case onoAnna    = "ono-anna"
    case sohee      = "sohee"
    case eric       = "eric"
    case dylan      = "dylan"
    case serena     = "serena"
    case vivian     = "vivian"
    case uncleFu    = "uncle-fu"
}
```

## Qwen3Language Enum

The `Qwen3Language` enum provides type-safe language selection:

```swift theme={null}
public enum Qwen3Language: String, CaseIterable, Sendable {
    case english    = "english"
    case chinese    = "chinese"
    case japanese   = "japanese"
    case korean     = "korean"
    case german     = "german"
    case french     = "french"
    case russian    = "russian"
    case portuguese = "portuguese"
    case spanish    = "spanish"
    case italian    = "italian"
}
```

## Next Steps

<CardGroup cols={2}>
  <Card title="Generation" icon="waveform" href="/ttskit/generation">
    Learn about generation options and chunking
  </Card>

  <Card title="Configuration" icon="gear" href="/ttskit/configuration">
    Configure compute units and model variants
  </Card>
</CardGroup>
