-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtests.json
More file actions
186 lines (186 loc) · 4.42 KB
/
Copy pathtests.json
File metadata and controls
186 lines (186 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
{
"project": "Undertone",
"updatedAt": "2026-06-02",
"framework": "vitest",
"suites": [
{
"phase": 0,
"file": "src/dsp/pitch.test.ts",
"status": "passing",
"cases": [
{
"name": "detects 440 Hz (A4) sine within +/-5 Hz with confidence >= 0.9",
"status": "passing"
},
{
"name": "reports silence as frequency 0 with rms below the floor",
"status": "passing"
},
{
"name": "detects C4 (~261.6 Hz) within +/-5 Hz",
"status": "passing"
},
{
"name": "detects A5 (880 Hz) without dropping an octave",
"status": "passing"
},
{
"name": "detects a quiet but audible tone (amplitude 0.2)",
"status": "passing"
}
]
},
{
"phase": 1,
"file": "src/dsp/capture.test.ts",
"status": "passing",
"cases": [
{
"name": "splits a hum / silence / hum sequence into two notes",
"status": "passing"
},
{
"name": "returns an empty phrase for silence only",
"status": "passing"
},
{
"name": "ignores a blip shorter than the onset window",
"status": "passing"
},
{
"name": "splits a legato pitch jump with no intervening silence",
"status": "passing"
},
{
"name": "CaptureSession buffers and folds to the same phrase on finish",
"status": "passing"
},
{
"name": "CaptureSession auto-terminates past the session timeout",
"status": "passing"
}
]
},
{
"phase": 1,
"file": "src/dsp/quantize.test.ts",
"status": "passing",
"cases": [
{
"name": "frequencyToPitch maps A4/C5/middle-C/F#4 correctly",
"status": "passing"
},
{
"name": "durationToNoteValue buckets 160/333/400/667/1333/2667 ms at 90 BPM",
"status": "passing"
},
{
"name": "quantizes a single A4 quarter note at beat 0",
"status": "passing"
},
{
"name": "returns an empty phrase for an empty RawPhrase",
"status": "passing"
},
{
"name": "snaps on-grid onsets to 16th-note beat positions",
"status": "passing"
},
{
"name": "falls back to sequential placement when most onsets miss the grid",
"status": "passing"
}
]
},
{
"phase": 2,
"file": "src/notation/layout.test.ts",
"status": "passing",
"cases": [
{
"name": "notePosition places the five staff lines (F5/D5/B4/G4/E4)",
"status": "passing"
},
{ "name": "notePosition places the staff spaces", "status": "passing" },
{
"name": "C4 maps one ledger line below the bottom line",
"status": "passing"
},
{
"name": "A5 maps one ledger line above the top line",
"status": "passing"
},
{
"name": "notePosition is monotonic across octaves 3-6",
"status": "passing"
},
{
"name": "diatonicValue orders pitches by absolute step",
"status": "passing"
},
{
"name": "beamGroups groups consecutive eighth/sixteenth runs",
"status": "passing"
}
]
},
{
"phase": 2,
"file": "src/notation/accidentals.test.ts",
"status": "passing",
"cases": [
{ "name": "natural returns null", "status": "passing" },
{ "name": "sharp -> non-empty stroked path spec", "status": "passing" },
{ "name": "flat -> non-empty stroked path spec", "status": "passing" }
]
},
{
"phase": 2,
"file": "src/notation/render.test.ts",
"status": "passing",
"cases": [
{ "name": "draws exactly 5 staff lines", "status": "passing" },
{ "name": "draws one treble clef as text", "status": "passing" },
{
"name": "3 noteheads at correct staff-y positions",
"status": "passing"
},
{
"name": "half note renders as a single open notehead",
"status": "passing"
},
{
"name": "stem on every non-whole note, no beam",
"status": "passing"
},
{
"name": "ledger line for middle C below the staff",
"status": "passing"
},
{
"name": "stem direction: up below B4, down at/above B4",
"status": "passing"
}
]
},
{
"phase": 3,
"file": "src/notation/render.test.ts (export) + manual",
"status": "planned",
"cases": [
{
"name": "serialized SVG export is well-formed and reopens",
"status": "planned"
},
{
"name": "playback schedules oscillators from a single time base (no drift)",
"status": "planned"
},
{
"name": "reveal animation re-triggers on new capture (manual)",
"status": "planned"
}
]
}
]
}