11. Ajustes de voz

 https://docs.google.com/presentation/d/e/2PACX-1vQGPsU6JpeLrc9F5uKKMQvpDU5YXaCmy5fTC4-2VOQtCJZKJFu8aTOrHoYcrNHSsLG0Ptti4pk-7ur2/pub?start=false&loop=false&delayms=3000

 11. Ajustes de Voz - Personalizando la Voz de tu Asistente

python -m

Explicación para principiantes:
Ahora que tu asistente puede hablar, vamos a personalizar cómo suena. Es como elegir la voz de un actor de doblaje para tu película: puedes cambiar el tono, la velocidad y el acento. ¡Hagamos que tu asistente tenga una voz única y agradable!

Objetivo de esta lección:

  • Descubrir qué voces tienes disponibles en tu sistema

  • Cambiar entre diferentes voces (hombre/mujer, idiomas)

  • Ajustar la velocidad del habla

  • Modificar el volumen

  • Crear un perfil de voz personalizado

Analogía:
Piensa en la voz de tu asistente como un ecualizador de audio. Tú puedes:

  • Cambiar la voz = Seleccionar un instrumento (piano, guitarra, violín)

  • Ajustar velocidad = Controlar el tempo de la música

  • Modificar volumen = Subir o bajar el volumen general


🧪 Imagen 1 – Síntesis básica

python
import pyttsx3

engine = pyttsx3.init()
engine.say("Hola como estas?")
engine.runAndWait()

📝 Explicación:

  • pyttsx3.init(): Inicializa el motor de texto a voz.

  • engine.say(): Añade el texto a la cola de reproducción.

  • engine.runAndWait(): Reproduce los mensajes en cola y espera a que terminen antes de continuar.


🧪 Imagen 2 – Cambiar la voz

python
import pyttsx3

engine = pyttsx3.init()

voces = engine.getProperty('voices')
engine.setProperty('voice', voces[2].id)

engine.say("Hola como estas?")
engine.runAndWait()

📝 Explicación:

  • engine.getProperty('voices'): Obtiene la lista de voces disponibles en el sistema.

  • engine.setProperty('voice', voces[2].id): Selecciona la voz en el índice 2 (depende del sistema, puede ser masculina, femenina, etc.).

  • Cada voz tiene un identificador único (.id) que se usa para asignarla.


🧪 Imagen 3 – Ajustar la velocidad (rate)

python
import pyttsx3

engine = pyttsx3.init()

voces = engine.getProperty('voices')
engine.setProperty('voice', voces[2].id)

rate = engine.getProperty('rate')
engine.setProperty('rate', 190)

engine.say("Hola como estas?")
engine.runAndWait()

📝 Explicación:

  • engine.getProperty('rate'): Obtiene la velocidad actual del habla (palabras por minuto).

  • engine.setProperty('rate', 190): Cambia la velocidad a 190 (por defecto suele ser 200).

  • Un valor más alto = más rápido, más bajo = más lento.


🧪 Imagen 4 – Usar el rate actual sin modificarlo

python
import pyttsx3

engine = pyttsx3.init()

voces = engine.getProperty('voices')
engine.setProperty('voice', voces[2].id)

rate = engine.getProperty('rate')
engine.setProperty('rate', rate)

engine.say("Hola como estas?")
engine.runAndWait()

📝 Explicación:

  • Aquí se obtiene el rate actual y se asigna el mismo valor. Esto no cambia nada, pero puede ser útil si más adelante se quiere modificar o restaurar el valor original.

  • Es una forma de mantener el código preparado para cambios sin perder el valor por defecto.


🧠 Resumen de propiedades comunes

PropiedadDescripciónEjemplo
rateVelocidad del habla (palabras por minuto)engine.setProperty('rate', 150)
volumeVolumen (0.0 a 1.0)engine.setProperty('volume', 0.8)
voiceVoz a usarengine.setProperty('voice', voces[0].id)

**********************

🔍 Paso 1: Descubrir las Voces Disponibles

Código de exploración:

python

import pyttsx3


# Inicializar el motor

engine = pyttsx3.init()


# Obtener todas las voces disponibles

print("🔍 EXPLORANDO VOCES DISPONIBLES EN TU SISTEMA")

