@mcptoolshop/pianoai 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @mcptoolshop/pianoai might be problematic. Click here for more details.

@@ -0,0 +1,9 @@
1
+ import type { VmpkConnector } from "./types.js";
2
+ /**
3
+ * Create the built-in piano engine.
4
+ *
5
+ * Implements VmpkConnector so it's a drop-in replacement anywhere
6
+ * the codebase uses a connector (sessions, CLI, MCP server).
7
+ */
8
+ export declare function createAudioEngine(): VmpkConnector;
9
+ //# sourceMappingURL=audio-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-engine.d.ts","sourceRoot":"","sources":["../src/audio-engine.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AAqItE;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAgUjD"}
@@ -0,0 +1,422 @@
1
+ // ─── pianoai: Built-in Piano Engine ──────────────────────────────────────────
2
+ //
3
+ // Quality multi-harmonic piano synthesis using node-web-audio-api.
4
+ // No external software required — npm install gives you everything.
5
+ //
6
+ // Piano model features:
7
+ // - 12 sine partials per voice with inharmonic frequency stretching
8
+ // - Per-partial amplitude envelopes (higher harmonics decay faster)
9
+ // - Velocity-dependent timbre (harder = brighter, more harmonics)
10
+ // - Hammer noise transient (bandpass-filtered noise burst on attack)
11
+ // - Duplex stringing simulation (subtle random detuning per partial)
12
+ // - Stereo imaging (low notes left, high notes right)
13
+ // - DynamicsCompressor for polyphony safety
14
+ // - 48-voice polyphony with LRU voice stealing
15
+ //
16
+ // Usage:
17
+ // const piano = createAudioEngine();
18
+ // await piano.connect();
19
+ // piano.noteOn(60, 100); // middle C, forte
20
+ // piano.noteOff(60);
21
+ // await piano.disconnect();
22
+ // ─────────────────────────────────────────────────────────────────────────────
23
+ // ─── Lazy Import ────────────────────────────────────────────────────────────
24
+ // Don't load the native binary until the engine is actually used.
25
+ let _AudioContext = null;
26
+ async function loadAudioContext() {
27
+ if (!_AudioContext) {
28
+ const mod = await import("node-web-audio-api");
29
+ _AudioContext = mod.AudioContext;
30
+ }
31
+ return _AudioContext;
32
+ }
33
+ // ─── Piano Physics ──────────────────────────────────────────────────────────
34
+ /** Max partials per voice (bass notes get all, treble gets fewer). */
35
+ const MAX_PARTIALS = 12;
36
+ /** Maximum simultaneous voices before stealing. */
37
+ const MAX_POLYPHONY = 48;
38
+ /** MIDI note → frequency (A4 = 440 Hz). */
39
+ function midiToFreq(note) {
40
+ return 440 * Math.pow(2, (note - 69) / 12);
41
+ }
42
+ /** MIDI note → octave (0–8). */
43
+ function midiToOctave(note) {
44
+ return Math.max(0, Math.min(8, Math.floor(note / 12) - 1));
45
+ }
46
+ /**
47
+ * Stereo pan: low notes left, high notes right.
48
+ * Mimics sitting at a piano — bass on the left, treble on the right.
49
+ */
50
+ function noteToPan(note) {
51
+ return Math.max(-0.7, Math.min(0.7, ((note - 21) / 87) * 1.4 - 0.7));
52
+ }
53
+ /**
54
+ * Inharmonicity coefficient by octave.
55
+ *
56
+ * Piano strings are stiff, not ideal — partials are stretched above
57
+ * pure harmonics. This gives pianos their characteristic shimmer.
58
+ *
59
+ * f_n = n × f₀ × √(1 + B × n²)
60
+ */
61
+ const B_COEFF = [
62
+ 0.00012, // octave 0 (A0 area) — highest inharmonicity
63
+ 0.00008, // octave 1
64
+ 0.00004, // octave 2
65
+ 0.00002, // octave 3
66
+ 0.00001, // octave 4 (middle C)
67
+ 0.000006, // octave 5
68
+ 0.000004, // octave 6
69
+ 0.000003, // octave 7
70
+ 0.000002, // octave 8
71
+ ];
72
+ /** Compute stretched partial frequency with inharmonicity. */
73
+ function partialFreq(fundamental, n, B) {
74
+ return n * fundamental * Math.sqrt(1 + B * n * n);
75
+ }
76
+ /**
77
+ * How many partials to use for this note.
78
+ * Bass notes have richer harmonic content; treble is simpler.
79
+ */
80
+ function partialsForNote(midiNote) {
81
+ if (midiNote > 90)
82
+ return 5; // High treble
83
+ if (midiNote > 72)
84
+ return 8; // Upper register
85
+ if (midiNote > 54)
86
+ return 10; // Middle register
87
+ return MAX_PARTIALS; // Bass — full harmonic series
88
+ }
89
+ /**
90
+ * Amplitude for the nth partial (1-based).
91
+ *
92
+ * Base amplitude follows ~1/n^0.7 with exponential rolloff.
93
+ * Velocity controls brightness: soft = warm, hard = bright.
94
+ */
95
+ function partialAmplitude(n, velocity01) {
96
+ const base = Math.pow(n, -0.7) * Math.exp(-0.08 * n);
97
+ // Velocity-dependent brightness: high partials only appear at higher velocity
98
+ if (n <= 3)
99
+ return base;
100
+ const brightnessGate = Math.pow(velocity01, 0.3 + (n - 3) * 0.12);
101
+ return base * brightnessGate;
102
+ }
103
+ /**
104
+ * Decay time constant (seconds) for the nth partial at a given MIDI note.
105
+ *
106
+ * Higher partials decay much faster than the fundamental.
107
+ * Lower notes ring longer than higher notes.
108
+ */
109
+ function partialDecayTime(n, midiNote) {
110
+ // Base decay for fundamental: 3s (treble) to 15s (bass)
111
+ const registerFactor = 1.0 - (midiNote - 21) / 87;
112
+ const baseFundamental = 3 + registerFactor * 12;
113
+ // Higher partials: decay ∝ 1/n^0.8
114
+ return baseFundamental * Math.pow(n, -0.8);
115
+ }
116
+ /**
117
+ * Attack time based on velocity.
118
+ * Harder strikes = shorter hammer pulse = sharper attack.
119
+ */
120
+ function attackTime(velocity01) {
121
+ return 0.002 + (1 - velocity01) * 0.008; // 2ms (ff) to 10ms (pp)
122
+ }
123
+ // ─── Engine ─────────────────────────────────────────────────────────────────
124
+ /**
125
+ * Create the built-in piano engine.
126
+ *
127
+ * Implements VmpkConnector so it's a drop-in replacement anywhere
128
+ * the codebase uses a connector (sessions, CLI, MCP server).
129
+ */
130
+ export function createAudioEngine() {
131
+ let ctx = null;
132
+ let currentStatus = "disconnected";
133
+ let compressor = null;
134
+ let master = null;
135
+ const activeVoices = new Map();
136
+ const voiceOrder = []; // LRU tracking for voice stealing
137
+ // ── Noise buffer (shared across all voices) ──
138
+ let hammerNoiseBuffer = null;
139
+ function ensureConnected() {
140
+ if (!ctx || currentStatus !== "connected") {
141
+ throw new Error("Piano engine not connected");
142
+ }
143
+ }
144
+ /** Create a reusable noise buffer for hammer transients. */
145
+ function createHammerNoiseBuffer() {
146
+ const durationMs = 40;
147
+ const length = Math.ceil((durationMs / 1000) * ctx.sampleRate);
148
+ hammerNoiseBuffer = ctx.createBuffer(1, length, ctx.sampleRate);
149
+ const data = new Float32Array(length);
150
+ for (let i = 0; i < length; i++) {
151
+ data[i] = Math.random() * 2 - 1;
152
+ }
153
+ hammerNoiseBuffer.copyToChannel(data, 0);
154
+ }
155
+ /** Synthesize a single piano voice. */
156
+ function createVoice(note, velocity) {
157
+ const velocity01 = Math.max(0.01, Math.min(1.0, velocity / 127));
158
+ const freq = midiToFreq(note);
159
+ const octave = midiToOctave(note);
160
+ const B = B_COEFF[octave] ?? 0.000003;
161
+ const now = ctx.currentTime;
162
+ const attack = attackTime(velocity01);
163
+ const numPartials = partialsForNote(note);
164
+ // ── Master gain: constant volume (per-partial gains shape the envelope) ──
165
+ const voiceMaster = ctx.createGain();
166
+ voiceMaster.gain.value = velocity01 * 0.25;
167
+ // ── Stereo panner ──
168
+ const panner = ctx.createStereoPanner();
169
+ panner.pan.value = noteToPan(note);
170
+ voiceMaster.connect(panner);
171
+ panner.connect(compressor);
172
+ // ── Sine partials with per-partial envelopes ──
173
+ const oscillators = [];
174
+ const partialGains = [];
175
+ for (let n = 1; n <= numPartials; n++) {
176
+ const pFreq = partialFreq(freq, n, B);
177
+ if (pFreq > 18000)
178
+ break; // Near hearing limit
179
+ const osc = ctx.createOscillator();
180
+ osc.type = "sine";
181
+ osc.frequency.value = pFreq;
182
+ // Duplex stringing: subtle random detuning for warmth
183
+ osc.detune.value = (Math.random() - 0.5) * 3; // ±1.5 cents
184
+ const gain = ctx.createGain();
185
+ const amp = partialAmplitude(n, velocity01);
186
+ const decay = partialDecayTime(n, note);
187
+ // Envelope: silence → attack → exponential decay
188
+ gain.gain.setValueAtTime(0, now);
189
+ gain.gain.linearRampToValueAtTime(amp, now + attack);
190
+ // Exponential decay toward near-zero
191
+ gain.gain.setTargetAtTime(0.0001, now + attack, decay);
192
+ osc.connect(gain);
193
+ gain.connect(voiceMaster);
194
+ osc.start(now);
195
+ oscillators.push(osc);
196
+ partialGains.push(gain);
197
+ }
198
+ // ── Hammer noise transient ──
199
+ let noiseSource = null;
200
+ if (hammerNoiseBuffer) {
201
+ noiseSource = ctx.createBufferSource();
202
+ noiseSource.buffer = hammerNoiseBuffer;
203
+ // Bandpass near note frequency — gives the attack a tonal character
204
+ const noiseFilter = ctx.createBiquadFilter();
205
+ noiseFilter.type = "bandpass";
206
+ noiseFilter.frequency.value = Math.min(freq * 2.5, 10000);
207
+ noiseFilter.Q.value = 0.5 + velocity01 * 2.5;
208
+ // Quick envelope: burst then silence
209
+ const noiseGain = ctx.createGain();
210
+ const noiseAmp = velocity01 * 0.2;
211
+ noiseGain.gain.setValueAtTime(noiseAmp, now);
212
+ noiseGain.gain.exponentialRampToValueAtTime(0.001, now + 0.025);
213
+ noiseSource.connect(noiseFilter);
214
+ noiseFilter.connect(noiseGain);
215
+ noiseGain.connect(voiceMaster);
216
+ noiseSource.start(now);
217
+ }
218
+ return {
219
+ note,
220
+ oscillators,
221
+ partialGains,
222
+ masterGain: voiceMaster,
223
+ panner,
224
+ noiseSource,
225
+ startTime: now,
226
+ released: false,
227
+ cleanupTimer: null,
228
+ };
229
+ }
230
+ /** Release a voice (damper engages — fast fade out). */
231
+ function releaseVoice(voice) {
232
+ if (voice.released)
233
+ return;
234
+ voice.released = true;
235
+ const now = ctx.currentTime;
236
+ const releaseTime = 0.12; // 120ms damper release
237
+ // Cancel ongoing scheduled values and fade to silence
238
+ for (const g of voice.partialGains) {
239
+ g.gain.cancelScheduledValues(now);
240
+ g.gain.setValueAtTime(g.gain.value, now);
241
+ g.gain.linearRampToValueAtTime(0, now + releaseTime);
242
+ }
243
+ // Schedule full cleanup after release completes
244
+ voice.cleanupTimer = setTimeout(() => killVoice(voice), (releaseTime + 0.05) * 1000);
245
+ }
246
+ /** Immediately destroy a voice and free resources. */
247
+ function killVoice(voice) {
248
+ if (voice.cleanupTimer) {
249
+ clearTimeout(voice.cleanupTimer);
250
+ voice.cleanupTimer = null;
251
+ }
252
+ for (const osc of voice.oscillators) {
253
+ try {
254
+ osc.stop();
255
+ osc.disconnect();
256
+ }
257
+ catch {
258
+ /* already stopped */
259
+ }
260
+ }
261
+ for (const g of voice.partialGains) {
262
+ try {
263
+ g.disconnect();
264
+ }
265
+ catch {
266
+ /* ok */
267
+ }
268
+ }
269
+ if (voice.noiseSource) {
270
+ try {
271
+ voice.noiseSource.stop();
272
+ voice.noiseSource.disconnect();
273
+ }
274
+ catch {
275
+ /* ok */
276
+ }
277
+ }
278
+ try {
279
+ voice.masterGain.disconnect();
280
+ }
281
+ catch {
282
+ /* ok */
283
+ }
284
+ try {
285
+ voice.panner.disconnect();
286
+ }
287
+ catch {
288
+ /* ok */
289
+ }
290
+ }
291
+ /** Steal the oldest voice when at max polyphony. */
292
+ function stealOldest() {
293
+ if (voiceOrder.length === 0)
294
+ return;
295
+ const oldestNote = voiceOrder.shift();
296
+ const voice = activeVoices.get(oldestNote);
297
+ if (voice) {
298
+ killVoice(voice);
299
+ activeVoices.delete(oldestNote);
300
+ }
301
+ }
302
+ /** Remove a note from the LRU order. */
303
+ function removeFromOrder(note) {
304
+ const idx = voiceOrder.indexOf(note);
305
+ if (idx >= 0)
306
+ voiceOrder.splice(idx, 1);
307
+ }
308
+ // ── VmpkConnector Implementation ──
309
+ return {
310
+ async connect() {
311
+ if (currentStatus === "connected")
312
+ return;
313
+ currentStatus = "connecting";
314
+ try {
315
+ const AC = await loadAudioContext();
316
+ ctx = new AC({ latencyHint: "playback" });
317
+ // Master chain: compressor → gain → speakers
318
+ compressor = ctx.createDynamicsCompressor();
319
+ compressor.threshold.value = -15;
320
+ compressor.knee.value = 12;
321
+ compressor.ratio.value = 6;
322
+ compressor.attack.value = 0.003;
323
+ compressor.release.value = 0.2;
324
+ master = ctx.createGain();
325
+ master.gain.value = 0.85;
326
+ compressor.connect(master);
327
+ master.connect(ctx.destination);
328
+ // Pre-generate shared noise buffer
329
+ createHammerNoiseBuffer();
330
+ currentStatus = "connected";
331
+ console.error("Piano engine connected (built-in audio)");
332
+ }
333
+ catch (err) {
334
+ currentStatus = "error";
335
+ throw new Error(`Failed to start piano engine: ${err instanceof Error ? err.message : String(err)}`);
336
+ }
337
+ },
338
+ async disconnect() {
339
+ // Kill all active voices
340
+ for (const [, voice] of activeVoices) {
341
+ try {
342
+ killVoice(voice);
343
+ }
344
+ catch {
345
+ /* ok */
346
+ }
347
+ }
348
+ activeVoices.clear();
349
+ voiceOrder.length = 0;
350
+ if (ctx) {
351
+ try {
352
+ await ctx.close();
353
+ }
354
+ catch {
355
+ /* ok */
356
+ }
357
+ ctx = null;
358
+ compressor = null;
359
+ master = null;
360
+ hammerNoiseBuffer = null;
361
+ }
362
+ currentStatus = "disconnected";
363
+ },
364
+ status() {
365
+ return currentStatus;
366
+ },
367
+ listPorts() {
368
+ return ["Built-in Piano"];
369
+ },
370
+ noteOn(note, velocity, channel) {
371
+ ensureConnected();
372
+ // Kill existing voice on same note (retrigger)
373
+ const existing = activeVoices.get(note);
374
+ if (existing) {
375
+ killVoice(existing);
376
+ activeVoices.delete(note);
377
+ removeFromOrder(note);
378
+ }
379
+ // Voice stealing if at capacity
380
+ while (activeVoices.size >= MAX_POLYPHONY) {
381
+ stealOldest();
382
+ }
383
+ const voice = createVoice(note, velocity);
384
+ activeVoices.set(note, voice);
385
+ voiceOrder.push(note);
386
+ },
387
+ noteOff(note, channel) {
388
+ if (!ctx || currentStatus !== "connected")
389
+ return;
390
+ const voice = activeVoices.get(note);
391
+ if (voice) {
392
+ releaseVoice(voice);
393
+ activeVoices.delete(note);
394
+ removeFromOrder(note);
395
+ }
396
+ },
397
+ allNotesOff(channel) {
398
+ if (!ctx)
399
+ return;
400
+ for (const [, voice] of activeVoices) {
401
+ killVoice(voice);
402
+ }
403
+ activeVoices.clear();
404
+ voiceOrder.length = 0;
405
+ },
406
+ async playNote(midiNote) {
407
+ if (midiNote.note < 0) {
408
+ // Rest — just wait
409
+ await sleep(midiNote.durationMs);
410
+ return;
411
+ }
412
+ this.noteOn(midiNote.note, midiNote.velocity, midiNote.channel);
413
+ await sleep(midiNote.durationMs);
414
+ this.noteOff(midiNote.note, midiNote.channel);
415
+ },
416
+ };
417
+ }
418
+ // ─── Helpers ────────────────────────────────────────────────────────────────
419
+ function sleep(ms) {
420
+ return new Promise((resolve) => setTimeout(resolve, ms));
421
+ }
422
+ //# sourceMappingURL=audio-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-engine.js","sourceRoot":"","sources":["../src/audio-engine.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,EAAE;AACF,wBAAwB;AACxB,sEAAsE;AACtE,sEAAsE;AACtE,oEAAoE;AACpE,uEAAuE;AACvE,uEAAuE;AACvE,wDAAwD;AACxD,8CAA8C;AAC9C,iDAAiD;AACjD,EAAE;AACF,SAAS;AACT,uCAAuC;AACvC,2BAA2B;AAC3B,gDAAgD;AAChD,uBAAuB;AACvB,8BAA8B;AAC9B,gFAAgF;AAIhF,+EAA+E;AAC/E,kEAAkE;AAElE,IAAI,aAAa,GAAQ,IAAI,CAAC;AAE9B,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/C,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC;IACnC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,+EAA+E;AAE/E,sEAAsE;AACtE,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,mDAAmD;AACnD,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,2CAA2C;AAC3C,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,gCAAgC;AAChC,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,GAAa;IACxB,OAAO,EAAE,6CAA6C;IACtD,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,8DAA8D;AAC9D,SAAS,WAAW,CAAC,WAAmB,EAAE,CAAS,EAAE,CAAS;IAC5D,OAAO,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC,cAAc;IAC3C,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB;IAC9C,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,kBAAkB;IAChD,OAAO,YAAY,CAAC,CAAC,8BAA8B;AACrD,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,CAAS,EAAE,UAAkB;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAErD,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,UAAU,EACV,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CACrB,CAAC;IACF,OAAO,IAAI,GAAG,cAAc,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,CAAS,EAAE,QAAgB;IACnD,wDAAwD;IACxD,MAAM,cAAc,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,CAAC,GAAG,cAAc,GAAG,EAAE,CAAC;IAChD,mCAAmC;IACnC,OAAO,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,UAAkB;IACpC,OAAO,KAAK,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,wBAAwB;AACnE,CAAC;AAgBD,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,GAAG,GAAQ,IAAI,CAAC;IACpB,IAAI,aAAa,GAAe,cAAc,CAAC;IAC/C,IAAI,UAAU,GAAQ,IAAI,CAAC;IAC3B,IAAI,MAAM,GAAQ,IAAI,CAAC;IACvB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC9C,MAAM,UAAU,GAAa,EAAE,CAAC,CAAC,kCAAkC;IAEnE,gDAAgD;IAChD,IAAI,iBAAiB,GAAQ,IAAI,CAAC;IAElC,SAAS,eAAe;QACtB,IAAI,CAAC,GAAG,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,SAAS,uBAAuB;QAC9B,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/D,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,iBAAiB,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,uCAAuC;IACvC,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;QAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAE1C,4EAA4E;QAC5E,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAE3C,sBAAsB;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE3B,iDAAiD;QACjD,MAAM,WAAW,GAAU,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAU,EAAE,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,KAAK,GAAG,KAAK;gBAAE,MAAM,CAAC,qBAAqB;YAE/C,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACnC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;YAClB,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;YAE5B,sDAAsD;YACtD,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;YAE3D,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAExC,iDAAiD;YACjD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;YACrD,qCAAqC;YACrC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;YAEvD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEf,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,+BAA+B;QAC/B,IAAI,WAAW,GAAQ,IAAI,CAAC;QAC5B,IAAI,iBAAiB,EAAE,CAAC;YACtB,WAAW,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YACvC,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC;YAEvC,oEAAoE;YACpE,MAAM,WAAW,GAAG,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC7C,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC;YAC9B,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1D,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;YAE7C,qCAAqC;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,UAAU,GAAG,GAAG,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;YAEhE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACjC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/B,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/B,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,OAAO;YACL,IAAI;YACJ,WAAW;YACX,YAAY;YACZ,UAAU,EAAE,WAAW;YACvB,MAAM;YACN,WAAW;YACX,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,SAAS,YAAY,CAAC,KAAY;QAChC,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO;QAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEtB,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,uBAAuB;QAEjD,sDAAsD;QACtD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC;QACvD,CAAC;QAED,gDAAgD;QAChD,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,sDAAsD;IACtD,SAAS,SAAS,CAAC,KAAY;QAC7B,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACjC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ;YACV,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ;YACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ;QACV,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ;QACV,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,SAAS,WAAW;QAClB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAG,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,SAAS,eAAe,CAAC,IAAY;QACnC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC;YAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,qCAAqC;IAErC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,aAAa,KAAK,WAAW;gBAAE,OAAO;YAC1C,aAAa,GAAG,YAAY,CAAC;YAE7B,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACpC,GAAG,GAAG,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;gBAE1C,6CAA6C;gBAC7C,UAAU,GAAG,GAAG,CAAC,wBAAwB,EAAE,CAAC;gBAC5C,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACjC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3B,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBAChC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;gBAE/B,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAEzB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEhC,mCAAmC;gBACnC,uBAAuB,EAAE,CAAC;gBAE1B,aAAa,GAAG,WAAW,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,aAAa,GAAG,OAAO,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,UAAU;YACd,yBAAyB;YACzB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ;gBACV,CAAC;YACH,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAEtB,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ;gBACV,CAAC;gBACD,GAAG,GAAG,IAAI,CAAC;gBACX,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM,GAAG,IAAI,CAAC;gBACd,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,aAAa,GAAG,cAAc,CAAC;QACjC,CAAC;QAED,MAAM;YACJ,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,SAAS;YACP,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,CAAC,IAAY,EAAE,QAAgB,EAAE,OAAgB;YACrD,eAAe,EAAE,CAAC;YAElB,+CAA+C;YAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACpB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAED,gCAAgC;YAChC,OAAO,YAAY,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC1C,WAAW,EAAE,CAAC;YAChB,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1C,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,CAAC,IAAY,EAAE,OAAgB;YACpC,IAAI,CAAC,GAAG,IAAI,aAAa,KAAK,WAAW;gBAAE,OAAO;YAElD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,WAAW,CAAC,OAAgB;YAC1B,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;gBACrC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,QAAkB;YAC/B,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtB,mBAAmB;gBACnB,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
package/dist/cli.js CHANGED
@@ -2,18 +2,18 @@
2
2
  // ─── pianoai: CLI Entry Point ─────────────────────────────────────
