mirror of
https://github.com/9x/sheetmusictrainer.git
synced 2026-11-03 22:03:54 +01:00
Mobile width fix, 6/8 crash fix, more arpeggio+Giuliani variants
- PhraseSheetMusic: min width per bar scales with notation density (16ths 320px, 8ths 260px, quarters 210px) — narrow screens wrap into more rows instead of clipping notes off-screen. - 6/8 crash fixed at the root: melody templatesFor had no 6/8 templates (empty pool -> pick on empty array). Added 6/8 template sets for levels 1/2 plus an empty-pool fallback guard so generators can never pick from an empty array again (any meter/level combination stays playable). - More arpeggio broken-chord figures: 1-3-5-3, 1-2-1-3-2-1, 1-5-4-5-3-5, 1-3-2-5-3-2. - More Giuliani patterns: p-i-a-i (wide), p-m-a-m-i, p-i-m-a-m-i (waltz feel), p-i-m-a-i-a. - Tests 179/179.
This commit is contained in:
@@ -17,12 +17,16 @@ import { TUNINGS, type Tuning } from '../music/Tunings';
|
||||
import { makeRng } from './melodyGenerator';
|
||||
|
||||
export type GiulianiPattern =
|
||||
| 'pim' // Studies 1–20 feel: bass + two upper voices
|
||||
| 'pima' // Studies 21–40: bass + three upper voices
|
||||
| 'pami' // bass + descending upper voices
|
||||
| 'aim' // upper voices first
|
||||
| 'pimamim'// six-note rolling
|
||||
| 'pmamim';// asymmetric
|
||||
| 'pim' // Studies 1–20 feel: bass + two upper voices
|
||||
| 'pima' // Studies 21–40: bass + three upper voices
|
||||
| 'pami' // bass + descending upper voices
|
||||
| 'aim' // upper voices first
|
||||
| 'pimamim' // six-note rolling
|
||||
| 'pmamim' // asymmetric
|
||||
| 'piai' // bass + octave-third (wide spacing)
|
||||
| 'pmami' // bass + fifth-octave-third
|
||||
| 'pimami' // bass-third-fifth-third (waltz-like)
|
||||
| 'pimaia'; // bass with two upper-voice pairs
|
||||
|
||||
export const GIULIANI_PATTERN_LABELS: Record<GiulianiPattern, string> = {
|
||||
pim: 'p-i-m (3 voices)',
|
||||
@@ -31,6 +35,10 @@ export const GIULIANI_PATTERN_LABELS: Record<GiulianiPattern, string> = {
|
||||
aim: 'a-i-m',
|
||||
pimamim: 'p-i-m-a-m-i',
|
||||
pmamim: 'p-m-a-m-i-m',
|
||||
piai: 'p-i-a-i (wide)',
|
||||
pmami: 'p-m-a-m-i',
|
||||
pimami: 'p-i-m-a-m-i (waltz)',
|
||||
pimaia: 'p-i-m-a-i-a',
|
||||
};
|
||||
|
||||
/** Figure voice slots per repetition (indices into the cycle [root, third, fifth, octave]). */
|
||||
@@ -41,6 +49,10 @@ const FIGURES: Record<GiulianiPattern, number[]> = {
|
||||
aim: [0, 3, 1],
|
||||
pimamim: [0, 1, 2, 3, 2, 1],
|
||||
pmamim: [0, 2, 3, 2, 1, 2],
|
||||
piai: [0, 1, 3, 1],
|
||||
pmami: [0, 2, 3, 2, 1],
|
||||
pimami: [0, 1, 2, 3, 2],
|
||||
pimaia: [0, 1, 2, 3, 1, 3],
|
||||
};
|
||||
|
||||
export interface GiulianiConfig {
|
||||
|
||||
Reference in New Issue
Block a user