Skip to content

Commit f34a1c7

Browse files
committed
Move MIDI Studio V2 controls into timeline instrument rows and repair UAT songs - PR_26146_025-midi-studio-v2-timeline-instrument-rows-and-songs
1 parent c3001b9 commit f34a1c7

8 files changed

Lines changed: 519 additions & 404 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# PR_26146_025 MIDI Studio V2 Timeline Instrument Rows And Songs Validation
2+
3+
Status: PASS
4+
5+
## Scope
6+
- Continued from PR_26146_024.
7+
- Removed the duplicate left Instruments column from the Studio workflow.
8+
- Moved preview instrument, mute, solo, volume slider toggle, and pan slider toggle controls into the editable timeline row headers.
9+
- Kept row identity instrument-first by making the selected preview instrument dropdown the visible row label; lane role text is secondary metadata.
10+
- Updated the UAT manifest to contain three populated studio arrangements:
11+
- Camptown Races UAT Reel
12+
- Frog Hop Nursery Rhyme UAT
13+
- Coal Mine Descent, using the former `quiet-village-pad` selection slot for regression coverage
14+
- Changed timing preview advancement from a fixed fast interval to tempo/subdivision-derived bar/beat/note column stepping.
15+
16+
## Validation Commands
17+
- PASS: `node --check tools/midi-studio-v2/js/controls/InstrumentGridControl.js`
18+
- PASS: `node --check tools/midi-studio-v2/js/MidiStudioV2App.js`
19+
- PASS: `node --check tools/midi-studio-v2/js/bootstrap.js`
20+
- PASS: `node --check tests/playwright/tools/MidiStudioV2.spec.mjs`
21+
- PASS: `node -e "JSON.parse(require('fs').readFileSync('tests/fixtures/midi-studio-v2/uat-midi-studio-v2.game.manifest.json','utf8')); console.log('json ok')"`
22+
- PASS: `rg --pcre2 -n "<style|on(click|change|input|submit)=|<script(?![^>]*src)" tools/midi-studio-v2/index.html` returned no matches.
23+
- PASS: `npx playwright test tests/playwright/tools/MidiStudioV2.spec.mjs -g "imports UAT|shows guided visible options|animates Preview Synth playhead|applies Preview Synth instruments|expands and restores" --reporter=list --workers=1`
24+
- PASS: `git diff --check` exited 0; Git reported line-ending normalization warnings only.
25+
26+
## Playwright Coverage
27+
- PASS: multiple manifest songs are listed.
28+
- PASS: Song 2 loads the Frog Hop nursery-rhyme fixture and populates the visible timeline.
29+
- PASS: Song 3 loads Coal Mine Descent through the former Quiet Village Pad selection slot.
30+
- PASS: selected songs immediately populate timeline rows.
31+
- PASS: instrument dropdowns are the visible row identity.
32+
- PASS: the duplicate left Instruments column is absent.
33+
- PASS: volume and pan icon buttons reveal their sliders.
34+
- PASS: note-cell editing updates playback data.
35+
- PASS: Play starts Preview Synth playback from visible timeline data.
36+
- PASS: the playhead advances by musical columns instead of racing on a fixed 90ms interval.
37+
- PASS: Stop All Audio clears Preview Synth playback state.
38+
39+
## Skips And Notes
40+
- Full samples smoke test: SKIP per request.
41+
- Sample JSON: SKIP; no sample JSON was modified.
42+
- Workspace lane: SKIP; Workspace contract/runtime files were not touched.
43+
- Whole-file historical MIDI Studio spec was attempted during troubleshooting and exceeded the command timeout; the final validation used the requested affected Playwright subset above.

tests/fixtures/midi-studio-v2/uat-midi-studio-v2.game.manifest.json