3
3
  //
4
4
  // Usage:
5
- // pianoai # Interactive mode — list songs, pick one, play
5
+ // pianoai # Show help
6
6
  // pianoai list # List all songs
7
7
  // pianoai list --genre jazz # List songs by genre
8
- // pianoai play <song-id> # Play a specific song
8
+ // pianoai play <song-id> # Play a song (built-in piano engine)
9
+ // pianoai play <song-id> --midi # Play via MIDI output
9
10
  // pianoai sing <song-id> # Sing along — narrate notes during playback
10
- // pianoai info <song-id> # Show song details (musical language)
11
+ // pianoai info <song-id> # Show song details
11
12
  // pianoai stats # Registry stats
12
13
  // pianoai ports # List available MIDI ports
13
- //
14
- // Requires: loopMIDI running + VMPK listening on the loopMIDI port.
15
14
  // ─────────────────────────────────────────────────────────────────────────────
16
15
  import { getAllSongs, getSong, getSongsByGenre, getStats, GENRES, } from "@mcptoolshop/ai-music-sheets";
16
+ import { createAudioEngine } from "./audio-engine.js";
17
17
  import { createVmpkConnector } from "./vmpk.js";
18
18
  import { createSession } from "./session.js";
19
19
  import { createConsoleTeachingHook, createSingAlongHook, createLiveFeedbackHook, composeTeachingHooks, } from "./teaching.js";