print("=" * 50)


voces = engine.getProperty('voices')


for i, voz in enumerate(voces):

    print(f"\n🎤 VOZ #{i}:")

    print(f"   Nombre: {voz.name}")

    print(f"   ID: {voz.id}")

    print(f"   Idioma: {voz.languages[0] if voz.languages else 'No especificado'}")

    print(f"   Género: {'Femenina' if 'female' in voz.name.lower() else 'Masculina' if 'male' in voz.name.lower() else 'No especificado'}")

    

    # Probar la voz

    print(f"   Probando: ", end="")

    engine.setProperty('voice', voz.id)

    engine.say(f"Soy la voz número {i}")

    engine.runAndWait()


print("\n" + "=" * 50)

print(f"✅ Total de voces encontradas: {len(voces)}")

Ejemplo de salida típica en Windows:

text

🎤 VOZ #0:

   Nombre: Microsoft David Desktop

   ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0

   Idioma: en_US

   Género: Masculina


🎤 VOZ #1:

   Nombre: Microsoft Zira Desktop

   ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0

   Idioma: en_US

   Género: Femenina


🎤 VOZ #2:

   Nombre: Microsoft Helena Desktop

   ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ES-ES_HELENA_11.0

   Idioma: es_ES

   Género: Femenina


🎯 Paso 2: Cambiar la Voz del Asistente

Método básico:

python

import pyttsx3


engine = pyttsx3.init()


# Obtener lista de voces

voces = engine.getProperty('voices')


# USAR VOZ ESPECÍFICA POR ÍNDICE

print("🔊 Probando diferentes voces:")


# Voz 0 (generalmente inglés masculino)

engine.setProperty('voice', voces[0].id)

engine.say("Hello, I am David from the United States")

engine.runAndWait()


# Voz 1 (generalmente inglés femenino)

engine.setProperty('voice', voces[1].id)

engine.say("Hi there, I am Zira, also from the United States")

engine.runAndWait()


# Voz 2 (si tienes español instalado)

if len(voces) > 2:

    engine.setProperty('voice', voces[2].id)

    engine.say("Hola, soy Helena de España")

    engine.runAndWait()

Método inteligente (búsqueda por idioma):

python

def buscar_voz_por_idioma(idioma_buscado='es'):

    """Busca una voz específica por idioma"""

    engine = pyttsx3.init()

    voces = engine.getProperty('voices')

    

    print(f"🔍 Buscando voces en idioma: {idioma_buscado}")

    

    voces_encontradas = []

    

    for i, voz in enumerate(voces):

        # Algunas voces no tienen información de idioma

        if voz.languages:

            for lang in voz.languages:

                if idioma_buscado in lang.lower():

                    voces_encontradas.append((i, voz))

                    print(f"   ✅ Voz #{i}: {voz.name} - Idioma: {lang}")

    

    if not voces_encontradas:

        print(f"❌ No se encontraron voces para '{idioma_buscado}'")

        print("💡 Instala más voces en Configuración de Windows → Tiempo e idioma → Voz")

        return None

    

    return voces_encontradas


# Buscar voces en español

voces_espanol = buscar_voz_por_idioma('es')


# Usar la primera voz en español encontrada

if voces_espanol:

    engine = pyttsx3.init()

    indice, voz = voces_espanol[0]

    engine.setProperty('voice', voz.id)

    engine.say("¡Perfecto! Ahora hablo en español")

    engine.runAndWait()


⚡ Paso 3: Ajustar la Velocidad (Rate)

¿Qué es el "rate"?

Es la velocidad de habla medida en palabras por minuto. Valores típicos:

  • 100-130 = Muy lento (como explicando a un niño)

  • 150-180 = Velocidad normal de conversación

  • 200-250 = Rápido (como un presentador de noticias)

  • 300+ = Muy rápido (difícil de entender)

Código para ajustar velocidad:

python

import pyttsx3

import time


engine = pyttsx3.init()


# Obtener velocidad actual

velocidad_actual = engine.getProperty('rate')

print(f"🚀 Velocidad actual: {velocidad_actual} palabras por minuto")


# Probar diferentes velocidades

texto_prueba = "Este es un texto de prueba para escuchar cómo cambia la velocidad del habla"