Lines changed: 74 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -75,40 +75,96 @@
7575
}
7676
},
7777
{
78-
"id": "menu-march-sketch",
79-
"name": "Menu March Sketch",
80-
"sourceMidi": "assets/music/midi/menu-march-sketch.mid",
81-
"instrumentSet": "Preview Synth sketch",
78+
"id": "frog-hop-nursery-rhyme",
79+
"name": "Frog Hop Nursery Rhyme UAT",
80+
"sourceMidi": "assets/music/midi/frog-hop-nursery-rhyme.mid",
81+
"instrumentSet": "Preview Synth frog-hop UAT band",
8282
"rendered": {},
8383
"defaultRuntimeFormat": "ogg",
8484
"loop": {
85-
"enabled": true
85+
"enabled": true,
86+
"startSeconds": 0,
87+
"endSeconds": 13
8688
},
8789
"director": {
88-
"mood": "confident",
90+
"mood": "playful",
8991
"intensity": "medium",
90-
"usage": ["menu"],
91-
"notes": "Secondary song to prove multi-song manifest selection."
92+
"usage": ["uat", "frog-hop", "nursery-rhyme"],
93+
"notes": "Original Frogger-style nursery-rhyme UAT fixture with simple public-domain/traditional contour, no copied game melody or lyrics."
9294
},
93-
"tags": ["uat", "menu"]
95+
"tags": ["uat", "frog-hop", "nursery-rhyme", "traditional-style"],
96+
"studioArrangement": {
97+
"tempo": "132",
98+
"key": "C major",
99+
"style": "chip",
100+
"sections": "hop:2, home:2",
101+
"beatsPerBar": "4",
102+
"subdivision": "1",
103+
"songSheet": {
104+
"intro": "C G F C",
105+
"loop": "C G C F"
106+
},
107+
"lanes": {
108+
"chords": "C C G C | F F C G | C G C F | G F C C",
109+
"bass": "C2 C2 G2 C2 | F2 F2 C2 G2 | C2 G2 C2 F2 | G2 F2 C2 C2",
110+
"pad": "C - G - | F - C - | C G C F | G - C -",
111+
"lead": "C5 D5 E5 C5 | G4 A4 G4 - | E5 G5 E5 C5 | D5 B4 C5 -",
112+
"drums": "kick hat snare hat | kick hat snare hat | kick hat snare hat | kick hat snare hat"
113+
},
114+
"previewInstruments": {
115+
"chords": "warm-pad",
116+
"bass": "synth-bass",
117+
"pad": "ambient-pad",
118+
"lead": "retro-square-lead",
119+
"drums": "basic-drums"
120+
}
121+
}
94122
},
95123
{
96124
"id": "quiet-village-pad",
97-
"name": "Quiet Village Pad",
98-
"sourceMidi": "assets/music/midi/quiet-village-pad.mid",
99-
"instrumentSet": "Preview Synth sketch",
125+
"name": "Coal Mine Descent",
126+
"sourceMidi": "assets/music/midi/coal-mine-descent.mid",
127+
"instrumentSet": "Preview Synth coal-mine UAT band",
100128
"rendered": {},
101129
"defaultRuntimeFormat": "ogg",
102130
"loop": {
103-
"enabled": false
131+
"enabled": true,
132+
"startSeconds": 0,
133+
"endSeconds": 15
104134
},
105135
"director": {
106-
"mood": "calm",
107-
"intensity": "low",
108-
"usage": ["ambient"],
109-
"notes": "Low-intensity contrast song for the imported song list."
136+
"mood": "tense",
137+
"intensity": "medium",
138+
"usage": ["uat", "coal-mine", "descent"],
139+
"notes": "Original descending groove that replaces the old Quiet Village Pad placeholder while preserving its selection slot for regression coverage."
110140
},
111-
"tags": ["uat", "ambient"]
141+
"tags": ["uat", "coal-mine", "descending-groove", "quiet-village-pad"],
142+
"studioArrangement": {
143+
"tempo": "108",
144+
"key": "D minor",
145+
"style": "ambient-loop",
146+
"sections": "shaft:2, descent:2",
147+
"beatsPerBar": "4",
148+
"subdivision": "1",
149+
"songSheet": {
150+
"intro": "Dm C F Am",
151+
"loop": "Dm C Gm Dm"
152+
},
153+
"lanes": {
154+
"chords": "Dm Dm C Am | F Am Gm Dm | Dm C F Am | Gm F Dm Dm",
155+
"bass": "D2 D2 C2 A1 | F2 E2 D2 D2 | D2 C2 A1 G1 | G1 F1 D2 D2",
156+
"pad": "Dm - C - | F - Dm - | Dm C F Am | Gm - Dm -",
157+
"lead": "D5 C5 A4 G4 | F4 E4 D4 - | C5 A4 G4 F4 | E4 D4 C4 -",
158+
"drums": "kick hat snare hat | kick hat snare hat | kick hat snare hat | kick hat snare hat"
159+
},
160+
"previewInstruments": {
161+
"chords": "warm-pad",
162+
"bass": "synth-bass",
163+
"pad": "ambient-pad",
164+
"lead": "retro-pulse-lead",
165+
"drums": "basic-drums"
166+
}
167+
}
112168
}
113169
]
114170
}

0 commit comments

Comments
 (0)