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

 

https://docs.google.com/presentation/d/e/2PACX-1vQmcGg0EfbCv-ZVuqeEl7TLPKuaVyK6KsgHqpSRqeLTZ-mUFV8JlQ6a5pbH2WbLBGcXinzLTTBSKvPb/pub?start=false&loop=false&delayms=3000

 8. NUEVO - Solución si tu Micrófono no Capta tu Audio

Explicación para principiantes:
Si tu asistente dice constantemente "No pude entenderlo bien" pero tú SÍ estás hablando, el problema está en la conexión entre tu voz y Python. Imagina que tu micrófono es un teléfono y Python es un amigo al otro lado de la línea. Si el teléfono está roto o mal configurado, tu amigo no te escuchará, ¡aunque tú estés gritando!

Objetivo de esta lección:

  • Diagnosticar problemas de captura de audio

  • Configurar correctamente el micrófono en Windows

  • Identificar programas que interfieren

  • Probar soluciones paso a paso

Estado actual del problema:

python

while True:

    print('Escuchando...')  # ✅ Esto sí aparece

    audio = listener.listen(source)  # ⚠️ Aquí está el problema

    try:

        text = listener.recognize_google(audio)  # ❌ Nunca llega aquí

    except:

        print('No pude entenderlo bien')  # ⚠️ SIEMPRE cae aquí


🔍 Diagnóstico: ¿Dónde está el Problema?

Paso 1: Prueba Rápida con este Código de Diagnóstico

python

# archivo: prueba_microfono.py

import speech_recognition as sr

import pyaudio


print("=" * 50)

print("DIAGNÓSTICO DE MICRÓFONO")

print("=" * 50)


# 1. Verificar si PyAudio detecta micrófonos

p = pyaudio.PyAudio()

print(f"🎤 Micrófonos detectados: {p.get_device_count()}")

for i in range(p.get_device_count()):

    info = p.get_device_info_by_index(i)

    print(f"  Dispositivo {i}: {info['name']}")

p.terminate()


# 2. Verificar con speech_recognition

listener = sr.Recognizer()

try:

    with sr.Microphone() as source:

        print("\n🔊 Probando nivel de sonido...")

        print("Habla fuerte durante 3 segundos...")

        listener.adjust_for_ambient_noise(source, duration=3)

        print("✅ Micrófono detectado y configurado")

except Exception as e:

    print(f"❌ Error: {e}")

    print("El micrófono no está funcionando correctamente")


print("\n📋 Resumen del diagnóstico listo")

Ejecuta esto primero para saber exactamente qué está pasando.


🎯 Las 3 Causas Principales del Problema

Causa 1: Micrófono Incorrecto Seleccionado

Síntoma: El asistente no capta NADA, ni siquiera ruido de fondo.

Solución paso a paso:

  1. Presiona Windows + I para abrir Configuración

  2. Ve a: Sistema → Sonido

  3. En "Entrada", mira qué dispositivo está seleccionado:

text

Configuración de Sonido de Windows:

┌─────────────────────────────────────────┐

│    DISPOSITIVO DE ENTRADA (MICRÓFONO)   │

├─────────────────────────────────────────┤

│ ○ Micrófono (Realtek Audio) ← ¡ESTE!    │

│ ○ Stereo Mix                            │

│ ○ Micrófono (Dispositivo USB)           │

│ ○ Línea de entrada                      │

└─────────────────────────────────────────┘

  1. Prueba cada uno hasta encontrar el correcto

  2. Habla fuerte y mira si la barra se mueve:

text

Micrófono ACTIVO:       Micrófono INACTIVO:

   ████████▒▒▒▒             ▒▒▒▒▒▒▒▒▒▒

   (la barra sube y baja)   (la barra plana)

En código, puedes forzar un micrófono específico:

python

import speech_recognition as sr


# Obtener lista de micrófonos

mic_list = sr.Microphone.list_microphone_names()

print("Micrófonos disponibles:")

