v2.4 : choix du clavier azerty ou qwerty

This commit is contained in:
lrdlg
2026-07-21 06:39:45 +02:00
parent 166ec447d5
commit 55eabec68c
6 changed files with 949 additions and 23 deletions
+120
View File
@@ -0,0 +1,120 @@
# 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.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, fondamentalequinte, boogie, tresillo 332, 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.