Guía Completa del Sistema de Audio de PsychoPy: De Tonos Simples a Reconocimiento de Voz

PsychoPy, una herramienta de código abierto fundamental para el diseño de experimentos en psicología y neurociencia, ofrece un sistema de audio robusto que cubre desde la generación de tonos básicos hasta el reconocimiento avanzado de voz. Esta guía detallada explora las funcionalidades clave, la configuración y las mejores prácticas para utilizar el sistema de audio de PsychoPy.

El módulo de audio de PsychoPy, ubicado en psychopy/sound/, es compatible con varios backends de audio para asegurar compatibilidad multiplataforma y rendimiento óptimo. Estos incluyen sounddevice, PTB (Psychtoolbox), pygame y pysound.

Componentes Principales:

  • Reproducción de Audio: psychopy/sound/sound.py - Maneja la carga y reproducción de archivos de audio y la generación de sonidos.
  • Grabación de Audio: psychopy/sound/microphone.py - Proporciona funcionalidad para capturar audio desde un micrófono.
  • Reconocimiento de Voz: psychopy/sound/transcribe.py - Integra varias bibliotecas para transcribir audio a texto.
  • Gestión de Hardware: Módulos específicos para la interfaz con micrófonos y altavoces.

Iniciar la reproducción de audio en PsychoPy es sencillo. Puede generar tonos estándar, reproducir archivos WAV o crear sonidos con frecuencias específicas con pocas líneas de código.


from psychopy import sound, core

# Generar y reproducir un tono La estándar (A4, 440Hz)
tono_la = sound.Sound('A', octave=4, secs=0.8, sampleRate=44100)
tono_la.play()

# Generar un tono de alta frecuencia
clic = sound.Sound(800, secs=0.01, sampleRate=44100)
clic.play()

# Cargar y reproducir un archivo WAV
archivo_audio = sound.Sound('audio_ejemplo.wav')
archivo_audio.play()

Parámetros de Audio Configurables:

  • Frecuencia de Muestreo: Soporta varias, 44100 Hz es el valor predeterminado.
  • Canales: Soporte para mono y estéreo.
  • Volumen: Ajustable entre 0.0 y 1.0.
  • Duración: Control preciso sobre la longitud de la reproducción.

El módulo de micrófono de PsychoPy permite la captura de audio, esencial para experimentos que requieren respuestas vocales. Permite la grabación de audio en tiempo real y su posterior guardado.


from psychopy.sound import Microphone

# Inicializar el micrófono (detecta automáticamente el dispositivo predeterminado)
mic = Microphone(
   sampleRateHz=44100,
   channels=1,
   streamBufferSecs=2.0
)

# Iniciar la grabación
mic.record()

# Grabar durante 5 segundos
core.wait(5)

# Detener la grabación
mic.stop()

# Obtener el clip de audio grabado y guardarlo
grabacion = mic.getRecording()
grabacion.save("grabacion_usuario.wav")

Características de Grabación:

  • Búfer de Flujo: Ideal para grabaciones continuas, optimizando el uso de memoria.
  • Detección de Dispositivos: Identifica automáticamente los micrófonos disponibles.
  • Soporte de Formatos: Guarda grabaciones en formatos como WAV.
  • Marcas de Tiempo: Registra con precisión el inicio y fin de la grabación.

PsychoPy facilita la integración de motores de reconocimiento de voz para transcribir el audio grabado. Ofrece opciones tanto para procesamiento en línea como fuera de línea.

1. CMU PocketSphinx (Offline)


from psychopy.sound import transcribe

# Reconocimiento de voz sin conexión
texto_reconocido = transcribe.recognizeSphinx(
   audioClip=grabacion,
   language='en-US',
   expectedWords=['adelante', 'atrás', 'izquierda', 'derecha']
)
print(f"Texto reconocido (Sphinx): {texto_reconocido.text}")

2. Google Cloud Speech API (Online)

Requiere configuración de credenciales de API, pero ofrece alta precisión.