@@ -114,7 +114,7 @@ function cmdInfo(args) {
114
114
  async function cmdPlay(args) {
115
115
  const songId = args[0];
116
116
  if (!songId) {
117
- console.error("Usage: pianoai play <song-id> [--tempo N] [--speed N] [--mode MODE]");
117
+ console.error("Usage: pianoai play <song-id> [--tempo N] [--speed N] [--mode MODE] [--midi]");
118
118
  process.exit(1);
119
119
  }
120
120
  const song = getSong(songId);
@@ -123,6 +123,7 @@ async function cmdPlay(args) {
123
123
  process.exit(1);
124
124
  }
125
125
  // Parse flags
126
+ const useMidi = hasFlag(args, "--midi");
126
127
  const portName = getFlag(args, "--port") ?? undefined;
127
128
  const tempoStr = getFlag(args, "--tempo");
128
129
  const speedStr = getFlag(args, "--speed");
@@ -145,8 +146,11 @@ async function cmdPlay(args) {
145
146
  console.error(`Invalid tempo: "${tempoStr}". Must be between 10 and 400 BPM.`);
146
147
  process.exit(1);
147
148
  }
148
- console.log(`\nConnecting to MIDI...`);
149
- const connector = createVmpkConnector(portName ? { portName } : undefined);
149
+ // Create connector: built-in piano engine or MIDI output
150
+ const connector = useMidi
151
+ ? createVmpkConnector(portName ? { portName } : undefined)
152
+ : createAudioEngine();
153
+ console.log(useMidi ? `\nConnecting to MIDI...` : `\nStarting piano...`);
150
154
  try {
151
155
  await connector.connect();
152
156
  console.log(`Connected!`);
@@ -181,20 +185,7 @@ async function cmdPlay(args) {
181
185
  }
182
186
  catch (err) {
183
187
  const msg = err instanceof Error ? err.message : String(err);
184
- // Detect MIDI connection failure — provide helpful guidance
185
- if (msg.includes("Failed to connect to MIDI") || msg.includes("MIDI port not connected")) {
186
- console.error(`\n❌ MIDI Connection Failed`);
187
- console.error(`\nTo play through VMPK, you need:`);
188
- console.error(` 1. loopMIDI running with a virtual port (e.g. "loopMIDI Port")`);
189
- console.error(` → Download: https://www.tobias-erichsen.de/software/loopmidi.html`);
190
- console.error(` 2. VMPK listening on that port`);
191
- console.error(` → Download: https://vmpk.sourceforge.io/`);
192
- console.error(` → VMPK → Edit → MIDI Connections → Input: "loopMIDI Port"`);
193
- console.error(`\nDetailed error: ${msg}`);
194
- }
195
- else {
196
- console.error(`\nError: ${msg}`);
197
- }
188
+ console.error(`\nError: ${msg}`);
198
189
  process.exit(1);
199
190
  }
200
191
  finally {
@@ -204,7 +195,7 @@ async function cmdPlay(args) {
204
195
  async function cmdSing(args) {
205
196
  const songId = args[0];
206
197
  if (!songId) {
207
- console.error("Usage: pianoai sing <song-id> [--mode note-names|solfege|contour|syllables] [--hand right|left|both] [--speed N] [--tempo N] [--with-piano] [--sync concurrent|before]");
198
+ console.error("Usage: pianoai sing <song-id> [--mode note-names|solfege|contour|syllables] [--hand right|left|both] [--speed N] [--tempo N] [--with-piano] [--sync concurrent|before] [--midi]");
208
199
  process.exit(1);
209
200
  }
210
201
  const song = getSong(songId);
@@ -213,6 +204,7 @@ async function cmdSing(args) {
213
204
  process.exit(1);
214
205
  }
215
206
  // Parse flags
207
+ const useMidi = hasFlag(args, "--midi");
216
208
  const portName = getFlag(args, "--port") ?? undefined;
217
209
  const tempoStr = getFlag(args, "--tempo");
218
210
  const speedStr = getFlag(args, "--speed");
@@ -250,8 +242,11 @@ async function cmdSing(args) {
250
242
  console.error(`Invalid tempo: "${tempoStr}". Must be between 10 and 400 BPM.`);
251
243
  process.exit(1);
252
244
  }
253
- console.log(`\nConnecting to MIDI...`);
254
- const connector = createVmpkConnector(portName ? { portName } : undefined);
245
+ // Create connector: built-in piano engine or MIDI output
246
+ const connector = useMidi
247
+ ? createVmpkConnector(portName ? { portName } : undefined)
248
+ : createAudioEngine();
249
+ console.log(useMidi ? `\nConnecting to MIDI...` : `\nStarting piano...`);
255
250
  try {
256
251
  await connector.connect();
257
252
  console.log(`Connected!`);
@@ -312,19 +307,7 @@ async function cmdSing(args) {
312
307
  }
313
308
  catch (err) {
314
309
  const msg = err instanceof Error ? err.message : String(err);
315
- if (msg.includes("Failed to connect to MIDI") || msg.includes("MIDI port not connected")) {
316
- console.error(`\n❌ MIDI Connection Failed`);
317
- console.error(`\nTo play through VMPK, you need:`);
318
- console.error(` 1. loopMIDI running with a virtual port (e.g. "loopMIDI Port")`);
319
- console.error(` → Download: https://www.tobias-erichsen.de/software/loopmidi.html`);
320
- console.error(` 2. VMPK listening on that port`);
321
- console.error(` → Download: https://vmpk.sourceforge.io/`);
322
- console.error(` → VMPK → Edit → MIDI Connections → Input: "loopMIDI Port"`);
323
- console.error(`\nDetailed error: ${msg}`);
324
- }
325
- else {
326
- console.error(`\nError: ${msg}`);
327
- }
310
+ console.error(`\nError: ${msg}`);
328
311
  process.exit(1);
329
312
  }
330
313
  finally {
@@ -357,43 +340,44 @@ function cmdPorts() {
357
340
  }
358
341
  function cmdHelp() {
359
342
  console.log(`
360
- pianoai — AI-powered piano teaching via MIDI
343
+ pianoai — Play piano through your speakers
361
344
 
362
345
  Commands:
363
346
  list [--genre <genre>] List available songs
364
- info <song-id> Show song details and teaching notes
365
- play <song-id> [options] Play a song through VMPK
347
+ info <song-id> Show song details
348
+ play <song-id> [options] Play a song
366
349
  sing <song-id> [options] Sing along — narrate notes during playback
367
350
  stats Registry statistics
368
351
  ports List MIDI output ports
369
352
  help Show this help
370
353
 
371
354
  Play options:
372
- --port <name> MIDI port name (default: auto-detect loopMIDI)
373
355
  --tempo <bpm> Override tempo (10-400 BPM)
374
356
  --speed <mult> Speed multiplier (0.5 = half, 1.0 = normal, 2.0 = double)
375
357
  --mode <mode> Playback mode: full, measure, hands, loop
358
+ --midi Output via MIDI instead of built-in piano
359
+ --port <name> MIDI port name (with --midi)
376
360
 
377
361
  Sing options:
378
- --port <name> MIDI port name (default: auto-detect loopMIDI)
379
362
  --tempo <bpm> Override tempo (10-400 BPM)
380
363
  --speed <mult> Speed multiplier (0.5 = half, 1.0 = normal, 2.0 = double)
381
364
  --mode <mode> Sing-along mode: note-names, solfege, contour, syllables
382
365
  --hand <hand> Which hand: right, left, both
383
366
  --with-piano Play piano accompaniment while singing
384
367
  --sync <mode> Voice+piano sync: concurrent (default), before
368
+ --midi Output via MIDI instead of built-in piano
369
+ --port <name> MIDI port name (with --midi)
385
370
 
386
371
  Examples:
387
- pianoai list --genre jazz
388
- pianoai info autumn-leaves
389
- pianoai play moonlight-sonata-mvt1 --tempo 48
390
- pianoai play basic-12-bar-blues --mode measure
391
- pianoai play let-it-be --speed 0.5 # half speed practice
392
- pianoai play dream-on --speed 0.75 --mode hands # slow hands-separate
393
- pianoai sing let-it-be --mode note-names # narrate note names
394
- pianoai sing fur-elise --mode solfege --hand both # solfege, both hands
372
+ pianoai play let-it-be # play through speakers
373
+ pianoai play moonlight-sonata-mvt1 --tempo 48 # slow tempo
374
+ pianoai play let-it-be --speed 0.5 # half speed
375
+ pianoai play dream-on --speed 0.75 --mode hands # hands separate
376
+ pianoai play let-it-be --midi # play via MIDI output
377
+ pianoai sing let-it-be --mode note-names # narrate note names
378
+ pianoai sing fur-elise --mode solfege --hand both # solfege, both hands
395
379
  pianoai sing let-it-be --with-piano # sing + piano together
396
- pianoai sing fur-elise --with-piano --sync before # voice first, then piano
380
+ pianoai list --genre jazz # browse jazz songs
397
381
  `);
398
382
  }
399
383
  // ─── CLI Router ─────────────────────────────────────────────────────────────
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { getAllSongs, getSong, getSongsByGenre, getSongsByDifficulty, searchSongs, getStats, GENRES, DIFFICULTIES, } from "@mcptoolshop/ai-music-sheets";
2
2
  export type { SongEntry, Measure, MusicalLanguage, Genre, Difficulty, } from "@mcptoolshop/ai-music-sheets";
3
3
  export { createSession, SessionController } from "./session.js";
4
+ export { createAudioEngine } from "./audio-engine.js";
4
5
  export { createVmpkConnector, createMockVmpkConnector } from "./vmpk.js";
5
6
  export { parseNoteToMidi, parseDuration, durationToMs, parseNoteToken, parseHandString, parseMeasure, safeParseNoteToken, safeParseHandString, safeParseMeasure, midiToNoteName, noteToSingable, handToSingableText, measureToSingableText, } from "./note-parser.js";
6
7
  export type { SingAlongMode, SingAlongTextOptions } from "./note-parser.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,SAAS,EACT,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAGzE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,cAAc,EACd,SAAS,EACT,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,SAAS,EACT,OAAO,EACP,eAAe,EACf,KAAK,EACL,UAAU,GACX,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAGzE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,OAAO,EACP,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,cAAc,EACd,SAAS,EACT,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,19 @@
1
1
  // ─── pianoai ────────────────────────────────────────────────────────────────
2
2
  //
3
- // MCP server + CLI for AI-powered piano teaching.
4
- // Plays songs through VMPK via MIDI with voice feedback.
3
+ // Piano player plays songs through speakers or MIDI.
4
+ // Built-in piano engine included. No external software required.
5
5
  //
6
6
  // Usage:
7
- // import { createSession, createVmpkConnector } from "pianoai";
7
+ // import { createSession, createAudioEngine } from "@mcptoolshop/pianoai";
8
8
  // import { getSong } from "@mcptoolshop/ai-music-sheets";
9
9
  // ─────────────────────────────────────────────────────────────────────────────
10
10
  // Re-export ai-music-sheets for convenience
11
11
  export { getAllSongs, getSong, getSongsByGenre, getSongsByDifficulty, searchSongs, getStats, GENRES, DIFFICULTIES, } from "@mcptoolshop/ai-music-sheets";
12
12
  // Export session engine
13
13
  export { createSession, SessionController } from "./session.js";
14
- // Export VMPK connector
14
+ // Export piano engine (built-in audio — plays through speakers)
15
+ export { createAudioEngine } from "./audio-engine.js";
16
+ // Export MIDI connector (optional — for routing to external MIDI software)
15
17
  export { createVmpkConnector, createMockVmpkConnector } from "./vmpk.js";
16
18
  // Export note parser
17
19
  export { parseNoteToMidi, parseDuration, durationToMs, parseNoteToken, parseHandString, parseMeasure, safeParseNoteToken, safeParseHandString, safeParseMeasure, midiToNoteName, noteToSingable, handToSingableText, measureToSingableText, } from "./note-parser.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,kDAAkD;AAClD,yDAAyD;AACzD,EAAE;AACF,SAAS;AACT,kEAAkE;AAClE,4DAA4D;AAC5D,gFAAgF;AAEhF,4CAA4C;AAC5C,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,8BAA8B,CAAC;AAUtC,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEhE,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEzE,qBAAqB;AACrB,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAI1B,yBAAyB;AACzB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAoCvB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,uDAAuD;AACvD,iEAAiE;AACjE,EAAE;AACF,SAAS;AACT,6EAA6E;AAC7E,4DAA4D;AAC5D,gFAAgF;AAEhF,4CAA4C;AAC5C,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,MAAM,EACN,YAAY,GACb,MAAM,8BAA8B,CAAC;AAUtC,wBAAwB;AACxB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEhE,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,2EAA2E;AAC3E,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEzE,qBAAqB;AACrB,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAI1B,yBAAyB;AACzB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAoCvB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -17,12 +17,17 @@
17
17
  // list_measures — overview of measures with teaching notes
18
18
  // practice_setup — suggest speed, mode, and voice settings for a song
19
19
  // sing_along — get singable text (note names/solfege/contour/syllables) for measures
20
+ // play_song — play a song through VMPK via MIDI
21
+ // stop_playback — stop the currently playing song
20
22
  // ─────────────────────────────────────────────────────────────────────────────
21
23
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
22
24
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
25
  import { z } from "zod";
24
26
  import { getSong, searchSongs, getStats, GENRES, DIFFICULTIES, } from "@mcptoolshop/ai-music-sheets";
25
27
  import { safeParseMeasure, measureToSingableText } from "./note-parser.js";
28
+ import { createAudioEngine } from "./audio-engine.js";
29
+ import { createSession } from "./session.js";
30
+ import { createConsoleTeachingHook } from "./teaching.js";
26
31
  // ─── Helpers ────────────────────────────────────────────────────────────────
27
32
  /** Suggest practice speed based on song difficulty. */
28
33
  function suggestSpeed(difficulty) {
@@ -49,7 +54,7 @@ function suggestMode(difficulty) {
49
54
  // ─── Server ─────────────────────────────────────────────────────────────────
50
55
  const server = new McpServer({
51
56
  name: "pianoai",
52
- version: "1.1.0",
57
+ version: "1.2.0",
53
58
  });
54
59
  // ─── Tool: list_songs ───────────────────────────────────────────────────────
55
60
  server.tool("list_songs", "Browse and search the piano song library. Filter by genre, difficulty, or search query.", {
@@ -362,6 +367,113 @@ server.tool("sing_along", "Get singable text (note names, solfege, contour, or s
362
367
  }
363
368
  return { content: [{ type: "text", text: lines.join("\n") }] };
364
369
  });
370
+ // ─── Active Session State ─────────────────────────────────────────────────
371
+ let activeSession = null;
372
+ // ─── Tool: play_song ──────────────────────────────────────────────────────
373
+ server.tool("play_song", "Play a song through the built-in piano engine. Returns immediately with session info while playback runs in the background.", {
374
+ id: z.string().describe("Song ID (e.g. 'autumn-leaves', 'let-it-be')"),
375
+ speed: z.number().min(0.1).max(4).optional().describe("Speed multiplier (0.5 = half speed, 1.0 = normal, 2.0 = double). Default: 1.0"),
376
+ tempo: z.number().int().min(10).max(400).optional().describe("Override tempo in BPM (10-400). Default: song's tempo"),
377
+ mode: z.enum(["full", "measure", "hands", "loop"]).optional().describe("Playback mode: full (default), measure (one at a time), hands (separate then together), loop"),
378
+ startMeasure: z.number().int().min(1).optional().describe("Start measure for loop mode (1-based)"),
379
+ endMeasure: z.number().int().min(1).optional().describe("End measure for loop mode (1-based)"),
380
+ }, async ({ id, speed, tempo, mode, startMeasure, endMeasure }) => {
381
+ const song = getSong(id);
382
+ if (!song) {
383
+ return {
384
+ content: [{ type: "text", text: `Song not found: "${id}". Use list_songs to see available songs.` }],
385
+ isError: true,
386
+ };
387
+ }
388
+ // Stop any active session first
389
+ if (activeSession && activeSession.state === "playing") {
390
+ activeSession.stop();
391
+ }
392
+ // Connect piano engine
393
+ const connector = createAudioEngine();
394
+ try {
395
+ await connector.connect();
396
+ }
397
+ catch (err) {
398
+ const msg = err instanceof Error ? err.message : String(err);
399
+ return {
400
+ content: [{
401
+ type: "text",
402
+ text: `Piano engine failed to start: ${msg}`,
403
+ }],
404
+ isError: true,
405
+ };
406
+ }
407
+ // Build loop range if specified
408
+ const loopRange = startMeasure && endMeasure ? [startMeasure, endMeasure] : undefined;
409
+ // Create session
410
+ const playbackMode = (mode ?? "full");
411
+ const teachingHook = createConsoleTeachingHook();
412
+ const session = createSession(song, connector, {
413
+ mode: playbackMode,
414
+ speed,
415
+ tempo,
416
+ loopRange,
417
+ teachingHook,
418
+ });
419
+ activeSession = session;
420
+ // Start playback in background — don't await (MCP call returns immediately)
421
+ const playPromise = session.play();
422
+ playPromise
423
+ .then(() => {
424
+ console.error(`Finished playing: ${song.title} (${session.session.measuresPlayed} measures)`);
425
+ })
426
+ .catch((err) => {
427
+ console.error(`Playback error: ${err instanceof Error ? err.message : String(err)}`);
428
+ })
429
+ .finally(() => {
430
+ connector.disconnect().catch(() => { });
431
+ if (activeSession === session) {
432
+ activeSession = null;
433
+ }
434
+ });
435
+ // Build response
436
+ const effectiveSpeed = speed ?? 1.0;
437
+ const baseTempo = tempo ?? song.tempo;
438
+ const effectiveTempo = Math.round(baseTempo * effectiveSpeed);
439
+ const speedLabel = effectiveSpeed !== 1.0 ? ` × ${effectiveSpeed}x` : "";
440
+ const warnings = session.parseWarnings;
441
+ const lines = [
442
+ `Now playing: **${song.title}** by ${song.composer ?? "Traditional"}`,
443
+ ``,
444
+ `- **Mode:** ${playbackMode}`,
445
+ `- **Tempo:** ${baseTempo} BPM${speedLabel} → ${effectiveTempo} BPM effective`,
446
+ `- **Key:** ${song.key} | **Time:** ${song.timeSignature}`,
447
+ `- **Measures:** ${song.measures.length}`,
448
+ ];
449
+ if (loopRange) {
450
+ lines.push(`- **Loop range:** measures ${loopRange[0]}–${loopRange[1]}`);
451
+ }
452
+ if (warnings.length > 0) {
453
+ lines.push(``, `⚠ ${warnings.length} note(s) had parse warnings and will be skipped.`);
454
+ }
455
+ lines.push(``, `Use \`stop_playback\` to stop. Playback runs in the background.`);
456
+ return { content: [{ type: "text", text: lines.join("\n") }] };
457
+ });
458
+ // ─── Tool: stop_playback ──────────────────────────────────────────────────
459
+ server.tool("stop_playback", "Stop the currently playing song and disconnect MIDI.", {}, async () => {
460
+ if (!activeSession) {
461
+ return {
462
+ content: [{ type: "text", text: "No song is currently playing." }],
463
+ };
464
+ }
465
+ const songTitle = activeSession.session.song.title;
466
+ const measuresPlayed = activeSession.session.measuresPlayed;
467
+ const state = activeSession.state;
468
+ activeSession.stop();
469
+ activeSession = null;
470
+ return {
471
+ content: [{
472
+ type: "text",
473
+ text: `Stopped: ${songTitle} (was ${state}, ${measuresPlayed} measures played)`,
474
+ }],
475
+ };
476
+ });
365
477
  // ─── Start ──────────────────────────────────────────────────────────────────
366
478
  async function main() {
367
479
  const transport = new StdioServerTransport();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -108,9 +108,9 @@ export interface SessionOptions {
108
108
  */
109
109
  progressInterval?: number;
110
110
  }
111
- /** VMPK connection configuration. */
111
+ /** MIDI connection configuration. */
112
112
  export interface VmpkConfig {
113
- /** MIDI output port name or regex pattern. Default: /loop/i */
113
+ /** MIDI output port name, regex pattern, or "auto" to auto-detect. Default: "auto" */
114
114
  portName: string | RegExp;
115
115
  /** MIDI channel (0-15). Default: 0. */
116
116
  channel: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/vmpk.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import type { VmpkConnector, VmpkConfig } from "./types.js";
2
2
  /**
3
- * Create a VMPK MIDI connector.
3
+ * Create a MIDI connector.
4
+ *
5
+ * With no config (or portName: "auto"), auto-detects the best available
6
+ * MIDI output — no external software required on Windows.
4
7
  *
5
- * This is the real implementation that talks to hardware via JZZ.
6
8
  * For testing, inject a mock VmpkConnector via the Session constructor.
7
9
  */
8
10
  export declare function createVmpkConnector(config?: Partial<VmpkConfig>): VmpkConnector;
@@ -1 +1 @@
1
- {"version":3,"file":"vmpk.d.ts","sourceRoot":"","sources":["../src/vmpk.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AASlF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,aAAa,CAwGf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,GAAG;IACzD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF,CAoDA"}
1
+ {"version":3,"file":"vmpk.d.ts","sourceRoot":"","sources":["../src/vmpk.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,YAAY,CAAC;AAqBlF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,aAAa,CA4If;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,aAAa,GAAG;IACzD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF,CAoDA"}
package/dist/vmpk.js CHANGED
@@ -1,26 +1,42 @@
1
- // ─── pianoai: VMPK MIDI Connector ───────────────────────────────────────────
1
+ // ─── pianoai: MIDI Connector ─────────────────────────────────────────────────
2
2
  //
3
- // Connects to VMPK (Virtual MIDI Piano Keyboard) via a virtual MIDI port
4
- // using the JZZ library. On Windows, requires loopMIDI to create the port.
3
+ // Connects to any available MIDI output using the JZZ library.
4
+ // Auto-detects the best port: prefers loopMIDI/VMPK if present,
5
+ // falls back to the system's built-in MIDI synth (e.g. Microsoft GS
6
+ // Wavetable Synth on Windows). No external software required.
5
7
  //
6
8
  // Usage:
7
- // const vmpk = createVmpkConnector({ portName: /loop/i });
8
- // await vmpk.connect();
9
- // vmpk.noteOn(60, 100); // middle C
10
- // vmpk.noteOff(60);
11
- // await vmpk.disconnect();
9
+ // const midi = createVmpkConnector(); // auto-detect best port
10
+ // const midi = createVmpkConnector({ portName: /loop/i }); // force specific port
11
+ // await midi.connect();
12
+ // midi.noteOn(60, 100); // middle C
13
+ // midi.noteOff(60);
14
+ // await midi.disconnect();
12
15
  // ─────────────────────────────────────────────────────────────────────────────
13
16
  import JZZ from "jzz";
14
- /** Default configuration. */
17
+ /** Default configuration — auto-detect best available MIDI output. */
15
18
  const DEFAULT_CONFIG = {
16
- portName: /loop/i, // matches "loopMIDI Port" on Windows
19
+ portName: "auto",
17
20
  channel: 0,
18
21
  velocity: 80,
19
22
  };
20
23
  /**
21
- * Create a VMPK MIDI connector.
24
+ * Preferred port patterns, tried in order.
25
+ * loopMIDI/VMPK first (for users with a full setup), then system synths.
26
+ */
27
+ const PORT_PREFERENCES = [
28
+ /loop/i, // loopMIDI Port
29
+ /vmpk/i, // VMPK direct
30
+ /wavetable/i, // Microsoft GS Wavetable Synth
31
+ /synth/i, // Any other software synth
32
+ /midi/i, // Any port with "MIDI" in the name
33
+ ];
34
+ /**
35
+ * Create a MIDI connector.
36
+ *
37
+ * With no config (or portName: "auto"), auto-detects the best available
38
+ * MIDI output — no external software required on Windows.
22
39
  *
23
- * This is the real implementation that talks to hardware via JZZ.
24
40
  * For testing, inject a mock VmpkConnector via the Session constructor.
25
41
  */
26
42
  export function createVmpkConnector(config = {}) {
@@ -28,6 +44,7 @@ export function createVmpkConnector(config = {}) {
28
44
  let engine = null;
29
45
  let port = null;
30
46
  let currentStatus = "disconnected";
47
+ let connectedPortName = "";
31
48
  return {
32
49
  async connect() {
33
50
  if (currentStatus === "connected")
@@ -35,18 +52,52 @@ export function createVmpkConnector(config = {}) {
35
52
  currentStatus = "connecting";
36
53
  try {
37
54
  engine = await JZZ();
38
- // Try to find a matching port
39
- const portName = cfg.portName;
40
- port = engine.openMidiOut(portName);
55
+ const ports = listPortsInternal(engine);
56
+ if (cfg.portName === "auto") {
57
+ // Auto-detect: try preferred patterns in order
58
+ port = null;
59
+ for (const pattern of PORT_PREFERENCES) {
60
+ const match = ports.find((p) => pattern.test(p));
61
+ if (match) {
62
+ try {
63
+ port = engine.openMidiOut(match);
64
+ connectedPortName = match;
65
+ break;
66
+ }
67
+ catch {
68
+ // This port didn't work, try next pattern
69
+ continue;
70
+ }
71
+ }
72
+ }
73
+ // Last resort: try the first available port
74
+ if (!port && ports.length > 0) {
75
+ port = engine.openMidiOut(ports[0]);
76
+ connectedPortName = ports[0];
77
+ }
78
+ if (!port) {
79
+ throw new Error("No MIDI output ports available");
80
+ }
81
+ }
82
+ else {
83
+ // Specific port requested
84
+ port = engine.openMidiOut(cfg.portName);
85
+ connectedPortName =
86
+ cfg.portName instanceof RegExp
87
+ ? (ports.find((p) => cfg.portName.test(p)) ?? cfg.portName.toString())
88
+ : String(cfg.portName);
89
+ }
41
90
  currentStatus = "connected";
91
+ console.error(`MIDI connected: ${connectedPortName}`);
42
92
  }
43
93
  catch (err) {
44
94
  currentStatus = "error";
45
- const portDesc = cfg.portName instanceof RegExp
46
- ? cfg.portName.toString()
47
- : `"${cfg.portName}"`;
48
- throw new Error(`Failed to connect to MIDI port ${portDesc}. ` +
49
- `On Windows, make sure loopMIDI is running and VMPK is listening. ` +
95
+ const portDesc = cfg.portName === "auto"
96
+ ? "(auto-detect)"
97
+ : cfg.portName instanceof RegExp
98
+ ? cfg.portName.toString()
99
+ : `"${cfg.portName}"`;
100
+ throw new Error(`Failed to connect to MIDI output ${portDesc}. ` +
50
101
  `Available ports: ${listPortsInternal(engine).join(", ") || "(none)"}. ` +
51
102
  `Error: ${err instanceof Error ? err.message : String(err)}`);
52
103
  }
package/dist/vmpk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vmpk.js","sourceRoot":"","sources":["../src/vmpk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vmpk.js","sourceRoot":"","sources":["../src/vmpk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mcptoolshop/pianoai",
3
- "version": "1.1.0",
4
- "description": "MCP server + CLI for AI-powered piano teaching — plays through VMPK via MIDI with voice feedback",
3
+ "version": "1.3.0",
4
+ "description": "Piano player with built-in audio engine — plays through speakers, no external software required. MCP server + CLI.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -36,14 +36,13 @@
36
36
  },
37
37
  "keywords": [
38
38
  "piano",
39
+ "audio",
39
40
  "midi",
40
41
  "mcp",
41
- "vmpk",
42
- "teaching",
43
42
  "ai",
44
43
  "music",
45
44
  "voice",
46
- "practice"
45
+ "web-audio"
47
46
  ],
48
47
  "author": "mcp-tool-shop",
49
48
  "publishConfig": {
@@ -55,9 +54,10 @@
55
54
  "url": "https://github.com/mcp-tool-shop-org/pianoai.git"
56
55
  },
57
56
  "dependencies": {
58
- "@modelcontextprotocol/sdk": "^1.26.0",
59
57
  "@mcptoolshop/ai-music-sheets": "^1.0.0",
58
+ "@modelcontextprotocol/sdk": "^1.26.0",
60
59
  "jzz": "^1.8.0",
60
+ "node-web-audio-api": "^1.0.8",
61
61
  "zod": "^4.3.6"
62
62
  },
63
63
  "devDependencies": {