for i, mic in enumerate(mic_list):

    print(f"  {i}: {mic}")


# Usar el micrófono en índice 1 (cambia según tu sistema)

mic = sr.Microphone(device_index=1)


Causa 2: Programa Externo Interfiriendo

Síntoma: El micrófono funciona en otras apps (Zoom, Discord) pero no en Python.

Escenario común: Tienes un programa de "cambio de voz" o "mejora de audio" que captura el micrófono primero.

Solución:

  1. Presiona Ctrl + Shift + Esc para abrir el Administrador de Tareas

  2. Ve a la pestaña "Procesos"

  3. Busca programas como:

    • Voicemod

    • Nvidia Broadcast

    • RTX Voice

    • Discord (si está usando el micrófono)

    • OBS Studio

    • Any software de audio

  4. Cierra temporalmente estos programas

  5. Prueba tu asistente nuevamente

Visualización del problema:

text

Tu voz → Programa Externo → (SE QUEDA AQUÍ) → Python NO RECIBE NADA

   🎤        🎮 Voicemod         ❌ Bloqueado         🤖 Asistente


Causa 3: Permisos de Windows

Síntoma: Python no tiene acceso al micrófono (común en Windows 10/11).

Solución:

  1. Ve a: Configuración → Privacidad y seguridad → Micrófono

  2. Activa: "Permitir que las aplicaciones accedan al micrófono"

  3. Activa: "Permitir que las aplicaciones de escritorio accedan al micrófono"

  4. Desplázate hacia abajo y busca "Python":

  5. text

Apps que pueden usar tu micrófono:

□ Python 3.9 (python.exe) ← ¡ACTÍVALO!

□ Visual Studio Code

  1. □ Google Chrome

  2. Si Python no aparece, ejecuta tu programa una vez y vuelve a revisar


🛠️ Soluciones Completas Paso a Paso

Solución A: Configuración Manual del Micrófono

Paso 1: Abrir Panel de Control de Sonido

  1. Clic derecho en el ícono de sonido en la barra de tareas

  2. Selecciona: "Abrir configuraciones de sonido"

  3. Haz clic: "Panel de control de sonido" (a la derecha)

Paso 2: Configurar Dispositivo de Grabación

  1. Ve a la pestaña: "Grabación"

  2. Clic derecho en el área vacía → "Mostrar dispositivos deshabilitados"

  3. Clic derecho en tu micrófono → "Habilitar"

  4. Clic derecho en tu micrófono → "Establecer como dispositivo predeterminado"

Paso 3: Propiedades Avanzadas

  1. Doble clic en tu micrófono

  2. Ve a: "Niveles"

    • Sube el volumen al 100%

    • Si hay "Aumento de micrófono", ponlo en +10dB o +20dB

  3. Ve a: "Avanzadas"

    • Formato predeterminado: 2 canal, 16 bit, 44100 Hz

    • Desmarca: "Permitir que las aplicaciones tomen control exclusivo"

Solución B: Código Mejorado con Manejo de Errores

python

import speech_recognition as sr

import time


def escuchar_con_reintentos(intentos=3):

    """Intenta escuchar con múltiples reintentos"""

    listener = sr.Recognizer()

    

    for intento in range(intentos):

        try:

            print(f"\n🎤 Intento {intento + 1} de {intentos}")

            

            # Probar diferentes índices de micrófono

            for device_index in [None, 0, 1, 2]:  # None = default, luego 0, 1, 2

                try:

                    if device_index is None:

                        print("  Probando micrófono por defecto...")

                        with sr.Microphone() as source:

                            listener.adjust_for_ambient_noise(source, duration=1)

                            audio = listener.listen(source, timeout=3, phrase_time_limit=5)

                    else:

                        print(f"  Probando micrófono índice {device_index}...")

                        with sr.Microphone(device_index=device_index) as source:

                            listener.adjust_for_ambient_noise(source, duration=1)

                            audio = listener.listen(source, timeout=3, phrase_time_limit=5)

                    

                    print("  ✅ Audio capturado, procesando...")

                    texto = listener.recognize_google(audio, language='es-ES')

                    return texto.lower()

                    

                except sr.WaitTimeoutError:

                    print(f"  ⏱️ Timeout con dispositivo {device_index}, probando siguiente...")

                    continue

                    

        except Exception as e:

            print(f"  ❌ Error: {e}")

            time.sleep(1)  # Esperar 1 segundo antes de reintentar

    

    return ""  # Si fallan todos los intentos