print("\n🔊 Probando diferentes velocidades:")

print("-" * 40)


velocidades = [100, 150, 200, 250, 300]


for velocidad in velocidades:

    engine.setProperty('rate', velocidad)

    print(f"\n🎤 Velocidad {velocidad}: ", end="")

    engine.say(f"Hablando a {velocidad} palabras por minuto")

    engine.runAndWait()

    time.sleep(0.5)  # Pequeña pausa entre pruebas


# Restaurar velocidad normal

engine.setProperty('rate', 180)

print("\n✅ Velocidad restaurada a normal (180)")

Visualización de velocidades:

text

VELOCIDAD LENTA (100):

E s t e   e s   u n   t e x t o   d e   p r u e b a...

└─┴─┴─┘ └─┴─┘ └─┴─┘ (pausas largas entre palabras)


VELOCIDAD NORMAL (180):

Este es un texto de prueba...

└──┴──┴──┘ (pausas naturales)


VELOCIDAD RÁPIDA (250):

Esteesuntextodeprueba...

└──────────────┘ (pocas pausas)


🔊 Paso 4: Ajustar el Volumen

Código para control de volumen:

python

import pyttsx3


engine = pyttsx3.init()


# Obtener volumen actual (0.0 a 1.0)

volumen_actual = engine.getProperty('volume')

print(f"🔊 Volumen actual: {volumen_actual * 100:.0f}%")


# Probar diferentes niveles de volumen

texto_prueba = "Este es un mensaje de prueba para escuchar los diferentes niveles de volumen"


print("\n🎚️ Probando diferentes niveles de volumen:")

print("-" * 40)


niveles_volumen = [0.2, 0.5, 0.8, 1.0]


for nivel in niveles_volumen:

    engine.setProperty('volume', nivel)

    porcentaje = nivel * 100

    print(f"\n🔊 Volumen {porcentaje:.0f}%: ", end="")

    engine.say(f"Volumen al {porcentaje:.0f} por ciento")

    engine.runAndWait()


# Configuración recomendada

engine.setProperty('volume', 0.9)  # 90% - alto pero sin distorsión

print("\n✅ Volumen configurado a 90% (recomendado)")


🎨 Paso 5: Crear Perfiles de Voz Personalizados

Clase para gestionar perfiles de voz:

python

import pyttsx3


class PerfilVoz:

    """Clase para crear y gestionar perfiles de voz personalizados"""

    

    def __init__(self, nombre_perfil):

        self.nombre = nombre_perfil

        self.engine = pyttsx3.init()

        self.voces = self.engine.getProperty('voices')

        

        # Perfiles predefinidos

        self.perfiles = {

            'robot_lento': {'indice_voz': 0, 'velocidad': 100, 'volumen': 0.7},

            'noticias': {'indice_voz': 1, 'velocidad': 220, 'volumen': 0.9},

            'espanol_natural': {'indice_voz': 2, 'velocidad': 170, 'volumen': 0.85},

            'niño': {'indice_voz': 1, 'velocidad': 140, 'volumen': 0.8},

            'profesor': {'indice_voz': 0, 'velocidad': 130, 'volumen': 0.9}

        }

    

    def aplicar_perfil(self, nombre_perfil):

        """Aplica un perfil predefinido"""

        if nombre_perfil in self.perfiles:

            perfil = self.perfiles[nombre_perfil]

            

            # Aplicar configuración

            self.engine.setProperty('voice', self.voces[perfil['indice_voz']].id)

            self.engine.setProperty('rate', perfil['velocidad'])

            self.engine.setProperty('volume', perfil['volumen'])

            

            print(f"✅ Perfil '{nombre_perfil}' aplicado:")

            print(f"   Voz: {self.voces[perfil['indice_voz']].name}")

            print(f"   Velocidad: {perfil['velocidad']} palabras/min")

            print(f"   Volumen: {perfil['volumen'] * 100:.0f}%")

            

            return True

        else:

            print(f"❌ Perfil '{nombre_perfil}' no encontrado")

            return False

    

    def crear_perfil_personalizado(self, indice_voz, velocidad=180, volumen=0.9):

        """Crea un perfil personalizado"""

        # Validar parámetros

        if indice_voz < 0 or indice_voz >= len(self.voces):

            print(f"❌ Índice de voz inválido. Debe estar entre 0 y {len(self.voces)-1}")

            return False

        

        if velocidad < 50 or velocidad > 400:

            print("❌ Velocidad inválida. Debe estar entre 50 y 400")

            return False

        

        if volumen < 0 or volumen > 1:

            print("❌ Volumen inválido. Debe estar entre 0.0 y 1.0")

            return False

        

        # Aplicar configuración

        self.engine.setProperty('voice', self.voces[indice_voz].id)

        self.engine.setProperty('rate', velocidad)

        self.engine.setProperty('volume', volumen)

        

        print("✅ Perfil personalizado aplicado:")

        print(f"   Voz: {self.voces[indice_voz].name}")

        print(f"   Velocidad: {velocidad} palabras/min")

        print(f"   Volumen: {volumen * 100:.0f}%")

        

        return True

    

    def hablar(self, texto):

        """Hace hablar al asistente con la configuración actual"""

        print(f"🤖 [{self.nombre}]: {texto}")

        self.engine.say(texto)

        self.engine.runAndWait()


