13-1-Función Hablar

 

Construyendo un Asistente de Voz en Python

Introducción

Vamos a construir paso a paso un asistente de voz que pueda:

  • Darnos la bienvenida

  • Escuchar lo que decimos

  • Reconocer nuestro habla

  • Respondernos en voz alta


📦 Paso 1: Instalación de librerías necesarias

Primero, necesitamos instalar las librerías que utilizaremos:

bash
pip install pyttsx3 speechrecognition pyaudio

Explicación:

  • pyttsx3: Convierte texto a voz (funciona sin internet)

  • speechrecognition: Reconoce el habla y la convierte a texto

  • pyaudio: Permite acceder al micrófono (necesario para speechrecognition)


🔧 Paso 2: Importar librerías y configurar el motor de voz

python
import pyttsx3
import speech_recognition as sr

# Inicializar el motor de texto a voz
engine = pyttsx3.init()

¿Qué hace este código?

  • Importamos las librerías necesarias

  • Inicializamos el motor que convertirá texto a voz


🔊 Paso 3: Primera función - Hablar

Vamos a crear nuestra primera función que permita al programa hablar:

python
def hablar(por_hablar):
    """
    Función que recibe un texto y lo reproduce en voz alta
    """
    engine.say(por_hablar)
    engine.runAndWait()

# Probamos la función
hablar('hola')

Explicación detallada:

  • def hablar(por_hablar): - Definimos una función que recibe un parámetro llamado por_hablar

  • engine.say(por_hablar) - Encola el texto para ser reproducido

  • engine.runAndWait() - Procesa la cola y reproduce el audio (el programa espera hasta que termine)

  • hablar('hola') - Llamamos a la función y le decimos que diga "hola"

¡Importante! El parámetro por_hablar es dinámico, por lo que podemos hacer que diga cualquier texto.


🎤 Paso 4: Configurar el reconocimiento de voz

Ahora necesitamos configurar el reconocedor de voz:

python
# Crear un reconocedor de voz
listener = sr.Recognizer()

Este objeto será el encargado de escuchar y reconocer lo que decimos.


🎧 Paso 5: Probar el reconocimiento de voz

Vamos a crear un programa simple que escuche y reconozca lo que decimos:

python
# Configurar el micrófono como fuente de audio
with sr.Microphone() as source:
    print('Escuchando...')
    
    # Escuchar con un límite de 5 segundos
    audio = listener.listen(source, phrase_time_limit=5)

    try:
        print('Reconociendo...')
        # Reconocer usando Google Speech Recognition
        text = listener.recognize_google(audio, language='es-US')
        print(text)
    except Exception as e:
        print('No pude entenderlo bien, repítelo por favor')
        print(e)

Explicación paso a paso:

  1. with sr.Microphone() as source: - Abrimos el micrófono como fuente de audio

  2. listener.listen(source, phrase_time_limit=5) - Escuchamos por 5 segundos máximo

  3. listener.recognize_google() - Enviamos el audio a Google para reconocimiento

  4. language='es-US' - Indicamos que el idioma es español

  5. try...except - Capturamos errores si no entiende lo que decimos


🔄 Paso 6: Integrar el habla con el reconocimiento

Ahora vamos a combinar lo que aprendimos: que el programa hable lo que reconoció:

python
def hablar(por_hablar):
    engine.say(por_hablar)
    engine.runAndWait()

# Escuchar y responder
with sr.Microphone() as source:
    print('Escuchando...')
    audio = listener.listen(source, phrase_time_limit=5)

    try:
        print('Reconociendo...')
        text = listener.recognize_google(audio, language='es-US')
        hablar(text)  # ¡Ahora dice lo que reconoció!
        print(text)
    except Exception as e:
        hablar('No pude entenderlo bien, repítelo por favor')
        print(e)

Diferencia clave: Ahora usamos hablar(text) en lugar de print(text) para que el programa nos responda en voz alta.


🔁 Paso 7: Crear un bucle infinito

Queremos que nuestro asistente esté siempre escuchando, no solo una vez:

python
while True:
    with sr.Microphone() as source:
        print('Escuchando...')
        audio = listener.listen(source, phrase_time_limit=5)

        try:
            print('Reconociendo...')
            text = listener.recognize_google(audio, language='es-US')
            hablar(text)
            print(text)
        except Exception as e:
            hablar('No pude entenderlo bien, repítelo por favor')
            print(e)

¿Qué cambió?

  • while True: crea un bucle infinito

  • Después de responder, el programa vuelve a escuchar


