| name | audio-expert-windows |
| description | Experto en el ecosistema de audio de Windows (WASAPI) y captura de loopback (grabación de sistema). Ideal para visualizadores de música, grabadores de pantalla y herramientas de procesamiento de sonido en tiempo real. |
Audio Expert Windows (WASAPI & Loopback)
Esta habilidad permite al agente diseñar e implementar soluciones robustas de audio en Windows, aprovechando las capacidades nativas de WASAPI y la librería PyAudioWPatch.
🛠️ Conocimiento Técnico Core
WASAPI (Windows Audio Session API)
- IAudioClient: Interfaz principal para configurar y gestionar streams de audio.
- Loopback Mode: Permite capturar el flujo de audio que se envía a un dispositivo de salida (parlantes/audífonos).
- Shared vs Exclusive Mode: Prioriza el modo compartido para máxima compatibilidad con el sistema.
- Latencia: WASAPI ofrece menor latencia que MME o DirectSound.
PyAudioWPatch
Es el fork recomendado para Python que parcha PortAudio para soportar loopback en Windows de forma nativa.
- Detección Automática: Usa
get_default_wasapi_loopback() para encontrar los altavoces predeterminados rápidamente.
- Context Managers: Soporta
with pyaudiowpatch.PyAudio() as p: para evitar fugas de memoria y bloqueos de driver.
- Filtros de Dispositivos: Los dispositivos de loopback aparecen como dispositivos de entrada (input).
🚀 Patrones de Implementación
1. Captura de Loopback Robusta
Para capturar el audio del sistema sin configuraciones manuales complejas:
import pyaudiowpatch as pyaudio
def start_system_capture():
with pyaudio.PyAudio() as p:
try:
wasapi_info = p.get_host_api_info_by_type(pyaudio.paWASAPI)
default_speakers = p.get_default_output_device_info()
loopback = p.get_wasapi_loopback_analogue_by_dict(default_speakers)
stream = p.open(
format=pyaudio.paInt16,
channels=loopback["maxInputChannels"],
rate=int(loopback["defaultSampleRate"]),
input=True,
input_device_index=loopback["index"]
)
except OSError as e:
print(f"Error de audio: {e}")
2. Manejo de Errores WASAPI
- AUDCLNT_E_DEVICE_INVALIDATED: Ocurre cuando se desconecta un dispositivo o cambia la configuración de Windows. Requiere reinicializar el stream.
- Buffer Overflow: Indica que el procesamiento es más lento que la captura. Usa NumPy para vectorizar el análisis (RMS, FFT).
🕵️ Diagnóstico Forense
Cuando el audio no se captura:
- Listar Dispositivos: Ejecuta
python -m pyaudiowpatch para ver si el driver WASAPI está activo.
- Device Index: Asegúrate de que el
input_device_index apunte a un dispositivo con maxInputChannels > 0 y que el nombre incluya [Loopback].
- Muestreo: WASAPI es estricto. Usa
int(device_info['defaultSampleRate']) en lugar de valores hardcoded como 44100.