# Uso de la clase

asistente = PerfilVoz("MiAsistente")


print("=" * 50)

print("       DEMO DE PERFILES DE VOZ")

print("=" * 50)


# Probar diferentes perfiles

perfiles_a_probar = ['robot_lento', 'noticias', 'espanol_natural']


for perfil in perfiles_a_probar:

    print(f"\n🎭 Aplicando perfil: {perfil.upper()}")

    asistente.aplicar_perfil(perfil)

    asistente.hablar("Este es mi modo de hablar actual")


🎮 Paso 6: Selector Interactivo de Voz

python

"""

SELECTOR INTERACTIVO DE VOZ

Permite al usuario elegir la voz que más le guste

"""


import pyttsx3

import time


def selector_voz_interactivo():

    """Interfaz para que el usuario elija su voz favorita"""

    

    engine = pyttsx3.init()

    voces = engine.getProperty('voices')

    

    print("=" * 60)

    print("         SELECTOR DE VOZ PARA TU ASISTENTE")

    print("=" * 60)

    print("\nTe voy a presentar todas las voces disponibles.")

    print("Después podrás elegir la que más te guste.\n")

    

    # Mostrar menú de voces

    print("🎤 VOCES DISPONIBLES:")

    for i, voz in enumerate(voces):

        genero = "♀" if 'female' in voz.name.lower() else "♂" if 'male' in voz.name.lower() else "?"

        print(f"  [{i}] {genero} {voz.name}")

    

    # Probar cada voz

    print("\n🔊 PROBANDO CADA VOZ:")

    for i, voz in enumerate(voces):

        engine.setProperty('voice', voz.id)

        engine.setProperty('rate', 180)  # Velocidad normal

        engine.setProperty('volume', 0.9)  # Volumen alto

        

        print(f"\n🎤 Voz {i}: {voz.name}")

        print("   Escuchando: ", end="", flush=True)

        

        engine.say(f"Hola, soy la voz número {i}. ¿Te gusto cómo sueno?")

        engine.runAndWait()

        

        time.sleep(0.5)  # Pausa entre voces

    

    # Selección del usuario

    print("\n" + "=" * 60)

    print("🤔 ¿CUÁL VOZ TE GUSTÓ MÁS?")

    

    while True:

        try:

            seleccion = int(input(f"Elige un número del 0 al {len(voces)-1}: "))

            

            if 0 <= seleccion < len(voces):

                voz_seleccionada = voces[seleccion]

                

                # Aplicar selección

                engine.setProperty('voice', voz_seleccionada.id)

                

                print(f"\n✅ ¡Excelente elección!")

                print(f"   Has seleccionado: {voz_seleccionada.name}")

                

                # Confirmar con voz

                engine.say(f"¡Gracias por elegirme! Seré la voz de tu asistente")

                engine.runAndWait()

                

                return seleccion, voz_seleccionada

            else:

                print(f"❌ Por favor, elige un número entre 0 y {len(voces)-1}")

                

        except ValueError:

            print("❌ Por favor, ingresa un número válido")


