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:
Presiona Windows + I para abrir Configuración
Ve a: Sistema → Sonido
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 │
└─────────────────────────────────────────┘
Prueba cada uno hasta encontrar el correcto
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:
Presiona Ctrl + Shift + Esc para abrir el Administrador de Tareas
Ve a la pestaña "Procesos"
Busca programas como:
Voicemod
Nvidia Broadcast
RTX Voice
Discord (si está usando el micrófono)
OBS Studio
Any software de audio
Cierra temporalmente estos programas
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:
Ve a: Configuración → Privacidad y seguridad → Micrófono
Activa: "Permitir que las aplicaciones accedan al micrófono"
Activa: "Permitir que las aplicaciones de escritorio accedan al micrófono"
Desplázate hacia abajo y busca "Python":
text
Apps que pueden usar tu micrófono:
□ Python 3.9 (python.exe) ← ¡ACTÍVALO!
□ Visual Studio Code
□ Google Chrome
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
Clic derecho en el ícono de sonido en la barra de tareas
Selecciona: "Abrir configuraciones de sonido"
Haz clic: "Panel de control de sonido" (a la derecha)
Paso 2: Configurar Dispositivo de Grabación
Ve a la pestaña: "Grabación"
Clic derecho en el área vacía → "Mostrar dispositivos deshabilitados"
Clic derecho en tu micrófono → "Habilitar"
Clic derecho en tu micrófono → "Establecer como dispositivo predeterminado"
Paso 3: Propiedades Avanzadas
Doble clic en tu micrófono
Ve a: "Niveles"
Sube el volumen al 100%
Si hay "Aumento de micrófono", ponlo en +10dB o +20dB
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:
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:
🔧 Verificar hardware: Conectar bien el micrófono
⚙️ Configurar Windows: Habilitar micrófono en Configuración → Sonido
🚫 Cerrar programas: Voicemod, Discord, OBS, etc.
🔍 Probar micrófonos: Usar diferentes device_index
📝 Ajustar código: Añadir adjust_for_ambient_noise() y manejo de errores
🔑 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
Publicar un comentario