csharp-generar-voz-tts

Cómo Implementar Text-to-Speech (TTS) en C#

Text-to-Speech (TTS) es una tecnología que convierte texto en discurso hablado. Es una característica útil en una variedad de aplicaciones, desde asistentes virtuales hasta herramientas de accesibilidad.

Además de que se pueden hacer muchas cosas graciosas y tontadas, como bots para Discord, para Twitch, etc 😅

Hacer TTS en C# es realmente sencillo. La biblioteca System.Speech.Synthesis es parte del .NET Framework y proporciona capacidades básicas de TTS. Es fácil de usar y no requiere configuraciones externas.

De hecho, es tan sencillo que la voz Helena de Microsoft, es una de las más empleadas en TTS. La reconoceréis en seguida cuando la oigáis en vuestro programa, porque se usa muchisimo.

Implementación de TTS con System.Speech.Synthesis

System.Speech.Synthesis está incluido en .NET Framework, por lo que no es necesario instalar ningún paquete adicional.

Vamos a ver un ejemplo simple de cómo usar System.Speech.Synthesis para convertir texto a voz:

using System;
using System.Speech.Synthesis;

class Program
{
    static void Main(string[] args)
    {
        // Crear una instancia del sintetizador
        SpeechSynthesizer synthesizer = new SpeechSynthesizer();

        // Configurar el sintetizador (opcional)
        synthesizer.Volume = 100;  // 0...100
        synthesizer.Rate = 0;      // -10...10

        // Convertir texto a voz
        synthesizer.Speak("Hola, bienvenido al tutorial de Text-to-Speech en C#");

        // O, para hablar asíncronamente
        // synthesizer.SpeakAsync("Hola, bienvenido al tutorial de Text-to-Speech en C#");
    }
}

¡Así de sencillo! Literalmente cuatro líneas y tenéis un TTS funcionando.

Seleccionar una voz

Es posible configurar diferentes aspectos del sintetizador. Tampoco demasiados, no hay mucho con lo que “jugar”.

Pero, como hemos visto, si es posible seleccionar el volumen y la velocidad, así como seleccionar una voz específica:

using System.Speech.Synthesis;

class Program
{
    static void Main(string[] args)
    {
        SpeechSynthesizer synthesizer = new SpeechSynthesizer();

        // Listar voces disponibles
        foreach (InstalledVoice voice in synthesizer.GetInstalledVoices())
        {
            VoiceInfo info = voice.VoiceInfo;
            Console.WriteLine("Voice Name: " + info.Name);
        }

        // Seleccionar una voz específica
		synthesizer.SelectVoice("Microsoft Helena Desktop");

        synthesizer.Speak("Esta es una prueba con una voz específica.");
    }
}