def configurar_velocidad_preferida():

    """Permite al usuario ajustar la velocidad preferida"""

    

    engine = pyttsx3.init()

    

    print("\n" + "=" * 60)

    print("⚡ AJUSTE DE VELOCIDAD DE HABLA")

    print("=" * 60)

    

    print("\nVoy a hablar a diferentes velocidades.")

    print("Después dime qué velocidad prefieres.\n")

    

    velocidades = [

        (120, "Muy lenta"),

        (150, "Lenta"),

        (180, "Normal"),

        (210, "Rápida"),

        (240, "Muy rápida")

    ]

    

    # Probar cada velocidad

    for velocidad, descripcion in velocidades:

        engine.setProperty('rate', velocidad)

        

        print(f"\n⚡ {descripcion} ({velocidad} palabras/min): ", end="", flush=True)

        

        engine.say(f"Esta es la velocidad {descripcion.lower()}")

        engine.runAndWait()

        

        time.sleep(0.3)

    

    # Selección del usuario

    print("\n" + "=" * 60)

    

    while True:

        try:

            print("\nVelocidades disponibles:")

            for i, (velocidad, descripcion) in enumerate(velocidades):

                print(f"  [{i}] {descripcion} ({velocidad} palabras/min)")

            

            seleccion = int(input(f"\nElige la velocidad que prefieres (0-{len(velocidades)-1}): "))

            

            if 0 <= seleccion < len(velocidades):

                velocidad_seleccionada = velocidades[seleccion][0]

                

                engine.setProperty('rate', velocidad_seleccionada)

                

                print(f"\n✅ Velocidad configurada a {velocidad_seleccionada} palabras/min")

                

                engine.say(f"Velocidad configurada. ¿Así está bien?")

                engine.runAndWait()

                

                return velocidad_seleccionada

            else:

                print(f"❌ Por favor, elige un número entre 0 y {len(velocidades)-1}")

                

        except ValueError:

            print("❌ Por favor, ingresa un número válido")


# Programa principal

if __name__ == "__main__":

    print("¡Bienvenido al configurador de voz de tu asistente!")

    

    # Paso 1: Seleccionar voz

    indice_voz, voz = selector_voz_interactivo()

    

    # Paso 2: Configurar velocidad

    velocidad = configurar_velocidad_preferida()

    

    # Paso 3: Mostrar configuración final

    print("\n" + "=" * 60)

    print("         CONFIGURACIÓN FINAL GUARDADA")

    print("=" * 60)

    print(f"\n🎤 Voz seleccionada: {voz.name}")

    print(f"⚡ Velocidad: {velocidad} palabras/min")

    print(f"🔊 Volumen: 90% (recomendado)")

    

    # Código para guardar en archivo de configuración

    configuracion = {

        'indice_voz': indice_voz,

        'velocidad': velocidad,

        'volumen': 0.9

    }

    

    print("\n📁 Esta configuración se puede guardar en un archivo")

    print("   para que tu asistente siempre use estas preferencias.")


📊 Tabla de Configuraciones Recomendadas

Tipo de Asistente

Voz

Velocidad

Volumen

Uso recomendado

Asistente general

Español femenino

170-180

0.85-0.9

Uso diario, fácil de entender

Asistente infantil

Voz más aguda

140-150

0.8

Para niños, más lento y claro

Asistente profesional

Español masculino

190-200

0.9

Presentaciones, sonido formal

Asistente noticias

Voz clara y neutra

210-220

0.85

Información rápida

Asistente lento

Cualquiera

120-130

0.9

Para personas mayores o aprendizaje


🔧 Código Final Integrado con Todos los Ajustes

python

"""

ASISTENTE CON VOZ PERSONALIZABLE

Versión completa con todos los ajustes de voz

"""


import pyttsx3


