11. Ajustes de voz
11. Ajustes de Voz - Personalizando la Voz de tu Asistente
python -mExplicació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
import pyttsx3
engine = pyttsx3.init()
engine.say("Hola como estas?")
engine.runAndWait()
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.
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
import pyttsx3
engine = pyttsx3.init()
voces = engine.getProperty('voices')
engine.setProperty('voice', voces[2].id)
engine.say("Hola como estas?")
engine.runAndWait()
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.
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)
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()
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.
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
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()
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.
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
Propiedad Descripción Ejemplo rateVelocidad del habla (palabras por minuto) engine.setProperty('rate', 150)volumeVolumen (0.0 a 1.0) engine.setProperty('volume', 0.8)voiceVoz a usar engine.setProperty('voice', voces[0].id)
| Propiedad | Descripción | Ejemplo |
|---|---|---|
rate | Velocidad del habla (palabras por minuto) | engine.setProperty('rate', 150) |
volume | Volumen (0.0 a 1.0) | engine.setProperty('volume', 0.8) |
voice | Voz a usar | engine.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
🔧 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:
✅ Cambiar entre diferentes voces (hombre/mujer, idiomas)
✅ Ajustar velocidad para hablar más rápido o más lento
✅ Controlar el volumen según el ambiente
✅ Guardar perfiles personalizados para diferentes usos
✅ 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:
Ejecuta el selector interactivo de voz
Encuentra tu voz favorita y anota su índice
Crea un perfil llamado "mi_voz_favorita" con esa configuración
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
Publicar un comentario