Experimental SSML

Write the dialogue.
Melo performs it.

One request can alternate loaded voices and languages, direct the delivery of each line, add exact pauses, and return one finished audio file or stream.

Melo TTS mascot
Two accents, one request

Studio readiness

English British + American
0:00 / 0:00
British voice

Good morning. Is the speech service ready for today's demonstration?

American voice

Ready and listening. I warmed every language model before you arrived.

British voice

Every model? That sounds rather ambitious.

American voice

Perhaps. But nobody enjoys waiting for the first sentence.

The complete script

Dialogue SSML

<speak>
  <voice name="EN-BR">
    <prosody speed="0.96" pitch="+0.5st">
      Good morning. Is the speech service ready for today's demonstration?
    </prosody>
  </voice>
  <break time="180ms"/>
  <voice name="EN-US">
    <prosody speed="0.92" pitch="-1st">
      Ready and listening. I warmed every language model before you arrived.
    </prosody>
  </voice>
  <break time="180ms"/>
  <voice name="EN-BR">
    <prosody tempo="1.04" pitch="+1st">
      Every model? That sounds rather ambitious.
    </prosody>
  </voice>
  <break time="180ms"/>
  <voice name="EN-US">
    <prosody speed="0.9" volume="0.96">
      Perhaps. But nobody enjoys waiting for the first sentence.
    </prosody>
  </voice>
</speak>
Direct the performance

Choose the voice, language, and delivery

<voice> changes the performer

Select any speaker from a loaded model. Melo routes that segment through the matching language model automatically, which makes multilingual dialogue reliable.

<speak>
  <voice name="EN-Newest">Hello!</voice>
  <voice name="ES">¡Hola!</voice>
  <voice name="FR">Bonjour !</voice>
</speak>

<prosody> directs a segment

Combine native model speed with post-synthesis pitch, tempo, and volume controls. Nested controls inherit, so each turn only needs the direction that changes.

<speak>
  Calm and neutral.
  <prosody speed="0.9" pitch="-1st">
    Slower and lower.
  </prosody>
  <prosody tempo="1.1" volume="0.85">
    Quicker and quieter.
  </prosody>
</speak>

<break>, <sub>, and <say-as>

Control exact pauses, replace labels with spoken text, spell characters, and expand validated numbers or English ordinals without preprocessing the script.

<speak>
  Welcome to <sub alias="Hangry Labs">H L</sub>.
  <break time="400ms"/>
  Build <say-as interpret-as="number">314</say-as>
  exports <say-as interpret-as="characters">MP3</say-as>.
</speak>
Native API

Generate your own

curl -X POST "http://localhost:8888/tts/generate" \
  -H "Content-Type: application/json" \
  -d '{"input_type":"ssml","text":"<speak><voice name=\"EN-BR\">Good morning.</voice><break time=\"200ms\"/><voice name=\"EN-US\"><prosody speed=\"0.9\" pitch=\"-1st\">Hello there.</prosody></voice></speak>","language":"EN","speaker_id":"EN-BR","format":"mp3"}' \
  -o dialogue.mp3

SSML is explicit and experimental. Adjacent turns use a compact 100 ms handoff; add <break> to choose the complete pause, including 0ms for no gap. Plain text remains the default, and the OpenAI-compatible endpoint accepts plain text only.