class AsistenteVozPersonalizado:

    def __init__(self, nombre="Alex"):

        self.nombre = nombre

        self.engine = pyttsx3.init()

        self.voces = self.engine.getProperty('voices')

        

        # Configuración por defecto

        self.configurar_voz_default()

    

    def configurar_voz_default(self):

        """Configuración por defecto (español si está disponible)"""

        # Buscar voz en español

        for i, voz in enumerate(self.voces):

            if voz.languages and any('es' in lang.lower() for lang in voz.languages):

                self.engine.setProperty('voice', voz.id)

                print(f"✅ Voz en español encontrada: {voz.name}")

                break

        else:

            # Si no hay español, usar la primera voz disponible

            self.engine.setProperty('voice', self.voces[0].id)

            print(f"⚠️  No se encontró voz en español. Usando: {self.voces[0].name}")

        

        # Valores por defecto

        self.engine.setProperty('rate', 180)    # Velocidad normal

        self.engine.setProperty('volume', 0.9)  # Volumen alto

        

        print("✅ Asistente configurado con valores por defecto")

    

    def cambiar_voz(self, indice):

        """Cambia a una voz específica por índice"""

        if 0 <= indice < len(self.voces):

            voz = self.voces[indice]

            self.engine.setProperty('voice', voz.id)

            print(f"✅ Voz cambiada a: {voz.name}")

            return True

        else:

            print(f"❌ Índice inválido. Debe estar entre 0 y {len(self.voces)-1}")

            return False

    

    def ajustar_velocidad(self, velocidad):

        """Ajusta la velocidad del habla (50-400 palabras/min)"""

        if 50 <= velocidad <= 400:

            self.engine.setProperty('rate', velocidad)

            print(f"✅ Velocidad ajustada a: {velocidad} palabras/min")

            return True

        else:

            print("❌ Velocidad inválida. Debe estar entre 50 y 400")

            return False

    

    def ajustar_volumen(self, volumen):

        """Ajusta el volumen (0.0 a 1.0)"""

        if 0.0 <= volumen <= 1.0:

            self.engine.setProperty('volume', volumen)

            porcentaje = volumen * 100

            print(f"✅ Volumen ajustado a: {porcentaje:.0f}%")

            return True

        else:

            print("❌ Volumen inválido. Debe estar entre 0.0 y 1.0")

            return False

    

    def mostrar_configuracion_actual(self):

        """Muestra la configuración actual de voz"""

        voz_actual = self.engine.getProperty('voice')

        velocidad_actual = self.engine.getProperty('rate')

        volumen_actual = self.engine.getProperty('volume')

        

        # Buscar nombre de la voz actual

        nombre_voz = "Desconocida"

        for voz in self.voces:

            if voz.id == voz_actual:

                nombre_voz = voz.name

                break

        

        print("\n" + "=" * 50)

        print("      CONFIGURACIÓN ACTUAL DE VOZ")

        print("=" * 50)

        print(f"🎤 Voz: {nombre_voz}")

        print(f"⚡ Velocidad: {velocidad_actual} palabras/min")

        print(f"🔊 Volumen: {volumen_actual * 100:.0f}%")

        print("=" * 50)

    

    def hablar(self, texto, imprimir=True):

        """Hace que el asistente hable"""

        if imprimir:

            print(f"🤖 {self.nombre}: {texto}")

        

        self.engine.say(texto)

        self.engine.runAndWait()


# Ejemplo de uso

if __name__ == "__main__":

    # Crear asistente

    mi_asistente = AsistenteVozPersonalizado(nombre="Jarvis")

    

    # Mostrar configuración actual

    mi_asistente.mostrar_configuracion_actual()

    

    # Probar habla con configuración actual

    mi_asistente.hablar("Hola, esta es mi voz actual con la configuración por defecto")

    

    # Cambiar a voz diferente (probando diferentes índices)

    print("\n🔧 Probando diferentes voces...")

    for i in range(min(3, len(mi_asistente.voces))):  # Probar primeras 3 voces

        mi_asistente.cambiar_voz(i)

        mi_asistente.hablar(f"Probando voz número {i}")

    

    # Ajustar velocidad

    print("\n⚡ Probando diferentes velocidades...")

    for velocidad in [120, 180, 240]:

        mi_asistente.ajustar_velocidad(velocidad)

        mi_asistente.hablar(f"Hablando a {velocidad} palabras por minuto")

    

    # Restaurar configuración normal

    mi_asistente.ajustar_velocidad(180)

    mi_asistente.hablar("Configuración restaurada a valores normales")

    

    print("\n✨ ¡Tu asistente está listo con voz personalizada!")


❓ Cuestionario de Repaso

Pregunta 1:

¿Qué hace engine.getProperty('voices')?

  • A) Instala nuevas voces en el sistema

  • B) Obtiene una lista de todas las voces disponibles

  • C) Cambia la voz actual del asistente

  • D) Aumenta el volumen del sistema

Respuesta correcta: B
Explicación: Este método devuelve una lista de objetos de voz que están instalados en tu sistema operativo, permitiéndote ver qué opciones tienes disponibles.


Pregunta 2:

Si configuras engine.setProperty('rate', 250), ¿qué sucede?

  • A) El asistente hablará más lento

  • B) El asistente hablará más rápido

  • C) El volumen aumentará al 250%

  • D) Cambiará a la voz número 250

Respuesta correcta: B
*Explicación: 'rate' controla la velocidad en palabras por minuto. 250 es rápido (normal es 150-180, muy rápido es 250+).*


Pregunta 3:

¿Qué rango de valores acepta engine.setProperty('volume', X)?

  • A) 0 a 100 (porcentaje)

  • B) 0.0 a 1.0 (fracción)

  • C) -10 a 10 (decibelios)

  • D) 1 a 10 (nivel)

Respuesta correcta: B
Explicación: El volumen en pyttsx3 usa valores decimales donde 0.0 es silencio y 1.0 es volumen máximo.


Pregunta 4:

¿Cómo puedes encontrar una voz en español específicamente?

  • A) engine.setProperty('language', 'es')

  • B) Buscando en voces[i].languages por 'es'

  • C) Instalando un paquete especial

  • D) Cambiando el idioma del sistema operativo

Respuesta correcta: B
Explicación: Cada objeto de voz tiene una propiedad languages que indica qué idiomas soporta. Puedes buscar 'es' en esa lista.


Pregunta 5:

¿Por qué es útil crear una clase PerfilVoz como mostramos?

  • A) Para hacer el código más complicado

  • B) Para guardar y reutilizar configuraciones de voz fácilmente

  • C) Para obligar al usuario a elegir un perfil

  • D) Para evitar usar pyttsx3

Respuesta correcta: B
Explicación: Una clase permite encapsular la configuración de voz en perfiles reutilizables (como "robot", "noticias", "niño") que se pueden aplicar con un solo comando.


Pregunta 6 (Bonus):

Si tu asistente habla demasiado rápido para un usuario mayor, ¿qué valor de 'rate' recomendarías?

  • A) 250

  • B) 180

  • C) 130

  • D) 300

Respuesta correcta: C
Explicación: 130 palabras por minuto es una velocidad lenta pero natural, ideal para personas mayores o para asegurar comprensión clara.


✅ ¡Excelente! Has Personalizado la Voz de tu Asistente

Ahora tu asistente puede:

  1. ✅ Cambiar entre diferentes voces (hombre/mujer, idiomas)

  2. ✅ Ajustar velocidad para hablar más rápido o más lento

  3. ✅ Controlar el volumen según el ambiente

  4. ✅ Guardar perfiles personalizados para diferentes usos

  5. ✅ Ser configurado interactivamente por el usuario

Proyecto sugerido: Crea un asistente con modos de voz:

  • Modo normal: Voz clara a velocidad media

  • Modo nocturno: Voz suave a volumen bajo

  • Modo presentación: Voz formal a velocidad rápida

  • Modo infantil: Voz animada a velocidad lenta

📌 Tarea práctica:

  1. Ejecuta el selector interactivo de voz

  2. Encuentra tu voz favorita y anota su índice

  3. Crea un perfil llamado "mi_voz_favorita" con esa configuración

  4. Comparte en los comentarios qué voz elegiste y por qué

🎉 ¡Tu asistente ahora suena exactamente como tú quieres! En la siguiente lección, integraremos esta voz personalizada con las funcionalidades de reconocimiento de voz para crear un asistente completamente funcional



https://www.youtube.com/watch?v=Pj9KbAKpQyk

https://www.youtube.com/watch?v=-0tIy8wWtzE

https://www.youtube.com/watch?v=YqSSId7xfwU

https://www.youtube.com/watch?v=MjK-j7YJ5YI


https://www.youtube.com/watch?v=l2G8-iQYfoA



https://www.youtube.com/watch?v=t-YO0XeHczU


Comentarios

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio