8 releases

0.3.1 Dec 29, 2025
0.3.0 Dec 29, 2025
0.2.1 Apr 30, 2025
0.1.5 Jul 2, 2024
0.1.4 Jun 20, 2024

#215 in Audio

MIT license

105KB
2.5K SLoC

Natural TTS Rust

Linux Windows macOS

Natural TTS (natural-tts) is a rust crate for easily implementing Text-To-Speech into your rust programs.

To Do:

  • Add support for Piper TTS.
  • Remove all pyo3 usage.

Available TTS Engines / AIs:

Parler TTS
Google Gtts
TTS-RS
MSEdge TTS
MetaVoice TTS
Coqui TTS

Example of saying something using Gtts but initializing every model.

use std::error::Error;
use crate::{*, models::{gtts::GttsModel, tts_rs::TtsModel, parler::ParlerModel, msedge::MSEdgeModel, meta::MetaModel}};

fn main() -> Result<(), Box<dyn Error>>{
    // Create the NaturalTts using the Builder pattern
    let mut natural = NaturalTtsBuilder::default()
        .default_model(Model::Gtts)
        .gtts_model(GttsModel::default())
        .parler_model(ParlerModel::default())
        .msedge_model(MSEdgeModel::default())
        .meta_model(MetaModel::default())
        .tts_model(TtsModel::default())
        .build()?;

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));    

    // Get the rodio sink from natural tts
    let sink = natural.get_rodio_sink()?.0;

    // Play the audio until it finishes
    sink.sleep_until_end();

    Ok(())
}

Example of saying something using Meta Voice.

use std::error::Error;
use natural_tts::{*, models::meta::MetaModel};

fn main() -> Result<(), Box<dyn Error>>{
    // Create the NaturalTts struct using the builder pattern.
    let mut natural = NaturalTtsBuilder::default()
        .meta_model(MetaModel::default())
        .default_model(Model::Meta)
        .build()?;

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())
}

Example of saying something using Parler.

use std::error::Error;
use natural_tts::{*, models::parler::ParlerModel};

fn main() -> Result<(), Box<dyn Error>>{
    // Create the NaturalTts using the Builder pattern
    let mut natural = NaturalTtsBuilder::default()
        .parler_model(ParlerModel::default())
        .default_model(Model::Parler)
        .build()?;

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())    
}

Example of saying something using Gtts.

use std::error::Error;
use natural_tts::{*, models::gtts::GttsModel};

fn main() -> Result<(), Box<dyn Error>>{
    // Create the NaturalTts struct using the builder pattern.
    let mut natural = NaturalTtsBuilder::default()
        .gtts_model(GttsModel::default())
        .default_model(Model::Gtts)
        .build()?;

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())
}

Example of saying something using MSEdge.

use std::error::Error;
use natural_tts::{*, models::msedge::MSEdgeModel};

fn main() -> Result<(), Box<dyn Error>>{
    // Create the NaturalTts struct using the builder pattern.
    let mut natural = NaturalTtsBuilder::default()
        .msedge_model(MSEdgeModel::default())
        .default_model(Model::MSEdge)
        .build()?;

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())    
}

Example of saying something using TTS.

use std::error::Error;
use natural_tts::{*, models::parler::TtsModel};

fn main() -> Result<(), Box<dyn Error>>{

    // Create the NaturalTts struct using the builder pattern.
    let mut natural = NaturalTtsBuilder::default()
        .tts_model(TtsModel::default())
        .default_model(Model::TTS)
        .build()?;


    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())    
}

Example of saying something using Coqui Tts.

Disclaimer : Currently only in test feature.

use std::error::Error;
use natural_tts::{*, models::parler::CoquiModel};

fn main() -> Result<(), Box<dyn Error>>{

    // Create the NaturalTts struct using the builder pattern.
    let mut natural = NaturalTtsBuilder::default()
        .coqui_model(CoquiModel::default())
        .default_model(Model::Coqui)
        .build().unwrap();

    // Start producing an output using the default_model.
    let _ = natural.start("Hello, World!".to_string(), &PathBuf::from("output.wav"));

    // Play the audio until it finishes
    natural.sleep_until_end();
    Ok(())
}

Contributing.

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Dependencies

~2–47MB
~718K SLoC