# Uso:

print("Habla ahora...")

texto = escuchar_con_reintentos()

if texto:

    print(f"✅ Entendí: {texto}")

else:

    print("❌ No pude captar audio después de varios intentos")

Solución C: Prueba con Grabación Simple

python

# prueba_grabacion.py

import pyaudio

import wave

import sys


def grabar_audio():

    """Graba 3 segundos de audio para verificar"""

    CHUNK = 1024

    FORMAT = pyaudio.paInt16

    CHANNELS = 1

    RATE = 44100

    RECORD_SECONDS = 3

    OUTPUT_FILENAME = "prueba_microfono.wav"

    

    p = pyaudio.PyAudio()

    

    print(f"🎤 Grabando {RECORD_SECONDS} segundos...")

    print("Habla ahora!")

    

    stream = p.open(format=FORMAT,

                    channels=CHANNELS,

                    rate=RATE,

                    input=True,

                    frames_per_buffer=CHUNK)

    

    frames = []

    

    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):

        data = stream.read(CHUNK)

        frames.append(data)

        # Mostrar progreso

        if i % 10 == 0:

            print(".", end="", flush=True)

    

    print("\n✅ Grabación completa")

    

    stream.stop_stream()

    stream.close()

    p.terminate()

    

    # Guardar archivo

    wf = wave.open(OUTPUT_FILENAME, 'wb')

    wf.setnchannels(CHANNELS)

    wf.setsampwidth(p.get_sample_size(FORMAT))

    wf.setframerate(RATE)

    wf.writeframes(b''.join(frames))

    wf.close()

    

    print(f"📁 Archivo guardado como: {OUTPUT_FILENAME}")

    print("🎧 Reproduce el archivo para ver si se grabó tu voz")


if __name__ == "__main__":

    grabar_audio()


📋 Checklist de Solución de Problemas

Ejecuta esta checklist en orden:

Paso

Qué hacer

Resultado esperado

1

Ejecutar prueba_grabacion.py

Se crea archivo .wav con tu voz

2

Reproducir el archivo .wav

Escuchas tu voz claramente

3

Ver Configuración → Sonido

La barra de micrófono se mueve al hablar

4

Cerrar programas de audio

Voicemod, Discord, OBS cerrados

5

Ejecutar prueba_microfono.py

Detecta micrófonos y prueba niveles

6

Ejecutar código con reintentos

Capta audio después de varios intentos

Si algo falla:

text

❌ Paso 1 falla → Problema de hardware/driver

❌ Paso 3 falla → Configuración de Windows incorrecta  

❌ Paso 4 necesario → Programa externo interfiriendo

❌ Paso 6 falla → Código necesita ajustes


🔄 Código Mejorado con Todas las Soluciones

python

"""

ASISTENTE VIRTUAL - VERSIÓN ROBUSTA PARA MICRÓFONOS

Incluye soluciones para problemas comunes de audio

"""


import speech_recognition as sr

import time


class AsistenteConMicrofono:

    def __init__(self):

        self.listener = sr.Recognizer()

        self.configurar_microfono()

    

    def configurar_microfono(self):

        """Configura y prueba el micrófono"""

        print("🔧 Configurando micrófono...")

        

        # Listar todos los micrófonos disponibles

        print("\n📋 Micrófonos detectados:")

        mic_list = sr.Microphone.list_microphone_names()

        

        if not mic_list:

            print("❌ No se detectaron micrófonos")

            print("  1. Verifica conexión física")

            print("  2. Reinstala drivers de audio")

            print("  3. Prueba otro puerto USB")

            return False

        

        for i, mic_name in enumerate(mic_list):

            print(f"  [{i}] {mic_name}")

        

        # Probar cada micrófono

        mic_funcional = None

        for i in range(len(mic_list)):

            print(f"\n🎤 Probando micrófono {i}: {mic_list[i]}")

            try:

                with sr.Microphone(device_index=i) as source:

                    self.listener.adjust_for_ambient_noise(source, duration=1)

                    print("  ✅ Funciona correctamente")

                    mic_funcional = i

                    break

            except:

                print("  ❌ No funciona o no está disponible")

        

        if mic_funcional is not None:

            self.mic_index = mic_funcional

            print(f"\n✅ Usando micrófono: {mic_list[mic_funcional]}")

            return True

        else:

            print("\n❌ Ningún micrófono funciona correctamente")

            return False

    

    def escuchar(self):

        """Escucha con manejo robusto de errores"""

        if not hasattr(self, 'mic_index'):

            print("⚠️ Micrófono no configurado")

            return ""

        

        try:

            with sr.Microphone(device_index=self.mic_index) as source:

                print("\n🎤 ESCUCHANDO... (habla ahora)")

                

                # Configuración óptima para mejor captura

                self.listener.energy_threshold = 300  # Sensibilidad

                self.listener.dynamic_energy_threshold = True

                self.listener.pause_threshold = 0.8  # Segundos de silencio para terminar

                

                # Capturar audio

                audio = self.listener.listen(

                    source,

                    timeout=5,           # Máximo 5 segundos esperando sonido

                    phrase_time_limit=8  # Máximo 8 segundos de grabación

                )

                

                # Convertir a texto

                print("⏳ Procesando...")

                texto = self.listener.recognize_google(audio, language='es-ES')

                texto = texto.lower()

                

                print(f"✅ Entendí: {texto}")

                return texto

                

        except sr.WaitTimeoutError:

            print("⏱️ No escuché nada. ¿Hablaste?")

            return ""

        except sr.UnknownValueError:

            print("🤔 Escuché algo pero no lo entendí")

            return ""

        except sr.RequestError as e:

            print(f"🌐 Error de conexión: {e}")

            return ""

        except Exception as e:

            print(f"⚠️ Error inesperado: {e}")

            return ""


# ========== USO ==========

if __name__ == "__main__":

    print("=" * 50)

    print("ASISTENTE VIRTUAL - PRUEBA DE MICRÓFONO")

    print("=" * 50)

    

    asistente = AsistenteConMicrofono()

    

    while True:

        texto = asistente.escuchar()

        

        if texto:

            if 'adiós' in texto or 'salir' in texto:

                print("👋 ¡Hasta luego!")

                break

            elif 'prueba' in texto:

                print("✅ ¡El micrófono funciona perfectamente!")

            else:

                print(f"🤖: Dijiste '{texto}'")


📊 Diagrama de Solución de Problemas

text

┌─────────────────────────────────────────────┐

│   PROBLEMA: "No pude entenderlo bien"       │

└─────────────────────┬───────────────────────┘

                      ▼

          ┌─────────────────────┐

          │  ¿La barra de sonido │

          │  en Windows se mueve?│

          └──────────┬──────────┘

                     │

      ┌──────────────┴──────────────┐

      Sí                            No

      │                            │

      ▼                            ▼

┌─────────────────┐      ┌─────────────────────┐

│Programa externo │      │Hardware/Configuración│

│interfiriendo    │      │problema             │

└────────┬────────┘      └──────────┬──────────┘

         │                           │

         ▼                           ▼

   1. Cerrar Voicemod          1. Verificar conexión

   2. Cerrar Discord           2. Habilitar en Windows

   3. Cerrar OBS               3. Reinstalar drivers

                              4. Probar otro micrófono


