đź“‹ Recettes
Accueil
+ Nouvelle recette
Accueil
+ Nouvelle recette
Éditer la recette
Projet
Statut
Brouillon
En cours
Terminée
Titre
Description
**Revue experte du point de vue d'une pianiste exigeante** (joueuse réelle), sur la branche `pivot-piano-recette` (working copy hôte, audit code + théorie). Objectif : garder une TRACE priorisée des pistes d'amélioration UX du pivot guitare → piano. **Méthode** — 4 axes : (1) cohérence produit & style gothique/corbeau, (2) justesse de la THÉORIE MUSICALE (vérifiée à la main sur les data-structures), (3) pertinence/complétude des modules, (4) UX/ergonomie sur les 13 écrans. **Verdict en une ligne** : le MOTEUR musical est solide (gammes, accords, détection de tonalité tous justes), mais le PIVOT piano est inachevé (reliquats guitare visibles dès le 1er lancement) et il manque les fondamentaux d'un outil pianiste (choix d'inversion, main G/D, spelling enharmonique tonal, patterns piano exposés). **Décompte** : 🔴 bloquants ~8 · 🟠majeurs ~10 · 🟡 mineurs ~8.
Cas d'usage
Une pianiste (joueuse de piano réelle et exigeante) découvre puis utilise GrooveGrave de bout en bout : onboarding, dictionnaire d'accords, gammes/modes, composer, impro, feuille de chanson, éditeur, métronome, réglages, paywall. Elle attend une théorie juste, un spelling correct, le choix des inversions/voicings et une séparation main gauche/main droite.
Étapes
Audit conduit sur le code de la branche `pivot-piano-recette` : 1. Extraction verbatim des data-structures théoriques (ChordDatabase, ScaleDatabase, PianoVoicingProvider, HarmonyAnalysis, PianoPatterns) puis vérification manuelle des formules d'intervalles, du spelling et des voicings. 2. Recherche exhaustive des reliquats guitare (guitar/fret/string/capo/strum/pick/médiator/tab) et évaluation de la cohérence de l'univers gothique-corbeau. 3. Revue UX écran par écran (Views/) du point de vue pianiste : découvrabilité, libellés, feedback, réglages piano manquants. 4. Priorisation par impact utilisateur (bloquant / majeur / mineur).
Cas de test
## A. THÉORIE MUSICALE — vĂ©rifiĂ©e Ă la main > Cross-check binĂ´me : dĂ©tail thĂ©orie par fichier dans la recette **458f5c36** (annexe, par Bill/QA). RĂ©solutions consolidĂ©es en bas de cette recette. ### âś… Ce qui est JUSTE (Ă valoriser) - **24 gammes / modes** : formules d'intervalles TOUTES exactes — majeure, mineures (naturelle/harmonique/mĂ©lodique), 7 modes grecs, pentatoniques, blues, exotiques (phrygien dominant, hongroise mineure, napolitaine, diminuĂ©e, par tons, bebop dominante). - **Accords** : triades (maj/min/dim/aug/sus2/sus4/power) + extensions (7, maj7, 9, maj9, 11, 13, add9/11, b5/#5, b9/#9, 6, 6/9, 7sus) — toutes les formules exactes. Renversements corrects (note grave +12). - **DĂ©tection de tonalitĂ©** : profils Krumhansl-Kessler 1982 (valeurs exactes) + corrĂ©lation de Pearson — implĂ©mentation sophistiquĂ©e et correcte. - **Patterns piano** (PianoPatterns.swift) : basse d'Alberti [0,2,1,2], oom-pah, valse 3/4, charleston, ballade, arpèges up/down/brisĂ© — musicalement justes. ### đź”´ CRITIQUE — Spelling enharmonique NON tonal `ChordDatabase.normalizeChordName` force **tous les bĂ©mols en dièses** (Db→C#, Eb→D#, Gb→F#, Ab→G#, Bb→A#) et l'affichage repose sur des pitch-classes entières (0–11). - **Constat** : un accord de **Miâ™ mineur** s'affiche **RĂ©#–Fa#–La#** au lieu de **Miâ™â€“Solâ™â€“Siâ™** ; les gammes en tonalitĂ©s bĂ©mols (RĂ©â™, Miâ™, Laâ™â€¦) sont mal orthographiĂ©es (dièses au lieu de bĂ©mols, risque de lettres rĂ©pĂ©tĂ©es type Fa/Fa#). - **SĂ©vĂ©ritĂ©** : đź”´ Bloquant pour une pianiste (lecture de partition faussĂ©e). - **AmĂ©lioration** : spelling **key-aware** — choisir #/â™ selon la tonalitĂ©/le degrĂ© (cercle des quintes), pas une normalisation globale en dièses. Exposer aussi un toggle enharmonique manuel. ### đźź MAJEUR — Familles d'accords ø et °7 pas first-class - **Constat** : `m7â™5` (demi-diminuĂ© ø) et `dim7` (°7) doivent ĂŞtre composĂ©s ; un dim7 obtenu via `dim`+`6` s'afficherait **« dim6 »** (label thĂ©orique faux). - **AmĂ©lioration** : ajouter half-diminished (ø / m7â™5) et diminished 7th (°7) comme qualitĂ©s/labels de premier ordre dans ChordQuality + le parser. ### đźź MAJEUR — DegrĂ©s romains en tonalitĂ© mineure - **Constat** : `minorRomanLabels` note les degrĂ©s diatoniques **â™III / â™VI / â™VII** ; or le bĂ©mol n'est correct que par rapport au MAJEUR parallèle. En analyse d'une tonalitĂ© mineure on Ă©crit **III / VI / VII** (sans bĂ©mol). - **AmĂ©lioration** : table de degrĂ©s dĂ©pendante du mode (majeur vs mineur), sans prĂ©fixe â™ pour les degrĂ©s diatoniques du mineur. ### 🟡 MINEUR - Analyse harmonique limitĂ©e Ă **major/minor** (pas de modal) alors que l'app propose 7 modes → Ă©cart de complĂ©tude. - Gamme **« Chinoise » [0,4,6,7,11]** = invalide/obscure → remplacer par une pentatonique **gong [0,2,4,7,9]** ou **yu [0,3,5,7,10]**. --- ## B. COHÉRENCE PRODUIT & RELIQUATS GUITARE ### đź”´ Bloquant (visible utilisateur) - **Chanson par dĂ©faut = « Le Squelette Guitariste » / « The Skeleton Guitarist »** avec paroles guitare (« Je gratte ma guitare »…) — `AppFirstLaunch.swift` l.27-162. **Vue Ă CHAQUE premier lancement.** → Réécrire en « Le Squelette Pianiste » + paroles piano. - **Onboarding guitare** : « L'app ultime pour les guitaristes » (`LocalizationManager` l.384) et page « Accordez votre guitare » (l.389). 1res pages vues. → « musiciens » / « MĂ©tronome ». - **ChordDiagramView** : `enum Instrument { guitar, ukulele }` — **pas de piano** ; `ShowMeView` force `getFingerings(instrument:.guitar)` → la pianiste a l'audio piano MAIS un diagramme d'accord GUITARE. → Ajouter le cas `.piano` (le clavier PianoKeyboardView existe dĂ©jĂ ). - **InstrumentProfile.InstrumentType** : pas de `.piano` (app piano-first mais le piano n'existe pas comme instrument → « Mon piano » impossible). - **Contradiction splash ↔ onboarding** : le splash montre piano/corbeau, l'onboarding parle guitare. ### đźź Majeur - LibellĂ©s Settings « Grattage / Strum », warnings « guitare acoustique » (Ă©cho, reset) ; tutoriels « Ă la guitare » (pages 13, 17). - `PickingPatterns.swift` = guitare pure (cordes 1-6, fret offsets) exposĂ© dans l'UX alors que **`PianoPatterns.swift` (Alberti, oom-pah, valse, arpèges) existe dĂ©jĂ mais n'est PAS branchĂ© Ă l'UI**. → Brancher l'UI sur PianoPatterns et retirer picking cĂ´tĂ© piano. - Code mort Ă supprimer : `FretboardView.swift`, `MediatorView.swift` (mĂ©diator). ### 🟡 Mineur - Univers « corbeau/raven » prĂ©sent seulement dans la vidĂ©o splash, pas nommĂ©/tenu dans le thème code (`GrooveGraveTheme` = « Undead Chords »). --- ## C. UX PAR ÉCRAN (point de vue pianiste) **Transverses CRITIQUES đź”´** 1. **Pas de choix d'inversion / voicing** : tout joue `firstVoicing()` (Composer l.703, Dictionnaire) — impossible d'imposer une fondamentale ou une position (drop-2, shell…). 2. **Patterns incompatibles piano** : rhythm/picking pensĂ©s strum/plectre ; manquent Alberti/walking/stride/broken chords — alors qu'ils existent dans PianoPatterns (voir B). 3. **Pas de sĂ©paration main gauche / main droite** — cĹ“ur du jeu pianiste (accompagnement vs mĂ©lodie). 4. **Transposition ambiguĂ«** : `TransposeControl` libellĂ© « TonalitĂ© » alors que c'est +X demi-tons ; pas de notion de capo/tonalitĂ© d'origine. 5. **MĂ©tronome sans subdivisions / count-in / accents par temps.** **Par Ă©cran (constat → amĂ©lioration)** - **Accueil** : libellĂ© « MĂ©tronome » sur image `scene-tuner` (accordeur/mĂ©tronome ambigu) ; pas de raccourci « clavier seul ». → Clarifier l'icĂ´ne, ajouter un mode clavier libre. - **Dictionnaire d'accords** : n'affiche que **4 voicings** (`prefix(4)`) sans le dire ; `improMode` = shuffle staccato de notes isolĂ©es (trompeur) ; pas d'annotation d'inversion ni d'enharmonie. → Montrer tous les voicings + Ă©tiqueter position/inversion. - **Gammes & modes** : pas de doigtĂ©s suggĂ©rĂ©s ; notes non Ă©tiquetĂ©es par intervalle en lecture ; relatifs vs parallèles non expliquĂ©s. → DoigtĂ©s, Ă©tiquettes T/2/3…, note pĂ©dagogique modes. - **Composer** : pas de choix d'inversion ; tempo non partagĂ© (reset au retour) ; pas de drag-to-reorder ; progressions non nommĂ©es (afficher « ii-V-I »). → Inversions par accord, tempo global, rĂ©ordonnancement, libellĂ©s fonctionnels. - **Impro / ShowMe** : terme « fingering » (guitare) au lieu d'« inversion » ; patterns guitare ; pas de MG/MD ni mĂ©lodie. → Vocabulaire piano, patterns PianoPatterns, jeu accord+mĂ©lodie. - **Feuille de chanson** : « TonalitĂ© » trompeur (= transposition) ; accords non tapables pour Ă©couter ; toggle « analyse harmonique » invisible ; pas de highlight de l'accord en cours de lecture. → Renommer, rendre les accords tapables, exposer le toggle, surligner la lecture. - **Éditeur** : syntaxe d'accord non documentĂ©e ; pas de validation temps rĂ©el ni undo/redo. → Aide syntaxe, validation, undo. - **MĂ©tronome** : pas de subdivisions ; cercles visuels dĂ©synchronisĂ©s du clic ; tempo isolĂ©. → Subdivisions/swing, sync visuel, count-in. - **RĂ©glages** : effets non documentĂ©s (reverb/sustain/delay), « profils d'instrument » obscurs ; pas de transposition clavier ni d'inversion par dĂ©faut. → Descriptions + preview, rĂ©glage inversion dĂ©faut. - **Onboarding** : page « Tuner » = en fait un mĂ©tronome (confusion) ; passif, rien sur voicings/MG-MD ; workflow piano non expliquĂ©. → Corriger, rendre interactif, prĂ©senter le parcours piano. - **Paywall** : gates premium/free pas explicitĂ©s avant blocage. → Marquer les fonctions premium en amont. - **Clavier piano** : pas d'indication d'octave ; glow compact quasi invisible ; pas de doigtĂ© ni MG/MD. → Repère d'octave, contraste du glow, rĂ´les de main. **HAUTE đźź ** : accords Ă©tendus (maj13, 11) rĂ©duits sans warning (ChordQualityMapper) ; tempo non partagĂ© entre modules ; pas de choix enharmonique (Do#/RĂ©b — rejoint A) ; pas de doigtĂ©s suggĂ©rĂ©s. --- ## D. PARCOURS RÉELS (pianiste) — dĂ©couvrabilitĂ© & flow Ce que la revue Ă©cran-par-Ă©cran ne montre pas : la friction se cumule le long d'un parcours. **Parcours 1 — Premier lancement (dĂ©couverte)** Splash piano/corbeau âś… → onboarding « L'app ultime pour les guitaristes » puis page « Accordez votre guitare » đź”´ → 1re chanson « Le Squelette Guitariste » (paroles guitare) đź”´. → Friction : dissonance immĂ©diate entre l'univers annoncĂ© (piano/corbeau) et le contenu (guitare). Perte de confiance dès l'entrĂ©e. **P0.** **Parcours 2 — « Je veux jouer Fa#m7 correctement »** Dictionnaire → F# → m7 → seulement 4 voicings (sans l'indiquer), tous en `firstVoicing()`, aucun choix d'inversion ni annotation de position → passage Ă ShowMe → **diagramme GUITARE** alors qu'elle joue piano. → Friction : impossible de choisir la position/inversion ; diagramme non pianistique. En tonalitĂ© bĂ©mol le spelling serait faux (cf. A). **P1.** **Parcours 3 — « Accompagner une chanson, main gauche + main droite »** SongSheet → contrĂ´le « TonalitĂ© » (= en fait transposition, libellĂ© trompeur) → accords non tapables pour Ă©couter → analyse harmonique dont le toggle est invisible → ShowMe : patterns strum/picking (guitare), pas d'Alberti/stride/walking, **aucune sĂ©paration main G / main D**. → Friction : le cĹ“ur du jeu pianiste (accompagnement 2 mains + pattern idiomatique) est absent — alors que `PianoPatterns` existe dĂ©jĂ en code mais n'est pas branchĂ©. **P0 (patterns) + P1 (mains).** --- ## SUIVI / RÉSOLUTIONS (cross-check binĂ´me Bill âś• Alice) - 🎉 **P0 « PIVOT VISIBLE » COMPLET (2026-07-01)** — Alice : chanson « Squelette Pianiste » + onboarding guitare→piano + 18 clĂ©s loc (commits 1bcc6b0, 631f44e) ; Bill : ShowMe câblĂ© patterns piano (c2e1207) + `ShowMeView` l.376/433 `FingeringDiagramView(.guitar)` → `PianoKeyboardView`/voicings (renversements navigables, f2ca022) + splash find.mp4 piano/corbeau (ab9d6d4). âś… **Plus AUCUN diagramme guitare visible par une pianiste.** - 🗒️ Reste (backlog P1 thĂ©orie, cĂ´tĂ© donnĂ©es — Bill, quand Antoine priorise) : spelling enharmonique key-aware ; ø (m7â™5) / °7 (dim7) first-class ; degrĂ©s mineurs III/VI/VII sans â™. - đź§ą Cleanup optionnel non-bloquant : wrapper guitare `ChordDiagramView` (#Preview only) + cache fingerings interne ShowMe = vestigial non visible. - đź”§ **P0 EN COURS (Alice, commits 1bcc6b0 + 631f44e sur pivot-piano-recette)** : - âś… Chanson par dĂ©faut « Le Squelette Guitariste » → « Le Squelette Pianiste » (FR+EN, paroles piano). - âś… Onboarding : « guitaristes » → « pianistes » ; page 4 « Accordez votre guitare » (accordeur disparu) → **MĂ©tronome** (clĂ©s onboarding.tuner.*→metronome.*). - âś… Retrait du reliquat mort `home.tuner` ; ajout des 18 clĂ©s dict manquantes (styles/patterns piano) FR+EN — corrige les affichages en clĂ© brute (dont `style.classical`). - 🔎 **Palier 2 — reclassĂ© après investigation (Alice)** : ajouter `.piano` aux enums Instrument/InstrumentType est INUTILE et Ă Ă©viter. - `PianoChordDiagramView` (Ă©quivalent piano complet : voicings, renversements, Ă©coute) EXISTE dĂ©jĂ et est branchĂ© dans SongSheetView (l.674) ; ChordDictionaryView utilise dĂ©jĂ PianoKeyboardView/PianoVoicingProvider. Le diagramme piano est donc essentiellement fait. - Le wrapper guitare `ChordDiagramView` n'est utilisĂ© que dans son propre #Preview → mort en prod (candidat suppression ; garder `FingeringDiagramView` tant que ShowMe l'utilise). - â›” **Seul reste rĂ©el** : `ShowMeView` l.376 & l.433 affiche encore `FingeringDiagramView(instrument:.guitar)` → swap vers `PianoChordDiagramView` (fichier de Bill). C'est le dernier diagramme guitare visible par une pianiste. - `InstrumentType.piano` : mis-fit (enum modèle-Ă -cordes : stringCount/openFrequencies) → NE PAS forcer en P0 ; design sĂ©parĂ© si l'enregistrement d'un vrai piano devient un besoin. - 🟡 [A/B] **Finding localisation** : la loc rĂ©elle = **FR + EN uniquement** (dicts hardcodĂ©s `frenchTranslations`/`englishTranslations`, rĂ©solution via `translations[key] ?? key`). Les `.lproj` es/de/pt ne sont PAS chargĂ©s → 3 langues de fichiers mais 2 langues rĂ©ellement servies. Ă€ arbitrer (charger les .strings ou assumer FR/EN). - âś… [A] `HarmonyAnalysis` l.102-104 : les extensions 9/11/13 omettaient la 7e de dominante implicite (vecteur chroma d'analyse faussĂ©, incohĂ©rent avec PianoVoicingProvider) — **corrigĂ© par Bill, commit aaec74b**. - âś… [B] Dictionnaire : styles rĂ©duits Ă **Classique / Jazz / Blues** (retrait rock/pop/manouche/bossa/folk/reggae/… ) + ajout d'un vrai style Classique (cadence + Pachelbel + Alberti) — **Bill, commit 8fa4d28**. - đź”— Annexe thĂ©orie par fichier : recette **458f5c36**. - â›” [A] **CONFIRMÉ Ă faire** (Bill) : ø (m7â™5) / °7 (dim7) pas first-class dans ChordQuality (seul `.diminished`) → dim7 composĂ© affichĂ© « dim6 » + voicing douteux. Fix : `.diminished7` / `.halfDiminished` natifs (ChordQuality + parsing + affichage °7 / ø). - â›” [A] **CONFIRMÉ Ă faire** (Bill) : degrĂ©s romains en mineur — HarmonyAnalysis l.185-187 note â™III/â™VI/â™VII (correct seulement vs majeur parallèle). Fix low-risk : retirer les â™ pour III/VI/VII en mode mineur.
Diagramme Mermaid
(optionnel)
Exemple:
flowchart LR\n A --> B
Ajouter des images
(PNG, JPEG, GIF, WebP — max 50MB)
Upload en cours...
Conclusions
Le **moteur théorique est fiable** (formules d'accords et de gammes exactes, détection de tonalité de niveau recherche) — c'est un vrai atout à mettre en avant. Le blocage n'est pas la justesse musicale mais **(1)** la finition du pivot (reliquats guitare visibles dès le 1er écran) et **(2)** l'absence des primitives attendues par une pianiste : choix d'inversion/voicing, séparation main gauche/droite, spelling enharmonique tonal, et exposition des patterns piano DÉJÀ présents dans le code mais non branchés à l'UI. Bonne nouvelle coût/impact : plusieurs correctifs à fort effet sont peu coûteux (réécrire la chanson/onboarding, brancher PianoPatterns à l'UI, ajouter le cas `.piano` au diagramme, corriger les libellés).
Recommandations
### Priorisation proposĂ©e (Ă trancher avec Bill / QA) **P0 — Bloquants pivot (rapides, fort impact perçu)** 0. **Brancher `PianoPatterns` (Alberti/oom-pah/valse/arpèges) Ă l'UI et retirer `PickingPatterns` cĂ´tĂ© piano** — meilleur ratio impact/coĂ»t (accord binĂ´me Bill/Alice). 1. Réécrire la chanson par dĂ©faut « Squelette Guitariste → Pianiste » + paroles (AppFirstLaunch). 2. Onboarding : retirer « guitaristes » et la page « Accordez votre guitare ». 3. Ajouter le cas `.piano` Ă ChordDiagramView / brancher le diagramme sur PianoKeyboardView pour ShowMe. 4. Ajouter `.piano` Ă InstrumentType (profil instrument). **P1 — Fondamentaux pianiste** 5. **Spelling enharmonique tonal** (key-aware #/â™) + toggle manuel — chantier thĂ©orie critique. 6. **Choix d'inversion / voicing** dans Dictionnaire, Composer, ShowMe (au lieu de firstVoicing systĂ©matique). 7. **Brancher PianoPatterns** (Alberti/oom-pah/valse/arpèges) Ă l'UI ; retirer picking guitare cĂ´tĂ© piano. 8. SĂ©parer **main gauche / main droite** (rĂ´les, sonoritĂ©s, illumination clavier). **P2 — ThĂ©orie & complĂ©tude** 9. Familles ø (m7â™5) et °7 first-class ; corriger les degrĂ©s mineurs (III/VI/VII sans â™). 10. Repère d'octave sur le clavier ; libellĂ©s « TonalitĂ© » → « Transposition » ; tempo partagĂ© entre modules. 11. MĂ©tronome : subdivisions, count-in, accents. **P3 — Nettoyage / polish** 12. Supprimer FretboardView & MediatorView ; harmoniser warnings/tutoriels guitare→piano ; nommer/tenir l'univers corbeau dans le thème ; renommer la gamme « Chinoise » ; Ă©tendre l'analyse harmonique aux modes.
Enregistrer
Annuler