---
title: "Local TTS | Micdrop"
description: "The four local text to speech engines, what each one asks for, and which to pick for the language of your call."
url: "https://micdrop.dev/docs/ai-integration/local-models/text-to-speech"
---

*   [Getting Started](/docs/getting-started)
*   [Client (Browser)](/docs/client)
    
    *   [Installation](/docs/client/installation)
    *   [React Hooks](/docs/client/react-hooks)
    *   [Start/Stop Call](/docs/client/start-stop-call)
    *   [Pause/Resume Call](/docs/client/pause-resume-call)
    *   [Mute/Unmute Call](/docs/client/mute-unmute-call)
    *   [Call State](/docs/client/call-state)
    *   [Display Conversation Messages](/docs/client/display-conversation-messages)
    *   [Handling Tool Calls](/docs/client/handling-tool-calls)
    *   [Device Management](/docs/client/devices-management)
    *   [Voice Activity Detection (VAD)](/docs/client/vad)
    *   [Turn Detection](/docs/client/turn-detection)
    *   [Reducing Latency](/docs/client/latency)
    *   [Error Handling](/docs/client/error-handling)
    *   Utility Classes
        
        *   [Mic](/docs/client/utility-classes/mic)
        *   [MicdropClient](/docs/client/utility-classes/micdrop-client)
        *   [MicRecorder](/docs/client/utility-classes/mic-recorder)
        *   [Speaker](/docs/client/utility-classes/speaker)
        
    
*   [Client (React Native)](/docs/react-native)
    
    *   [Installation](/docs/react-native/installation)
    *   [Hooks and Call State](/docs/react-native/hooks)
    *   [Audio Output and Devices](/docs/react-native/audio-output)
    *   [Voice Activity Detection (VAD)](/docs/react-native/vad)
    *   [Turn Detection](/docs/react-native/turn-detection)
    *   [Using Another Audio Library](/docs/react-native/custom-audio)
    
*   [Server (Node.js)](/docs/server)
    
    *   [Installation](/docs/server/installation)
    *   [With Fastify](/docs/server/with-fastify)
    *   [With NestJS](/docs/server/with-nestjs)
    *   [Auth and Parameters](/docs/server/auth-and-parameters)
    *   [First Message](/docs/server/first-message)
    *   [Dictation and Text-Only Calls](/docs/server/dictation)
    *   [Partial Messages](/docs/server/partial-messages)
    *   [Save Messages](/docs/server/save-messages)
    *   [Resume a Conversation](/docs/server/resume-conversation)
    *   [Recording Audio](/docs/server/recording-audio)
    *   [Error Handling](/docs/server/error-handling)
    *   [Tools](/docs/server/tools)
    *   [Extract Value from Answer](/docs/server/extract)
    *   [Auto End Call](/docs/server/auto-end-call)
    *   [Semantic Turn Detection](/docs/server/semantic-turn-detection)
    *   [Noise Filtering](/docs/server/noise-filtering)
    *   [Micdrop Protocol](/docs/server/protocol)
    
*   [AI Integrations](/docs/ai-integration)
    
    *   Provided Integrations
        
        *   [AI SDK](/docs/ai-integration/provided-integrations/ai-sdk)
        *   [Cartesia](/docs/ai-integration/provided-integrations/cartesia)
        *   [ElevenLabs](/docs/ai-integration/provided-integrations/elevenlabs)
        *   [Gladia](/docs/ai-integration/provided-integrations/gladia)
        *   [Gradium](/docs/ai-integration/provided-integrations/gradium)
        *   [Kokoro](/docs/ai-integration/provided-integrations/kokoro)
        *   [Mistral](/docs/ai-integration/provided-integrations/mistral)
        *   [OpenAI](/docs/ai-integration/provided-integrations/openai)
        *   [Piper](/docs/ai-integration/provided-integrations/piper)
        *   [Pocket TTS](/docs/ai-integration/provided-integrations/pocket-tts)
        *   [Qwen3-TTS](/docs/ai-integration/provided-integrations/qwen-tts)
        *   [Whisper](/docs/ai-integration/provided-integrations/whisper)
        
    *   Custom Integrations
        
        *   [Agent (LLM)](/docs/ai-integration/custom-integrations/custom-agent)
        *   [Speech-to-Text (STT)](/docs/ai-integration/custom-integrations/custom-stt)
        *   [Text-to-Speech (TTS)](/docs/ai-integration/custom-integrations/custom-tts)
        
    *   Fallback Strategies
        
        *   [FallbackAgent](/docs/ai-integration/fallback-strategies/agent-fallback)
        *   [FallbackSTT](/docs/ai-integration/fallback-strategies/stt-fallback)
        *   [FallbackTTS](/docs/ai-integration/fallback-strategies/tts-fallback)
        
    *   [Local Models](/docs/ai-integration/local-models)
        
        *   [Local LLM](/docs/ai-integration/local-models/agent)
        *   [Local STT](/docs/ai-integration/local-models/speech-to-text)
        *   [Local TTS](/docs/ai-integration/local-models/text-to-speech)
        *   [Latency and Memory](/docs/ai-integration/local-models/performance)
        *   [Explorations](/docs/ai-integration/local-models/explorations)
            
            *   [MiniCPM5-2B](/docs/ai-integration/local-models/explorations/minicpm)
            *   [Mistral 7B](/docs/ai-integration/local-models/explorations/mistral-7b)
            *   [Voxtral Mini 3B](/docs/ai-integration/local-models/explorations/voxtral-stt)
            *   [Voxtral TTS 4B](/docs/ai-integration/local-models/explorations/voxtral-tts)
            *   [AuK and AuK-Flash](/docs/ai-integration/local-models/explorations/auk)
            
        
    *   [IA Vocale Souveraine 🇫🇷🇪🇺](/docs/ai-integration/sovereign-voice-ai)
    
