187 lines
14 KiB
Markdown
187 lines
14 KiB
Markdown
# Journal des versions — _chordlab
|
||
|
||
Historique des ajouts, modifications et corrections. Les versions les plus récentes figurent en haut.
|
||
|
||
Conventions :
|
||
**Ajouté** (nouvelle fonctionnalité) · **Modifié** (comportement existant changé) · **Corrigé** (bug) · **Retiré** (fonctionnalité supprimée) · **Documentation**
|
||
|
||
---
|
||
|
||
## [2.8] — édition des accords dans la progression
|
||
|
||
### Ajouté
|
||
- **Édition d'un slot existant.** Chaque slot porte un bouton ✎ : il **recharge la configuration de l'accord** (type, tensions, altérations, voicing, drop, basse/slash, tonalité) dans les commandes principales. On retouche librement — y compris rejouer une autre fondamentale — puis **✓ mettre à jour** réécrit l'accord dans le même slot en conservant sa durée, ou **✕ annuler** laisse le slot intact. Re-cliquer ✎ sort du mode édition.
|
||
- Chaque slot mémorise désormais sa **configuration source**, ce qui le rend ré-éditable. Les slots générés par preset et par ✦ suggérer sont éditables de la même façon.
|
||
- La configuration voyage dans les sessions `.json`.
|
||
|
||
### Corrigé
|
||
- **Robustesse audio** : une éventuelle défaillance de l'aperçu Web Audio n'interrompt plus l'interface ni la sortie MIDI (l'aperçu échoue silencieusement, le reste continue).
|
||
|
||
### Notes
|
||
- L'édition regénère l'accord à partir des commandes (sans voice-leading automatique), pour un résultat prévisible.
|
||
- Les slots issus d'anciennes sessions (sans configuration mémorisée) restent supprimables/déplaçables ; l'édition fine nécessite qu'ils aient été créés en 2.8+.
|
||
|
||
---
|
||
|
||
## [2.7] — Key Mode : contrôle complet du type et des tensions
|
||
|
||
### Corrigé
|
||
- **En Key Mode, les tensions altérées ♭9, ♯9, ♯11, ♭5, ♯5 n'avaient aucun effet.** Le constructeur diatonique ne câblait que 6, m7, M7, 9, 11, 13 (et no3). Les cinq altérations manquantes sont désormais appliquées comme colorations chromatiques sur l'accord diatonique.
|
||
- **En Key Mode, les boutons de type paraissaient morts.** C'était en partie voulu (la qualité vient du degré de la gamme), mais sans aucune échappatoire.
|
||
|
||
### Ajouté
|
||
- **Type override en Key Mode.** Les boutons de type deviennent des interrupteurs : par défaut aucun n'est allumé (mode « auto », qualité diatonique du degré) ; cliquer un type l'**épingle** (LED allumée) et force cette qualité sur la fondamentale jouée, avec accès complet aux tensions et altérations ; re-cliquer le même type revient en auto. La fondamentale **reste dans la tonalité** dans tous les cas (les notes hors gamme restent muettes).
|
||
- L'état d'épinglage est enregistré dans les sessions `.json`.
|
||
|
||
### Modifié
|
||
- Hors Key Mode, les boutons de type conservent leur comportement de sélection unique (radio) inchangé.
|
||
- Nommage diatonique unifié : l'astérisque `*` (harmonisation dans la tonalité) est conservé et suffixe le nom complet, tensions comprises (`Dm7(♭9)*`).
|
||
|
||
---
|
||
|
||
## [2.6] — export tracker (.txt)
|
||
|
||
### Ajouté
|
||
- **Export d'un fichier texte pour trackers** (Polyend Tracker Mini et similaires), en plus du `.mid`. Le fichier contient une grille de pattern façon tracker : chaque note de l'accord occupe une piste (`T1..Tn`, de la plus grave à la plus aiguë), la basse a sa propre colonne (`B`), les accords sont plaqués et tenus. `OFF` coupe une voix, `...` maintient.
|
||
- **Sélecteur de résolution** : 1 step = 1/16, 1/8 (défaut) ou 1/4 (un pas par temps). Il détermine l'espacement des accords sur la grille et doit correspondre à la résolution de pattern choisie sur le tracker.
|
||
- **Section de référence** sous la grille : pour chaque accord, ses notes en notation tracker **et leur numéro MIDI**, avec la plage de steps occupée.
|
||
- Gestion correcte des changements de nombre de voix : quand un accord a moins de notes que le précédent, un `OFF` est écrit sur les pistes libérées. Une ligne `OFF` finale ferme le pattern.
|
||
- En-tête localisé (FR/EN) reprenant tonalité, BPM, résolution et conventions de notation.
|
||
|
||
### Notes d'implémentation
|
||
- Convention d'octave : MIDI 60 = `C-4`. Le numéro MIDI est indiqué à côté de chaque note dans la section de référence, ce qui lève toute ambiguïté si l'affichage d'octave du tracker diffère.
|
||
- Le fichier texte utilise les accords plaqués (voicing courant), indépendamment du mode de performance choisi pour le `.mid`.
|
||
- La résolution retenue est enregistrée dans les sessions `.json`.
|
||
|
||
---
|
||
|
||
## [2.5] — interface bilingue
|
||
|
||
### Ajouté
|
||
- **Sélecteur de langue FR / EN** dans l'en-tête de l'application. La totalité de l'interface bascule : titres de modules, libellés, listes déroulantes, boutons, infobulles, messages d'état, ligne d'aide du clavier et texte des slots vides.
|
||
- **Détection au démarrage** d'après la langue du navigateur (`fr` → français, sinon anglais), modifiable d'un clic.
|
||
- La langue retenue est **enregistrée dans les sessions `.json`** et restaurée au chargement.
|
||
- L'attribut `lang` du document suit la langue choisie, pour les lecteurs d'écran et la synthèse vocale.
|
||
|
||
### Modifié
|
||
- La ligne d'aide du clavier combine désormais langue et disposition : quatre variantes possibles (FR/EN × QWERTY/AZERTY).
|
||
- Le vocabulaire musical universel reste inchangé dans les deux langues : noms de notes et d'accords, types (DIM, MIN, MAJ, AUG, SUS2, SUS4, 5, m♭6), tensions et altérations, modes de performance (block, strum, harp, arp), drop voicings et valeurs rythmiques.
|
||
|
||
### Notes d'implémentation
|
||
- Le français reste la version de référence dans le balisage ; les textes d'origine sont capturés au chargement et restaurés au retour en FR, ce qui évite toute perte après plusieurs changements de langue.
|
||
- Un seul fichier applicatif : pas de version anglaise séparée, donc aucun risque de divergence entre les deux langues.
|
||
|
||
---
|
||
|
||
## [2.4] — dispositions clavier QWERTY et AZERTY
|
||
|
||
### Ajouté
|
||
- **Sélecteur de disposition clavier QWERTY / AZERTY**, placé sous le clavier de l'application. Jusqu'ici la correspondance des touches était figée en QWERTY : sur un clavier AZERTY, les deux touches concernées par la divergence sont précisément **A→Q (Do) et W→Z (Do dièse)**, ce qui rendait le jeu au clavier physique impraticable. Les dix autres touches (S E D F T G Y H U J) sont communes aux deux dispositions.
|
||
- **Détection au démarrage** d'après la langue du navigateur : AZERTY si la langue commence par `fr`, QWERTY sinon. Il s'agit d'une heuristique, le sélecteur permet de la corriger en un clic.
|
||
- La disposition retenue est **enregistrée dans les sessions `.json`** et restaurée au chargement.
|
||
- La ligne d'aide sous le clavier affiche les lettres de la disposition active.
|
||
|
||
### Modifié
|
||
- La table de correspondance unique est remplacée par deux tables commutables ; les gestionnaires d'événements clavier lisent la disposition courante à chaque frappe.
|
||
|
||
### Documentation
|
||
- Manuels FR et EN : section « Raccourcis clavier » complétée, figure 12 montrant les deux dispositions côte à côte avec les touches divergentes mises en évidence.
|
||
- Tutoriel Markdown et README mis à jour.
|
||
|
||
---
|
||
|
||
## [2.3] — correctif basse slash
|
||
|
||
### Corrigé
|
||
- **Le sélecteur « basse / » restait sans effet en Key Mode.** La basse jouait systématiquement la fondamentale, quel que soit le choix (tierce, quinte, septième). Le calcul du renversement reconstruisait l'accord à partir du type et des tensions ; or en Key Mode l'accord provient de l'harmonisation diatonique et ne passe pas par ce chemin. Le bug était invisible hors Key Mode, ce qui le rendait intermittent selon la configuration.
|
||
*Correction :* `slashInterval()` et `bassNoteFor()` remplacés par `slashIntervalFrom()` et `bassFromRaw()`, qui dérivent la note de basse des **notes réelles de l'accord** — valable dans les deux modes.
|
||
- **Basse forcée sur la fondamentale dans les progressions générées.** Le chargement d'un preset et le bouton *✦ suggérer* écrivaient la basse en dur, ignorant le sélecteur ainsi que le nom slash (`C/E`) dans le libellé du slot.
|
||
- Le nom d'accord slash s'affiche désormais correctement partout, y compris en Key Mode (`C/E`, `Dm/F`, `G7*/F`).
|
||
|
||
### Comportement à connaître
|
||
- Demander la **septième** sur une triade (accord sans septième) fait retomber la basse sur la fondamentale plutôt que d'inventer une note. Activer la tension `m7` ou `M7` pour l'obtenir.
|
||
|
||
---
|
||
|
||
## [2.2] — simplification de la basse
|
||
|
||
### Retiré
|
||
- **Les 10 rythmiques de basse** introduites en 2.1 (sélecteur *rythme B*, affichage LCD associé, moteur `renderBassEvents`, persistance en session). La basse revient à une **note tenue** sur toute la durée de l'accord.
|
||
|
||
### Conservé
|
||
- Les durées libres de 1 à 16 temps par slot (voir 2.1). Les sessions `.json` enregistrées en 2.1 se rechargent sans erreur : le champ de rythme éventuel est ignoré.
|
||
|
||
---
|
||
|
||
## [2.1] — rythmiques de basse et durées libres
|
||
|
||
### Ajouté
|
||
- **10 rythmiques de basse** : tenue, noires, croches, contretemps, octaves alternées, fondamentale–quinte, boogie, tresillo 3–3–2, pompe, aléatoire probabiliste. Rendues à l'identique en audition, MIDI live et export `.mid`, avec bornage de chaque frappe à la fin du slot.
|
||
- **Durée de slot réglable de 1 à 16 temps** au pas de 1, via des boutons `−` / `+`. Rend possibles les accords de 3, 5 ou 7 temps et les mesures asymétriques.
|
||
|
||
### Modifié
|
||
- Le badge de durée cyclique (4 → 8 → 2 → 1 temps) est remplacé par les boutons `−` / `+`.
|
||
- Chargement de session : les durées sont bornées entre 1 et 16 pour garantir la compatibilité ascendante.
|
||
|
||
---
|
||
|
||
## [2.0] — refonte harmonique
|
||
|
||
### Ajouté
|
||
- **Types d'accords portés de 4 à 8**, tous en boutons directs : Dim, Min, Maj, Aug, Sus2, Sus4, power chord (5), m♭6.
|
||
- **Tensions étendues** : ♭9, ♯9, 11, ♯11, 13 s'ajoutent aux 6, m7, M7, 9.
|
||
- **Altérations** : ♭5 et ♯5 (qui *remplacent* la quinte au lieu de s'y ajouter), et `no3` pour retirer la tierce.
|
||
- **Drop voicings** appliqués après la rotation : close, drop 2, drop 3, drop 2+4, spread.
|
||
- **Accords slash** : basse sur la fondamentale, la tierce, la quinte ou la septième, avec détection de l'intervalle correct selon le type d'accord et affichage `C/E` sur le LCD.
|
||
- **Voice-leading** : `VL AUTO` re-voice chaque accord ajouté pour minimiser le déplacement des voix ; le bouton `⇄ voice-leading` optimise toute la progression d'un coup.
|
||
- **Suggestion harmonique** (`✦ suggérer`) : propose l'accord suivant via une table d'harmonie fonctionnelle, dans la tonalité courante.
|
||
- **Key Mode porté à 8 gammes** : majeur, mineur naturel, mineur harmonique, dorien, phrygien, lydien, mixolydien, locrien. Harmonisation diatonique jusqu'à la 13e.
|
||
- **Modes de performance** : block, strum ↑/↓, harp, arpèges ↑/↓/↕/aléatoire, à 1/8, 1/16 ou 1/32. Rendus dans l'audio, le MIDI live **et** l'export `.mid` (rendu désactivable).
|
||
- **Humanisation** optionnelle des vélocités (±10) et du timing (±15 ms).
|
||
- **Durée individuelle par slot** et réordonnancement des slots (`‹` / `›`).
|
||
- **Sauvegarde et chargement de session** en fichier `.json` (réglages complets + progression). Aucun stockage navigateur : le fichier est l'unique persistance.
|
||
- Preset supplémentaire : cycle des quintes.
|
||
|
||
### Modifié
|
||
- Les types d'accords passent de la sélection multiple avec combinaisons implicites à une **sélection unique** : Aug et Sus2 deviennent des boutons dédiés au lieu de résulter d'une combinaison.
|
||
- Le moteur de rendu est unifié : une fonction `renderEvents()` unique alimente l'audio, le MIDI live et l'export, ce qui garantit que les trois sorties sont identiques.
|
||
- Nommage des accords enrichi (`Cdim7`, `Cø7`, `C7(♭9)`, `Cadd9`, `Cmaj7(♯11)`…).
|
||
|
||
### Corrigé
|
||
- Nommage des accords `add9`, `add11` et `add13` : ils s'écrivaient entre parenthèses comme des tensions alors qu'aucune septième n'était présente.
|
||
|
||
---
|
||
|
||
## [1.0] — version initiale
|
||
|
||
### Ajouté
|
||
- Construction d'accords par description : clavier une octave pour la fondamentale, 4 types (Dim, Min, Maj, Sus) et 4 extensions empilables (6, m7, M7, 9).
|
||
- Combinaisons implicites : `Dim + Maj` = augmenté, `Min + Sus` = sus2.
|
||
- **Knob de voicing rotatif ±8** : chaque cran remonte la note la plus grave d'une octave (ou descend la plus aiguë).
|
||
- **Key Mode** sur deux gammes (majeur, mineur naturel) avec grisage des touches hors tonalité.
|
||
- Moteur de basse sur canal MIDI séparé (−1 / −2 octaves).
|
||
- Rack de progression avec ajout (`ADD` / barre espace), lecture, boucle et BPM réglable.
|
||
- 7 presets de cadences générés dans la tonalité choisie.
|
||
- **Sortie Web MIDI live** avec canaux distincts pour les accords et la basse.
|
||
- **Export `.mid`** : writer MIDI maison, format 1, PPQ 480, tempo intégré, une ou deux pistes.
|
||
- Synthé de pré-écoute intégré (Web Audio : deux dents de scie désaccordées, filtre passe-bas ; onde triangle pour la basse).
|
||
|
||
---
|
||
|
||
## Documentation
|
||
|
||
| Version | Élément |
|
||
|---|---|
|
||
| 2.3 | Manuel visuel traduit en anglais (`tuto_en.html`), sélecteur de langue entre les deux manuels, liens vers les manuels ajoutés dans le pied de page de l'application |
|
||
| 2.2 | Manuel visuel HTML (`tuto.html`) : 10 sections et 12 figures SVG (cartographie de l'interface, rotation du voicing, drop voicings, Key Mode, anatomie d'un slot, voice-leading, modes de performance en piano-roll, routage MIDI, flux d'export, raccourcis) |
|
||
| 2.0 | `README.md`, tutoriel d'utilisation Markdown, tutoriel de déploiement Coolify (dépôt Git → build pack statique → Traefik, procédure de mise à jour et table de dépannage) |
|
||
|
||
---
|
||
|
||
## Notes techniques transversales
|
||
|
||
- **Aucune dépendance externe** depuis la version 1.0 : JavaScript natif, Web Audio API, Web MIDI API, FileReader. Un seul fichier HTML.
|
||
- **Aucun stockage navigateur** (ni `localStorage`, ni `sessionStorage`) : l'état ne persiste que par les fichiers de session `.json` exportés.
|
||
- **Web MIDI exige un contexte sécurisé** (`https://` ou `localhost`). En `file://`, l'audio et l'export fonctionnent mais la sortie MIDI live est bloquée par le navigateur. Safari ne supporte pas Web MIDI.
|
||
- Canaux MIDI par défaut : accords sur le canal 3, basse sur le canal 5.
|