❓ Cuestionario de Repaso

Pregunta 1:

Si la barra de micrófono en Windows NO se mueve cuando hablas, ¿cuál es el problema más probable?

  • A) Tu código Python tiene errores de sintaxis

  • B) El micrófono no está conectado o configurado

  • C) Google Speech Recognition está caído

  • D) Python necesita reinstalarse

Respuesta correcta: B
Explicación: Si Windows no detecta audio del micrófono, ningún programa (incluido Python) podrá captarlo. Es un problema de hardware/configuración del sistema.


Pregunta 2:

¿Qué programa podría estar "robando" el acceso al micrófono antes que Python?

  • A) Microsoft Word

  • B) Voicemod o Discord

  • C) Bloc de notas

  • D) Calculadora

Respuesta correcta: B
Explicación: Programas que procesan audio (Voicemod, Discord, OBS) a menudo capturan el micrófono exclusivamente, bloqueando el acceso a otras aplicaciones.


Pregunta 3:

¿Cómo puedes probar diferentes micrófonos en tu código Python?

  • A) sr.Microphone(device_index=0) luego device_index=1, etc.

  • B) Cambiando el idioma a inglés

  • C) Reiniciando Windows

  • D) Desinstalando Python

Respuesta correcta: A
Explicación: Puedes especificar qué micrófono usar pasando el índice del dispositivo. list_microphone_names() te muestra cuáles hay disponibles.


Pregunta 4:

¿Qué hace listener.adjust_for_ambient_noise(source, duration=1)?

  • A) Sube el volumen al máximo

  • B) Calibra el micrófono para filtrar ruido de fondo

  • C) Cambia el tipo de micrófono

  • D) Graba un segundo de audio

Respuesta correcta: B
Explicación: Escucha 1 segundo del ambiente para determinar el nivel de ruido base, luego lo resta del audio para mejorar el reconocimiento.


Pregunta 5:

Si tu micrófono funciona en Zoom pero no en Python, ¿dónde debes revisar los permisos?

  • A) En la configuración de Zoom

  • B) En Configuración de Windows → Privacidad → Micrófono

  • C) En el código de Python

  • D) En el manual del micrófono

Respuesta correcta: B
*Explicación: Windows 10/11 tiene controles de privacidad que pueden bloquear el acceso al micrófono para aplicaciones específicas, como Python.*


Pregunta 6 (Bonus):

¿Por qué es útil el parámetro phrase_time_limit en listen()?

  • A) Para limitar cuántas palabras reconoce

  • B) Para evitar que el programa se quede esperando eternamente si no hablas

  • C) Para cambiar el idioma de reconocimiento

  • D) Para mejorar la calidad del audio

Respuesta correcta: B
Explicación: Sin límite, el programa podría quedar "congelado" esperando que termines de hablar. Con phrase_time_limit=5, solo graba 5 segundos máximo.


✅ Resumen de Soluciones

Problema detectado: El asistente siempre dice "No pude entenderlo bien"

Soluciones en orden de aplicación:

  1. 🔧 Verificar hardware: Conectar bien el micrófono

  2. ⚙️ Configurar Windows: Habilitar micrófono en Configuración → Sonido

  3. 🚫 Cerrar programas: Voicemod, Discord, OBS, etc.

  4. 🔍 Probar micrófonos: Usar diferentes device_index

  5. 📝 Ajustar código: Añadir adjust_for_ambient_noise() y manejo de errores

  6. 🔑 Permisos: Habilitar Python en Privacidad → Micrófono

Código mágico final: Usa la clase AsistenteConMicrofono que prueba automáticamente todos los micrófonos y configura los parámetros óptimos.


🌟 ¡Problema resuelto! Ahora tu asistente debería escucharte perfectamente. Si sigues teniendo problemas, comparte en los comentarios qué pasos probaste y qué resultados obtuviste. 





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