*   [Migration](/docs/migration)
    
    *   [Upgrade to v3](/docs/migration/v3)
    

[Micdrop](/) › [Documentation](/docs/getting-started) › [AI Integrations](/docs/ai-integration) › [Local Models](/docs/ai-integration/local-models)

# Local TTS

Four engines generate speech locally. Choose by the language of the call first, then by what you can install next to your app.

Engine

Runs

Languages

Voice comes from

First audio

[Piper](/docs/ai-integration/provided-integrations/piper)

In a subprocess

Around forty

A voice file downloaded next to the app

~390 ms

[Pocket TTS](/docs/ai-integration/provided-integrations/pocket-tts)

In the Node process

English

A bundled voice, or a sample to clone

250 to 430 ms

[Kokoro](/docs/ai-integration/provided-integrations/kokoro)

In the Node process

English

A bundled voice

900 to 1300 ms

[Qwen3-TTS](/docs/ai-integration/provided-integrations/qwen-tts)

On an mlx-audio server

Ten

Nine speakers, a description, a sample

~400 ms

## In English

Pocket TTS and Kokoro only need an npm install. Pocket TTS starts speaking sooner and can clone a voice from a few seconds of audio, but uses 600 MB while it generates. Kokoro needs the least setup of the four, but starts about a second later, which the user notices. Qwen3-TTS sounds better than both, but it needs a server and a GPU.

## In the other languages

Piper covers around forty languages, with voice files of a few dozen megabytes, and generates much faster than real time on any CPU. Its voices are small VITS models and sound less natural than the other engines.

Qwen3-TTS covers ten languages, including French, German, Spanish, Italian and Portuguese. It sounds close to a hosted voice. It accepts an instruction such as `"speak slowly and warmly"` that changes how a sentence is read, and it can design or clone a voice. It needs an mlx-audio server next to your app, a GPU, and 2.5 GB of memory once the checkpoint is loaded.

On a MacBook Pro M2 with the default checkpoint, the first audio of a sentence arrives after about 400 ms. The rest takes about 0.75 seconds of computation per second of speech, so playback never waits for generation. Whisper transcribes its English and French test sentences back word for word, apart from an occasional mispronounced word.

The voice and the agent must use the same language. An English voice reading French text uses English pronunciation and is hard to understand. Name the language of the voice in the system prompt.

## Why Kokoro and Pocket TTS only speak English

Kokoro and Pocket TTS are limited to English by their tooling, not by their models. Kokoro includes Spanish, French, Italian, Japanese, Portuguese and Chinese voices, but `kokoro-js` converts all text to phonemes with English rules, so these voices speak other languages with an English accent. Pocket TTS has French, German, Spanish, Italian and Portuguese checkpoints, but they have no ONNX export yet, so the addon uses the English one.

## Choosing the voice

Each engine names its voices its own way:

*   [Kokoro](/docs/ai-integration/provided-integrations/kokoro) takes shorthands such as `americanFemale` or `britishFemale`, and any voice id the model ships.
*   [Piper](/docs/ai-integration/provided-integrations/piper) names its voices after their language, their speaker and their quality, such as `fr_FR-siwis-medium`, and publishes samples to listen to before downloading one.
*   [Pocket TTS](/docs/ai-integration/provided-integrations/pocket-tts) uses a bundled voice or any wav recording of someone speaking. Its license requires the consent of that person.
*   [Qwen3-TTS](/docs/ai-integration/provided-integrations/qwen-tts) has nine named speakers, `Ryan` and `Aiden` in English, and reads the ten languages with any of them. A VoiceDesign checkpoint generates a voice from a description instead, and a Base checkpoint clones one from three seconds of audio.

## What was measured and set aside

Two other voices were tested and left out, each with its own page. [Voxtral TTS 4B](/docs/ai-integration/local-models/explorations/voxtral-tts) generates slower than real time on this machine, so playback stops in the middle of sentences. [AuK and AuK-Flash](/docs/ai-integration/local-models/explorations/auk) are nine times slower than real time, even after fixing a memory issue in their inference code.

[Previous← Local STT](/docs/ai-integration/local-models/speech-to-text)[NextLatency and Memory →](/docs/ai-integration/local-models/performance)

On this page

*   [In English](#in-english)
*   [In the other languages](#in-the-other-languages)
*   [Why Kokoro and Pocket TTS only speak English](#why-kokoro-and-pocket-tts-only-speak-english)
*   [Choosing the voice](#choosing-the-voice)
*   [What was measured and set aside](#what-was-measured-and-set-aside)