# Reconocimiento de voz online con Google Cloud
# Asegúrese de tener las credenciales configuradas
texto_reconocido_google = transcribe.recognizeGoogle(
   audioClip=grabacion,
   language='es-ES',
   expectedWords=['sí', 'no', 'quizás']
)
print(f"Texto reconocido (Google): {texto_reconocido_google.text}")

3. OpenAI Whisper (Offline, Deep Learning)

Un modelo potente para reconocimiento de voz sin conexión.


# Reconocimiento de voz offline de alta precisión con Whisper
texto_reconocido_whisper = transcribe.transcribe(
   audioClip=grabacion,
   engine='whisper',
   language='es'
)
print(f"Texto reconocido (Whisper): {texto_reconocido_whisper.text}")

Selección del Backend de Audio:

Puede especificar sus backends preferidos para el manejo del audio.


import psychopy.preferences as prefs

# Establecer bibliotecas y drivers de audio preferidos
prefs.hardware['audioLib'] = ['sounddevice', 'pygame']
prefs.hardware['audioDriver'] = ['CoreAudio', 'PortAudio']

Optimización de Latencia:

Para experimentos sensibles al tiempo, ajuste la configuración de latencia.


# Configurar modo de baja latencia
prefs.hardware['audioLatencyMode'] = 3  # Prioridad alta

Experimentos con Respuesta de Voz:

  1. Pre-carga: Cargue los modelos de reconocimiento de voz al inicio del experimento para minimizar la latencia en la primera transcripción.
  2. Duración de Grabación: Ajuste la duración de la grabación y el tamaño del búfer según las expectativas de respuesta del participante.
  3. Selección de Motor: Elija el motor de reconocimiento de voz que mejor se adapte a los requisitos de precisión y rendimiento de su experimento.
  4. Procesamiento de Resultados: Analice la salida de texto, registrando tiempos de reacción y tasas de éxito.

Experimentos con Estímulos Auditivos:

  • Utilice sound.Sound() para crear secuencias de tonos precisas.
  • Genere ruido blanco controlado variando parámetros.
  • Implemente audio espacial mediante la configuración estéreo.

Activación por Voz:

Diseñe experimentos que se inicien o controlen mediante comandos de voz específicos.


# Ejemplo simplificado de activación por voz
mic = Microphone()
mic.start()

comando_detectado = False
while not comando_detectado:
   volumen_actual = mic.getCurrentVolume()
   if volumen_actual > 0.1:  # Umbral de volumen simple
       grabacion_voz = mic.getRecording()
       resultado = transcribe.transcribe(grabacion_voz, engine='sphinx')
       
       if 'iniciar' in resultado.text.lower():
           print("Comando 'iniciar' detectado. Iniciando experimento...")
           # Lógica para iniciar el experimento
           comando_detectado = True
       elif 'detener' in resultado.text.lower():
           print("Comando 'detener' detectado.")
           # Lógica para detener
           comando_detectado = True

Análisis de Audio en Tiempo Real:

  • Monitorización continua del nivel de volumen.
  • Aálisis espectral para identificar frecuencias dominantes.
  • Detección de actividad de voz para identificar el inicio y fin del habla.

Problemas Comunes:

  • Latencia de Audio: Pruebe diferentes backends de audio o ajuste audioLatencyMode.
  • Calidad de Grabación: Verifique la configuración del micrófono, la frecuencia de muestreo y el dispositivo seleccionado.
  • Precisión de Reconocimiento: Ajuste los parámetros del motor de reconocimiento o considere un motor diferente.

Consejos de Rendimiento:

  • Pre-cargue archivos de audio grandes.
  • Procese las grabaciones en lotes si es posible.
  • Seleccione el motor de reconocimiento adecuado para equilibrar velocidad y precisión.
  • Medición de tiempos de reacción verbal a estímulos auditivos.
  • Evaluación de la atención auditiva espacial mediante localizaciones de sonido.
  • Investigación de la relación entre características vocales y estados emocionales.

Etiquetas: psychopy audio Python reconocimiento de voz Grabación de Audio

Publicado el 8-12 02:16