Major Features:
- Internationalization (i18n) with auto-detection for ES/EN/PT
- Mobile-first responsive design for Studio and Experience
- Multi-model AI configuration (llama3.2:3b, qwen3.5:9b, gpt-oss:latest)
- Course language configuration (auto-detect or fixed per course)
Backend Changes:
- shared/common: ModelType enum for intelligent model selection
- LMS: log_ai_usage function migration (fix chat tutor 500 error)
- LMS/CMS: course language config fields (language_setting, fixed_language)
- LMS: /courses/{id}/language-config endpoint for language detection
Frontend Changes:
- Experience: Enhanced i18n with browser language detection
- Experience: Audio recording with HTTPS check and error handling
- Studio: Memory game with unique pair IDs and debug logging
- Studio: Expanded translations (250+ keys for ES, EN, PT)
- Both: Language selector in headers (mobile responsive)
Documentation:
- AI_MODELS_CONFIG.md: Multi-model configuration guide
- RESPONSIVIDAD_GUIA.md: Mobile-first design patterns
- I18N_RESPONSIVIDAD_IMPLEMENTACION.md: Implementation details
- DEBUG_AUDIO_RECORDING.md: Audio troubleshooting guide
- DEBUG_MEMORY_GAME.md: Memory game debugging steps
Bug Fixes:
- Fix chat tutor 500 error (missing log_ai_usage function)
- Fix audio recording (HTTPS check, browser compatibility)
- Fix memory game pair IDs (unique ID generation)
- Fix HotspotBlock TypeScript errors
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
6.1 KiB
Debugging: Audio Recording Issue
Problema Reportado
El ejercicio de captura de audio no se activa (no inicia la grabación).
Soluciones Implementadas
1. Mejoras en el Componente AudioResponsePlayer
Archivos modificados:
web/experience/src/components/blocks/AudioResponsePlayer.tsx
Cambios realizados:
- ✅ Verificación de compatibilidad del navegador
- ✅ Verificación de contexto seguro (HTTPS/localhost)
- ✅ Logging detallado para debugging
- ✅ Manejo mejorado de errores con mensajes específicos
- ✅ Configuración optimizada de audio (eco cancellation, noise suppression)
- ✅ Soporte para múltiples formatos de audio
2. Mensajes de Error Específicos
El sistema ahora muestra mensajes diferentes según el error:
| Error | Mensaje |
|---|---|
| Navegador no compatible | "Your browser does not support audio recording..." |
| Requiere HTTPS | "Audio recording requires HTTPS..." |
| Permiso denegado | "Please allow microphone access..." |
| Micrófono no encontrado | "No microphone found..." |
| Micrófono en uso | "Microphone is already in use..." |
Pasos para Diagnosticar
1. Abrir Consola del Navegador
- Ve a una lección con ejercicio de audio
- Presiona
F12o clic derecho → "Inspeccionar" - Ve a la pestaña "Console"
2. Verificar Mensajes de Log
Cuando hagas clic en "Start Recording", deberías ver:
[AudioResponse] Requesting microphone access...
[AudioResponse] Microphone access granted
[AudioResponse] Recording started
[AudioResponse] Speech recognition started
[AudioResponse] Data available, chunk size: XXXX
3. Verificar Errores
Si hay un error, verás algo como:
[AudioResponse] Error accessing microphone: NotAllowedError
Verificación de Compatibilidad
Navegadores Soportados
✅ Chrome/Chromium (v60+) ✅ Firefox (v53+) ✅ Edge (v79+) ✅ Safari (v14.1+)
❌ Internet Explorer - No soportado
Verificar en tu Navegador
// En la consola del navegador
console.log('MediaDevices:', !!navigator.mediaDevices);
console.log('getUserMedia:', !!navigator.mediaDevices?.getUserMedia);
console.log('MediaRecorder:', !!window.MediaRecorder);
console.log('Secure Context:', window.isSecureContext);
console.log('Protocol:', window.location.protocol);
Problemas Comunes y Soluciones
Problema 1: "Could not access microphone"
Causa: El usuario denegó el permiso del micrófono.
Solución:
- Haz clic en el ícono de candado en la barra de URL
- Permite el acceso al micrófono
- Recarga la página
Problema 2: "No microphone found"
Causa: No hay micrófono conectado o configurado.
Solución:
- Conecta un micrófono o usa el integrado
- Verifica en Configuración del Sistema → Sonido
- Recarga la página
Problema 3: "Microphone is already in use"
Causa: Otra aplicación está usando el micrófono.
Solución:
- Cierra otras aplicaciones (Zoom, Teams, etc.)
- Cierra otras pestañas del navegador que usen el micrófono
- Intenta de nuevo
Problema 4: "HTTPS Required"
Causa: El navegador bloquea el micrófono en HTTP.
Solución:
- Usa HTTPS en producción
- Para desarrollo local, usa
localhost(funciona sin HTTPS) - O usa
ngrokpara crear un túnel HTTPS
Problema 5: "Browser Not Supported"
Causa: El navegador no soporta la API MediaRecorder.
Solución:
- Usa Chrome, Firefox, Edge o Safari actualizado
- No uses Internet Explorer
Comandos de Debugging
En la consola del navegador:
// Verificar permisos
navigator.permissions.query({name: 'microphone'}).then(result => {
console.log('Mic permission:', result.state);
});
// Probar acceso al micrófono
navigator.mediaDevices.getUserMedia({audio: true})
.then(() => console.log('✓ Mic access OK'))
.catch(err => console.error('✗ Mic access failed:', err));
// Verificar formatos soportados
console.log('WebM supported:', MediaRecorder.isTypeSupported('audio/webm'));
console.log('WebM+Opus supported:', MediaRecorder.isTypeSupported('audio/webm;codecs=opus'));
En la consola del servidor (Docker):
# Ver logs de Experience
docker logs openccb-experience-1 --tail 100
# Buscar errores específicos
docker logs openccb-experience-1 --tail 100 | grep -i "audio\|error"
Estructura del Ejercicio de Audio
Configuración Típica
{
"type": "audio-response",
"prompt": "Describe your daily routine in English",
"keywords": ["wake up", "breakfast", "work", "sleep"],
"timeLimit": 60,
"isGraded": true
}
Flujo de Grabación
- Usuario hace clic en "Start Recording"
- Sistema solicita permiso de micrófono
- Inicia grabación de audio (formato WebM)
- Speech recognition transcribe en tiempo real
- Usuario hace clic en "Stop Recording"
- Audio se envía al servidor para evaluación
- IA analiza pronunciación y keywords
- Se muestra feedback con puntaje
Checklist de Verificación
- El botón "Start Recording" aparece
- Al hacer clic, el navegador solicita permiso de micrófono
- El permiso es concedido
- El temporizador comienza a contar
- El ícono de grabación parpadea en rojo
- La transcripción aparece en tiempo real
- El botón "Stop Recording" funciona
- El audio se puede reproducir después de grabar
- El botón "Submit Response" aparece
- La evaluación se muestra después de enviar
Reportar el Problema
Por favor proporciona:
- ¿Qué navegador estás usando? (Chrome, Firefox, etc.)
- ¿Qué versión? (ayuda → acerca de)
- ¿Estás en localhost o producción?
- ¿Qué mensajes de error ves en la consola?
- ¿El navegador solicita permiso de micrófono?
- ¿Captura de pantalla de la consola (F12)?
Configuración para Desarrollo
ngrok (HTTPS tunnel para desarrollo)
# Instalar ngrok
npm install -g ngrok
# Crear túnel HTTPS
ngrok http 3003
Esto te dará una URL HTTPS temporal para probar el micrófono.
Fecha: 2026-03-23 Versión: OpenCCB 0.2.0 Componente: AudioResponsePlayer