👋 Paso 8: Agregar un mensaje de bienvenida

Vamos a crear una función específica para dar la bienvenida:

python
def bienvenida():
    engine.say("Bienvenido de vuelta.")
    engine.runAndWait()

# Llamar a la bienvenida
bienvenida()

while True:
    with sr.Microphone() as source:
        print('Escuchando...')
        audio = listener.listen(source, phrase_time_limit=5)

        try:
            print('Reconociendo...')
            text = listener.recognize_google(audio, language='es-US')
            hablar(text)
            print(text)
        except Exception as e:
            hablar('No pude entenderlo bien, repítelo por favor')
            print(e)

📝 Paso 9: Organizar el código en funciones

Vamos a ordenar todo nuestro código creando una función escuchar():

python
def escuchar():
    while True:
        with sr.Microphone() as source:
            print('Escuchando...')
            audio = listener.listen(source, phrase_time_limit=5)

            try:
                print('Reconociendo...')
                text = listener.recognize_google(audio, language='es-US')
                hablar(text)
                print(text)
            except Exception as e:
                hablar('No pude entenderlo bien, repítelo por favor')
                print(e)

# Programa principal
bienvenida()
escuchar()

Ventaja: Ahora tenemos código más limpio y organizado con funciones bien definidas.


🎭 Paso 10: Personalizar la voz (opcional)

Podemos cambiar la voz que utiliza nuestro asistente:

python
# Obtener las voces disponibles
voces = engine.getProperty('voices')
# Cambiar a una voz específica (el índice varía según el sistema)
engine.setProperty('voice', voces[2].id)  # Prueba con 0, 1, 2...

def bienvenida():
    engine.say("Bienvenido de vuelta.")
    engine.runAndWait()

def hablar(por_hablar):
    engine.say(por_hablar)
    engine.runAndWait()

def escuchar():
    while True:
        with sr.Microphone() as source:
            print('Escuchando...')
            audio = listener.listen(source, phrase_time_limit=5)

            try:
                print('Reconociendo...')
                text = listener.recognize_google(audio, language='es-US')
                hablar(text)
                print(text)
            except Exception as e:
                hablar('No pude entenderlo bien, repítelo por favor')
                print(e)

# Programa principal
bienvenida()
escuchar()

📋 Código completo final

python
import pyttsx3
import speech_recognition as sr

# Inicializar el motor de texto a voz
engine = pyttsx3.init()

# Configurar voz (opcional)
voces = engine.getProperty('voices')
# Descomenta la línea siguiente para cambiar la voz
# engine.setProperty('voice', voces[2].id)  # Ajusta el índice según tu sistema

# Inicializar el reconocedor de voz
listener = sr.Recognizer()

def bienvenida():
    """Da un mensaje de bienvenida"""
    engine.say("Bienvenido de vuelta.")
    engine.runAndWait()

def hablar(por_hablar):
    """
    Convierte texto a voz
    
    Args:
        por_hablar (str): El texto que se convertirá en audio
    """
    engine.say(por_hablar)
    engine.runAndWait()

def escuchar():
    """
    Escucha continuamente a través del micrófono y responde en voz alta
    """
    while True:
        with sr.Microphone() as source:
            print('Escuchando...')
            # Escuchar por un máximo de 5 segundos
            audio = listener.listen(source, phrase_time_limit=5)

            try:
                print('Reconociendo...')
                # Reconocer usando Google Speech Recognition
                text = listener.recognize_google(audio, language='es-US')
                
                # Responder en voz alta
                hablar(text)
                
                # También mostrar en consola
                print(f"Has dicho: {text}")
                
            except Exception as e:
                # Si no entiende, pedir que repita
                hablar('No pude entenderlo bien, repítelo por favor')
                print(f"Error: {e}")

# Programa principal
if __name__ == "__main__":
    bienvenida()
    escuchar()

🎯 Resumen de lo aprendido

PasoFunciónPropósito
1-2Importaciones y configuraciónPreparar el entorno
3hablar()Convertir texto a voz
4-5Reconocimiento básicoEscuchar y convertir voz a texto
6IntegraciónHablar lo que se reconoció
7Bucle infinitoEscuchar continuamente
8bienvenida()Mensaje inicial
9escuchar()Organizar el código
10Personalización de vozCambiar la voz del asistente

🚀 Próximos pasos

Ahora que tienes un asistente básico, puedes:

  • Agregar comandos específicos (ej: "abrir navegador")

  • Integrar con APIs externas

  • Mejorar el manejo de errores

  • Crear una interfaz gráfica

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