# GAB-384 · MediaLearningAudioPlayer — « Lecteur audio »

**Archétype / renderer_key :** `media_viewer` · **module :** EdTechMediaLearning
**renderer_key à concevoir (pas de moteur kit)** — voir section external_refs ci-dessous.

## Pack (structure officielle par-GAB)
```
GAB-384/
  renderer.html            ← moteur lecteur audio (ne pas modifier par instance)
  instance.example.json    ← SOURCE DE VÉRITÉ (contenu réel, à plat)
  schema.contract.json     ← contrat de validation
  README-contract.md       ← ce fichier
```

## Archétype fonctionnel
Lecteur audio pédagogique avec :
- **Lecture/pause** (bouton unique, état JSON-driven)
- **Contrôle de vitesse** (chips 0.75×/1×/1.5×, défaut JSON-driven)
- **Transcription texte fallback** (bouton + texte venant du JSON)
- **No autoplay** (imposé, jamais d'autoplay en contexte scolaire)

## Champs requis (instance, à plat)
`gab_id` · `audio_kind` · `audio_duration` · `initial_state_label` · `playing_state_label` · `speed_options[]{value,label,default}` · `transcript_cta_label`

Optionnels : `title`, `audio_player_id`, `transcript_text`, `no_autoplay`, `accessibility{…}`, `child_safety{…}`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : type audio, durée, libellés d'état (pause/lecture), liste des vitesses avec défaut, libellé et contenu de la transcription.
- **HTML** : bouton play/pause structurel, chips de vitesse, bouton transcript, layout, panels de feedback.

## Garde-fous (child_safety)
- **No autoplay** : `no_autoplay: true` obligatoire — l'élève déclenche la lecture.
- **Transcript disponible** : fallback texte complet, accessible sans écouter.
- **BLOCKED** si `speed_options` vides, `transcript_cta_label` absent, ou libellés d'état manquants.

## QA à vérifier
1. Changer `audio_kind` / `audio_duration` → rendu change sans toucher au HTML (critère d'or).
2. `speed_options:[]` → BLOCKED propre.
3. Clic play → label bascule selon `playing_state_label`.
4. Clic chip vitesse → panel note affiche la valeur sélectionnée.
5. Clic transcript → panel ok affiche `transcript_text`.
6. Responsive 375/768/1024.

## external_refs / dependencies
- **renderer_key `media_viewer`** : aucun moteur kit de référence n'existe pour ce renderer_key dans le lot actuel. Le renderer est dérivé directement de l'écran source GAB-384 de l'INDEX-300. Un moteur kit commun `media_viewer` est à concevoir lors du développement du module EdTechMediaLearning.
- **Écran source** : `INDEX-300-medialearning-GAB-381-385-PLAYABLE.html`, bloc `data-tpl="384"`, handlers `d384Play`, `d384Speed`, `d384Transcript`.
- **GAB voisin** : GAB-385 (MediaLearningTranscriptSync) pour synchro transcript avancée.

## Source
`INDEX-300-medialearning-GAB-381-385-PLAYABLE.html` (stage `data-tpl="384"`, handlers `d384*`).
