Especificación de Módulo: MOD-ENGLISH (Reproductor de Inglés y Shadowing)
Fase: 03 — Ingeniería de Requisitos
Entregable: 07 de 09 — Especificación Detallada de Módulos
Módulo ID: MOD-ENGLISH (13 de 15)
Bounded Context: LanguageAcquisition / Inmersión Lingüística y Técnica de Shadowing
Ubicación de Almacenamiento: Archivos multimedia locales (.mp4, .mp3, .srt, .vtt) en Ingles/ y estado en .notevault/english/player_state.json
Responsable Técnico: NoteVault Core Engineering
1. Alcance y Responsabilidades del Módulo
El módulo MOD-ENGLISH proporciona una plataforma avanzada de inmersión auditiva y entrenamiento fonético activo basada en la técnica de Shadowing (repetición imitativa sincronizada):
- Reproductor Multimedia de Alta Fidelidad: Soporte nativo para audio (
.mp3,.m4a,.wav) y video (.mp4,.webm) con decodificación acelerada por hardware. - Sincronización Interactiva de Subtítulos: Parseo y renderizado de archivos
.srty.vttlínea por línea. Cada subtítulo es clickeable para saltar de forma instantánea al segundo exacto de la pista. - Bucle de Repetición por Frase (Sentence Shadowing Loop): Capacidad de reproducir en bucle continuo una sola oración o fragmento delimitado hasta dominar la prosodia, entonación y enlaces fonéticos (connected speech).
- Modulación de Velocidad con Preservación de Tono (Pitch Correction): Control fino de velocidad (0.5x, 0.75x, 0.9x, 1.0x, 1.2x, 1.5x) sin distorsionar el tono ni agudizar la voz.
- Mini-Player Flotante Persistente: Widget compacto en la esquina inferior (
MiniPlayer.tsx) que permite continuar escuchando el audio mientras el usuario toma notas enMOD-NOTESo resuelve ejercicios enMOD-STUDY. - Captura Inmediata de Vocabulario: Selección de palabras en los subtítulos para guardarlas con un clic como tarjetas o notas en la carpeta
Ingles/Vocabulario/.
2. Marco Conceptual: Entidad Pista de Inmersión en el Dominio
3. Requisitos Funcionales del Módulo (RF)
| ID RF | Declaración del Requisito Funcional | Prioridad MoSCoW | Criterio de Verificación |
|---|---|---|---|
| RF-ENG-01 | El sistema DEBE reproducir pistas de audio y video locales con soporte para formatos MP3, WAV, M4A, MP4 y WebM. | Must Have | Componente EnglishPlayer.tsx reproduce multimedia sin dependencias de red. |
| RF-ENG-02 | El sistema DEBE parsear subtítulos .srt y .vtt, destacando la frase activa en sincronía con el audio en tiempo real. |
Must Have | La línea de texto activa cambia de color con un margen de error menor a 50 ms. |
| RF-ENG-03 | El sistema DEBE permitir activar el modo "Bucle de Frase" (Sentence Loop) para repetir indefinidamente la oración activa. | Must Have | Al llegar al timestamp final de la frase, el reproductor rebobina automáticamente al inicio. |
| RF-ENG-04 | El sistema DEBE permitir modular la velocidad de reproducción entre 0.5x y 1.5x conservando el tono natural de la voz. | Must Have | La propiedad preservesPitch = true del elemento de audio previene el efecto ardilla. |
| RF-ENG-05 | El sistema DEBE proveer un Mini-Player flotante que permanezca visible al navegar a otros módulos de NoteVault. | Must Have | Componente MiniPlayer.tsx persiste en el DOM global y responde a play/pausa/saltar frase. |
| RF-ENG-06 | El sistema DEBE permitir hacer clic sobre cualquier frase del guion para saltar la reproducción a ese instante temporal. | Should Have | Clic en el subtítulo actualiza currentTime y continúa la reproducción fluidamente. |
| RF-ENG-07 | El sistema DEBE guardar la posición de reproducción al cerrar la app para reanudar en el mismo punto al volver. | Should Have | Persistencia en .notevault/english/player_state.json del último timestamp por archivo. |
4. Requisitos No Funcionales del Módulo (RNF Local)
| ID RNF | Dimensión ISO 25010 | Declaración y Métrica Cuantitativa | Método de Medición |
|---|---|---|---|
| RNF-ENG-01 | Eficiencia de Desempeño | Latencia de Salto por Subtítulo: El tiempo entre hacer clic en una frase y la emisión del audio correspondiente debe ser < 30 ms. | Medición con AudioContext / HTMLMediaElement eventos de seek. |
| RNF-ENG-02 | Eficiencia de Recursos | Consumo de Memoria en Segundo Plano: El Mini-Player en reproducción de fondo no debe consumir más de 25 MB de memoria RAM adicional. | Monitoreo del proceso de renderizado en el Administrador de Tareas. |
| RNF-ENG-03 | Confiabilidad | Resiliencia ante Subtítulos Corruptos: Si un archivo SRT contiene timestamps desordenados, el sistema los auto-ordena sin crashear el reproductor. | Test unitario de parseo con subtítulos deliberadamente malformados. |
| RNF-ENG-04 | Accesibilidad | Control Total por Atajos de Teclado: Teclas dedicadas: Espacio (play/pause), J (retroceder 5s), L (avanzar 5s), [ (frase anterior), ] (frase siguiente), R (activar/desactivar bucle). |
Prueba de eventos de teclado en player.test.ts. |
5. Historias de Usuario con Criterios Gherkin
US-ENG-01: Práctica de Shadowing con bucle de frase
Como estudiante aprendiendo pronunciación avanzada en inglés,
Quiero activar el bucle continuo en una frase difícil de un podcast,
Para repetir en voz alta junto al hablante nativo hasta replicar exactamente su ritmo y entonación.
Escenario: Activación de repetición en bucle de una frase
Dado que el usuario está escuchando un archivo de audio con subtítulos sincronizados
Cuando presiona la tecla "R" o pulsa el botón "Bucle de Frase"
Entonces el sistema marca visualmente la frase activa con un contorno brillante
Y al finalizar la frase, el audio rebobina inmediatamente al segundo inicial de la misma frase
Y la repetición continúa cíclicamente hasta que el usuario pulse avanzar o desactive el bucle.
US-ENG-02: Uso del Mini-Player mientras se toma notas
Como usuario que toma apuntes de un curso en inglés,
Quiero que el reproductor se reduzca a un mini-player flotante cuando cambio a la pestaña de Notas,
Para escribir mis notas sin perder el control de reproducción del audio.
Escenario: Transición automática a Mini-Player
Dado que una pista de audio está en reproducción activa en el módulo de inglés
Cuando el usuario hace clic en el módulo "Notas" en la barra lateral
Entonces la vista completa de video se desacopla y aparece el Mini-Player en la esquina inferior
Y el audio continúa sonando sin interrupción
Y los botones de pausar, retroceder y frase siguiente permanecen accesibles en el Mini-Player.
6. Especificación Detallada de Casos de Uso
UC-ENG-01: Cargar Pista Multimedia y Practicar Shadowing
| Campo | Detalle de Especificación |
|---|---|
| ID y Nombre | UC-ENG-01 — Cargar Pista Multimedia y Practicar Shadowing |
| Actor Principal | Estudiante de Idiomas |
| Precondición | Existen archivos multimedia y sus correspondientes subtítulos en la carpeta Ingles/. |
| Flujo Principal | 1. El usuario selecciona un archivo de audio o video en el explorador de pistas de inglés. 2. El sistema carga el archivo en el elemento multimedia HTML5 nativo. 3. Busca automáticamente un archivo de subtítulos con el mismo nombre y extensión .srt o .vtt.4. Parsea los bloques de texto con sus marcas de tiempo inicial y final ( start, end).5. Presenta la transcripción sincronizada en el panel lateral de subtítulos. 6. El usuario inicia la reproducción y ajusta la velocidad a 0.9x. 7. El sistema resalta en tiempo real la frase que se está pronunciando. 8. El usuario presiona el botón de "Bucle de Frase" sobre una oración específica. 9. El reproductor itera en esa porción mientras el usuario practica el shadowing. 10. El usuario desactiva el bucle y continúa escuchando. |
| Flujos Alternativos | A1 (Pista sin archivo de subtítulos): El sistema reproduce el archivo como audio/video estándar y ofrece una opción para "Importar archivo de subtítulos manualmente". |
| Excepciones | E1 (Códec multimedia no soportado): Si el formato del video no es soportado por el motor Chromium/Electron, el sistema muestra advertencia sugiriendo transcodificar a MP4 estándar H.264. |
| Postcondición | La posición temporal alcanzada se guarda en memoria y en player_state.json. |
7. Diagrama de Actividad del Módulo
flowchart TD
A[Seleccionar Audio/Video en Módulo Inglés] --> B[Cargar Media en Buffer HTML5]
B --> C[Buscar Subtítulo Homónimo .srt/.vtt]
C --> D{¿Subtítulo Existe?}
D -->|Sí| E[Parsear Bloques con Timestamps]
D -->|No| F[Modo Audio Simple sin Guion]
E --> G[Renderizar Lista de Frases Interactivas]
F --> H[Iniciar Reproducción en Velocidad Configurada]
G --> H
H --> I[Listener timeupdate en Ejecución Continua]
I --> J[Identificar Frase Activa Según currentTime]
J --> K[Resaltar Frase en Panel de Subtítulos]
K --> L{¿Modo Bucle Activo?}
L -->|Sí| M{¿currentTime >= frase.end?}
L -->|No| N[Continuar Reproducción Normal]
M -->|Sí| O[Rebobinar: currentTime = frase.start]
M -->|No| N
O --> H
N --> P{¿Usuario Cambia a Módulo Notas?}
P -->|Sí| Q[Minimizar a MiniPlayer Flotante sin Pausar]
P -->|No| R[Mantener Vista Completa]
8. Implicación de Compuerta de Fase (Gate 3 Criteria)
- ¿Bloquea el avance a Modelado/Fase 4?: No.
- Condición de Pase: El reproductor multimedia y el Mini-Player gestionan la memoria y los eventos de audio sin fugas de memoria (memory leaks), con soporte total de subtítulos offline.