**Octave supports continuation across generations.** It carries context from earlier output into the next generation,
keeping long-form speech coherent across multiple utterances so delivery stays natural, consistent, and emotionally
continuous.

## Ways to continue

### 1. **Chain utterances in one request**

- Put multiple items in the [`utterances`](https://dev.hume.ai/reference/text-to-speech-tts/synthesize-json-streaming#request.body.utterances) array.
- Each utterance continues only from the immediate previous utterance in the same request.

### 2. **Continue from a previous call**

Pass context in the [`context`](https://dev.hume.ai/reference/text-to-speech-tts/synthesize-json-streaming#request.body.context) field using one of:

- `generation_id`: continue from the most recent generation you specify.
- **Context utterances**: supply reference utterances that guide delivery.

## Aspects of continuation

### Narrative coherence

For long-form audio such as audiobooks, continuation keeps the narrative cohesive across utterances. It prevents abrupt
shifts in delivery, pacing, and emotion, carries energy and emotional progression forward, and lets each segment build
naturally on the last for a more authentic listen.

In the examples below, the same line is delivered with different emotions based on the context set by the preceding
utterance.

**With positive context** ( _excited interpretation_)

```bash
curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "version": "1",
    "utterances": [\
      {\
        "text": "Our proposal has been accepted with full funding for the next three years!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "I can't believe it!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'
```

**With negative context** ( _disappointed interpretation_)

```bash
curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "version": "1",
    "utterances": [\
      {\
        "text": "After all our preparation... They've decided to cancel the entire project...",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "I can't believe it!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'
```

### Linguistic context

Continuation also provides linguistic context for proper pronunciation, particularly with homographs—words that are
spelled the same but pronounced differently based on meaning. For example, Octave can correctly differentiate between:

- “Take a **bow**.” (`/bau/`) vs. “Take a **bow** and arrow.” (`/bō/`)
- “Play the **bass** guitar.” (`/bās/`) vs. “Go **bass** fishing.” (`/bas/`)
- “I **read** the book yesterday.” (`/red/`) vs. “I will **read** the book tomorrow.” (`/rēd/`)

Try these examples to see how Octave intelligently distinguishes between different pronunciations of the word “bow”
based on contextual understanding:

**With `/bau/` pronunciation**

```bash
curl https://api.hume.ai/v0/tts/stream/json \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "What a fantastic performance!",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "Now take a bow.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'
```

**With `/bō/` pronunciation**

```bash
curl https://api.hume.ai/v0/tts/stream/json \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "First take a quiver of arrows.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      },\
      {\
        "text": "Now take a bow.",\
        "voice": {\
          "name": "Ava Song",\
          "provider": "HUME_AI"\
        }\
      }\
    ]
  }'
```

### Consistent voice

When continuing from an **utterance**, Octave intelligently handles voice consistency:

- Octave automatically continues using the same voice from the previous utterance.
- You only need to specify a voice when you want to change from the currently established one.

Below are sample requests which show how you can continue with the same voice:

For more information on specifying a voice in your request, see our [voices guide](https://dev.hume.ai/docs/text-to-speech-tts/voices).

**Multiple utterances in a single request**

```bash
curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "Gather around everyone! May I have your attention? Today we'll be learning about supermassive black holes at the center of galaxies.",\
        "description": "projecting in a large museum auditorium, enthusiastic, joyful, ostentatious",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      },\
      {\
        "text": "I've arranged for the museum guide to explain their special exhibit on black holes! I think you'll find it really helpful for the concepts we've been covering in class!",\
        "description": "pedagogical, enthusiastic, hinting",\
        "speed": 1.3\
      }\
    ]
  }'
```

**Continuing from previous generation using context**

```bash
# First request - capture the generation_id
GENERATION_ID=$(curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "Gather around everyone! May I have your attention? Today we'll be learning about supermassive black holes at the center of galaxies.",\
        "description": "projecting in a large museum auditorium, enthusiastic, joyful, ostentatious",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      }\
    ]
  }' | jq -r '.generations[0].generation_id')

# Second request using the generation_id from the first request
curl "https://api.hume.ai/v0/tts/stream/json" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "utterances": [\
      {\
        "text": "I've arranged for the museum guide to explain their special exhibit on black holes. I think you'll find it really helpful for the concepts we've been covering in class.",\
        "description": "pedagogical, enthusiastic, hinting",\
        "voice": {\
          "name": "Donovan Sinclair",\
          "provider": "HUME_AI"\
        },\
        "speed": 1.3\
      },\
    ],
    "context": {
      "generation_id": "'$GENERATION_ID'"
    }
  }'
```

**Changing voices mid-conversation**

This intelligent handling of voice consistency saves development effort and ensures a seamless listening experience,
making it easier to create dynamic, multi-character narratives without redundant voice specifications.

## Notes and constraints

- Continuation is scoped to the **immediate preceding utterance** only. It does not skip back to earlier utterances or generations.
- Only items in utterances are synthesized. Items in context are reference-only.
- Context utterances add latency because Octave must first generate the speech tokens it will continue from.
- Octave supports **multi-speaker continuation**. You can keep the current voice or continue from speech generated with a different voice.
- Speech generated from Octave 1 **cannot** be continued from speech generated from Octave 2 (preview).
