@mcptoolshop/pianoai 1.0.0 → 1.2.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.

package/README.es.md CHANGED
@@ -12,9 +12,9 @@
12
12
  Servidor MCP + CLI para enseñanza de piano con IA — reproduce a través de VMPK vía MIDI con retroalimentación por voz.
13
13
  </p>
14
14
 
15
- [![Tests](https://img.shields.io/badge/tests-121_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
- [![Smoke](https://img.shields.io/badge/smoke-20_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
- [![MCP Tools](https://img.shields.io/badge/MCP_tools-7-purple)](https://github.com/mcp-tool-shop-org/pianoai)
15
+ [![Tests](https://img.shields.io/badge/tests-181_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
+ [![Smoke](https://img.shields.io/badge/smoke-29_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-8-purple)](https://github.com/mcp-tool-shop-org/pianoai)
18
18
  [![Songs](https://img.shields.io/badge/songs-10_(via_ai--music--sheets)-blue)](https://github.com/mcp-tool-shop-org/ai-music-sheets)
19
19
 
20
20
  ## ¿Qué es esto?
@@ -26,11 +26,14 @@ Un CLI en TypeScript y servidor MCP que carga canciones de piano desde [ai-music
26
26
  - **4 modos de reproducción** — completa, compás por compás, manos separadas, bucle
27
27
  - **Control de velocidad** — práctica lenta a 0.5x hasta reproducción rápida a 2x, acumulable con modificación de tempo
28
28
  - **Seguimiento de progreso** — callbacks configurables en hitos porcentuales o por compás
29
- - **7 hooks de enseñanza** — console, silent, recording, callback, voice, aside, compose
29
+ - **9 hooks de enseñanza** — console, silent, recording, callback, voice, aside, sing-along, compose, live feedback
30
+ - **Narración de canto** — nombres de notas, solfeo, contorno o sílabas hablados antes de cada compás
31
+ - **Canto sincronizado + piano** — concurrent (sensación de dúo) o before (voz primero) mediante `--with-piano`
30
32
  - **Retroalimentación por voz** — salida `VoiceDirective` para integración con mcp-voice-soundboard
33
+ - **Retroalimentación en vivo** — estímulo en tiempo real, consejos de dinámica y avisos de dificultad durante la reproducción
31
34
  - **Interjecciones aparte** — salida `AsideDirective` para la bandeja de mcp-aside
32
35
  - **Análisis seguro** — las notas incorrectas se omiten con `ParseWarning`s recopilados
33
- - **7 herramientas MCP** — exponen el registro, notas de enseñanza y recomendaciones de canciones a LLMs
36
+ - **8 herramientas MCP** — exponen el registro, notas de enseñanza, canto guiado y recomendaciones de canciones a LLMs
34
37
  - **Analizador de notas** — notación científica de altura a MIDI y viceversa
35
38
  - **Conector simulado** — cobertura completa de tests sin hardware MIDI
36
39
 
@@ -50,30 +53,42 @@ npm install -g @mcptoolshop/pianoai
50
53
 
51
54
  ```bash
52
55
  # Listar todas las canciones
53
- pianai list
56
+ pianoai list
54
57
 
55
58
  # Mostrar detalles de canción + notas de enseñanza
56
- pianai info moonlight-sonata-mvt1
59
+ pianoai info moonlight-sonata-mvt1
57
60
 
58
61
  # Reproducir una canción a través de VMPK
59
- pianai play let-it-be
62
+ pianoai play let-it-be
60
63
 
61
64
  # Reproducir con modificación de tempo
62
- pianai play basic-12-bar-blues --tempo 80
65
+ pianoai play basic-12-bar-blues --tempo 80
63
66
 
64
67
  # Avanzar compás por compás
65
- pianai play autumn-leaves --mode measure
68
+ pianoai play autumn-leaves --mode measure
66
69
 
67
70
  # Práctica a mitad de velocidad
68
- pianai play moonlight-sonata-mvt1 --speed 0.5
71
+ pianoai play moonlight-sonata-mvt1 --speed 0.5
69
72
 
70
73
  # Práctica lenta con manos separadas
71
- pianai play dream-on --speed 0.75 --mode hands
74
+ pianoai play dream-on --speed 0.75 --mode hands
75
+
76
+ # Cantar junto — narrar nombres de notas durante la reproducción
77
+ pianoai sing let-it-be --mode note-names
78
+
79
+ # Cantar junto con solfeo, ambas manos
80
+ pianoai sing fur-elise --mode solfege --hand both
81
+
82
+ # Cantar + piano juntos (sensación de dúo)
83
+ pianoai sing let-it-be --with-piano
84
+
85
+ # Voz primero, luego piano
86
+ pianoai sing fur-elise --with-piano --sync before
72
87
  ```
73
88
 
74
89
  ## Servidor MCP
75
90
 
76
- El servidor MCP expone 7 herramientas para integración con LLMs:
91
+ El servidor MCP expone 8 herramientas para integración con LLMs:
77
92
 
78
93
  | Herramienta | Descripción |
79
94
  |-------------|-------------|
@@ -81,6 +96,7 @@ El servidor MCP expone 7 herramientas para integración con LLMs:
81
96
  | `song_info` | Obtener lenguaje musical completo, objetivos de enseñanza, sugerencias de práctica |
82
97
  | `registry_stats` | Conteo de canciones por género y dificultad |
83
98
  | `teaching_note` | Nota de enseñanza por compás, digitación, dinámicas |
99
+ | `sing_along` | Obtener texto cantable por compás (nombres de notas, solfeo, contorno, sílabas); soporta `withPiano` para acompañamiento sincronizado |
84
100
  | `suggest_song` | Obtener una recomendación basada en criterios |
85
101
  | `list_measures` | Vista general de compases con notas de enseñanza + advertencias de análisis |
86
102
  | `practice_setup` | Sugerir velocidad, modo y configuración de voz para una canción |
@@ -95,8 +111,8 @@ pnpm mcp
95
111
  ```json
96
112
  {
97
113
  "mcpServers": {
98
- "pianai": {
99
- "command": "pianai-mcp"
114
+ "pianoai": {
115
+ "command": "pianoai-mcp"
100
116
  }
101
117
  }
102
118
  }
@@ -109,6 +125,7 @@ pnpm mcp
109
125
  | `list [--genre <genre>]` | Listar canciones disponibles, opcionalmente filtradas por género |
110
126
  | `info <song-id>` | Mostrar detalles de canción: lenguaje musical, notas de enseñanza, estructura |
111
127
  | `play <song-id> [opts]` | Reproducir una canción a través de VMPK vía MIDI |
128
+ | `sing <song-id> [opts]` | Cantar junto — narrar notas durante la reproducción |
112
129
  | `stats` | Estadísticas del registro (canciones, géneros, compases) |
113
130
  | `ports` | Listar puertos de salida MIDI disponibles |
114
131
  | `help` | Mostrar información de uso |
@@ -122,9 +139,18 @@ pnpm mcp
122
139
  | `--speed <mult>` | Multiplicador de velocidad: 0.5 = mitad, 1.0 = normal, 2.0 = doble |
123
140
  | `--mode <mode>` | Modo de reproducción: `full`, `measure`, `hands`, `loop` |
124
141
 
142
+ ### Opciones de canto
143
+
144
+ | Bandera | Descripción |
145
+ |---------|-------------|
146
+ | `--mode <mode>` | Modo de canto: `note-names`, `solfege`, `contour`, `syllables` |
147
+ | `--hand <hand>` | Qué mano: `right`, `left`, `both` |
148
+ | `--with-piano` | Reproducir acompañamiento de piano mientras se canta |
149
+ | `--sync <mode>` | Sincronización voz+piano: `concurrent` (por defecto, dúo), `before` (voz primero) |
150
+
125
151
  ## Motor de enseñanza
126
152
 
127
- El motor de enseñanza dispara hooks durante la reproducción. 7 implementaciones de hooks cubren todos los casos de uso:
153
+ El motor de enseñanza dispara hooks durante la reproducción. 9 implementaciones de hooks cubren todos los casos de uso:
128
154
 
129
155
  | Hook | Caso de uso |
130
156
  |------|-------------|
@@ -134,6 +160,8 @@ El motor de enseñanza dispara hooks durante la reproducción. 7 implementacione
134
160
  | `createCallbackTeachingHook(cb)` | Personalizado — redirige a cualquier callback asíncrono |
135
161
  | `createVoiceTeachingHook(sink)` | Voz — produce `VoiceDirective` para mcp-voice-soundboard |
136
162
  | `createAsideTeachingHook(sink)` | Aparte — produce `AsideDirective` para la bandeja de mcp-aside |
163
+ | `createSingAlongHook(sink, song)` | Canto — narra notas/solfeo/contorno antes de cada compás |
164
+ | `createLiveFeedbackHook(voiceSink, asideSink, song)` | Retroalimentación — estímulo, consejos de dinámica, avisos de dificultad |
137
165
  | `composeTeachingHooks(...hooks)` | Múltiple — despacha a múltiples hooks en serie |
138
166
 
139
167
  ### Retroalimentación por voz
@@ -159,6 +187,32 @@ await session.play();
159
187
  // voiceHook.directives → todas las instrucciones de voz que se dispararon
160
188
  ```
161
189
 
190
+ ### Narración de canto
191
+
192
+ ```typescript
193
+ import {
194
+ createSingAlongHook,
195
+ createVoiceTeachingHook,
196
+ composeTeachingHooks,
197
+ createSession,
198
+ } from "@mcptoolshop/pianoai";
199
+ import { getSong } from "@mcptoolshop/ai-music-sheets";
200
+
201
+ const song = getSong("let-it-be")!;
202
+
203
+ // Narrar solfeo antes de cada compás, luego notas de enseñanza
204
+ const singHook = createSingAlongHook(voiceSink, song, {
205
+ mode: "solfege",
206
+ hand: "right",
207
+ });
208
+ const teachHook = createVoiceTeachingHook(voiceSink);
209
+ const combined = composeTeachingHooks(singHook, teachHook);
210
+
211
+ const session = createSession(song, connector, { teachingHook: combined });
212
+ await session.play();
213
+ // singHook.directives → "Do... Mi... Sol" bloqueante antes de cada compás
214
+ ```
215
+
162
216
  ### Composición de hooks
163
217
 
164
218
  ```typescript
@@ -212,13 +266,13 @@ await connector.disconnect();
212
266
  ## Arquitectura
213
267
 
214
268
  ```
215
- ai-music-sheets (biblioteca) pianai (tiempo de ejecución)
269
+ ai-music-sheets (biblioteca) pianoai (tiempo de ejecución)
216
270
  ┌──────────────────────┐ ┌────────────────────────────────┐
217
271
  │ SongEntry (híbrido) │────────→│ Note Parser (seguro + estricto)│
218
272
  │ Registry (búsqueda) │ │ Session Engine (veloc.+progreso│
219
- │ 10 canciones, 10 gén.│ │ Teaching Engine (7 hooks) │
273
+ │ 10 canciones, 10 gén.│ │ Teaching Engine (9 hooks) │
220
274
  └──────────────────────┘ │ VMPK Connector (JZZ) │
221
- │ MCP Server (7 herramientas) │
275
+ │ MCP Server (8 herramientas) │
222
276
  │ CLI (barra de progreso + voz) │
223
277
  └─────────┬──────────────────────┘
224
278
  │ MIDI
@@ -237,8 +291,8 @@ Enrutamiento de hooks de enseñanza:
237
291
  ## Testing
238
292
 
239
293
  ```bash
240
- pnpm test # 121 tests con Vitest (parser + session + teaching + voice + aside)
241
- pnpm smoke # 20 smoke tests (integración, sin MIDI necesario)
294
+ pnpm test # 181 tests con Vitest (parser + session + teaching + voice + aside + sing-along)
295
+ pnpm smoke # 29 smoke tests (integración, sin MIDI necesario)
242
296
  pnpm typecheck # tsc --noEmit
243
297
  ```
244
298
 
package/README.fr.md CHANGED
@@ -12,9 +12,9 @@
12
12
  Serveur MCP + CLI pour l'enseignement du piano par IA — joue via VMPK par MIDI avec retour vocal.
13
13
  </p>
14
14
 
15
- [![Tests](https://img.shields.io/badge/tests-121_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
- [![Smoke](https://img.shields.io/badge/smoke-20_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
- [![MCP Tools](https://img.shields.io/badge/MCP_tools-7-purple)](https://github.com/mcp-tool-shop-org/pianoai)
15
+ [![Tests](https://img.shields.io/badge/tests-181_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
+ [![Smoke](https://img.shields.io/badge/smoke-29_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-8-purple)](https://github.com/mcp-tool-shop-org/pianoai)
18
18
  [![Songs](https://img.shields.io/badge/songs-10_(via_ai--music--sheets)-blue)](https://github.com/mcp-tool-shop-org/ai-music-sheets)
19
19
 
20
20
  ## Qu'est-ce que c'est ?
@@ -26,11 +26,14 @@ Un CLI TypeScript et un serveur MCP qui charge des morceaux de piano depuis [ai-
26
26
  - **4 modes de lecture** — complet, mesure par mesure, mains séparées, boucle
27
27
  - **Contrôle de la vitesse** — 0.5x pour la pratique lente jusqu'à 2x en lecture rapide, cumulable avec le tempo personnalisé
28
28
  - **Suivi de progression** — callbacks configurables par pourcentage ou par mesure
29
- - **7 hooks pédagogiques** — console, silencieux, enregistrement, callback, voix, aside, composition
29
+ - **9 hooks pédagogiques** — console, silencieux, enregistrement, callback, voix, aside, chant accompagné, composition, live feedback
30
+ - **Narration chantée** — noms de notes, solfège, contour ou syllabes prononcés avant chaque mesure
31
+ - **Chant synchronisé + piano** — concurrent (sensation de duo) ou before (voix d'abord) via `--with-piano`
30
32
  - **Retour vocal** — sortie `VoiceDirective` pour l'intégration mcp-voice-soundboard
33
+ - **Retour pédagogique en direct** — encouragements en temps réel, conseils de dynamique et avertissements de difficulté pendant la lecture
31
34
  - **Interjections aside** — sortie `AsideDirective` pour la boîte de réception mcp-aside
32
35
  - **Analyse sécurisée** — les notes invalides sont ignorées avec collecte de `ParseWarning`
33
- - **7 outils MCP** — exposent le registre, les notes pédagogiques et les recommandations de morceaux aux LLMs
36
+ - **8 outils MCP** — exposent le registre, les notes pédagogiques, le chant accompagné et les recommandations de morceaux aux LLMs
34
37
  - **Analyseur de notes** — notation scientifique des hauteurs vers MIDI et inversement
35
38
  - **Connecteur mock** — couverture de test complète sans matériel MIDI
36
39
 
@@ -50,30 +53,42 @@ npm install -g @mcptoolshop/pianoai
50
53
 
51
54
  ```bash
52
55
  # Lister tous les morceaux
53
- pianai list
56
+ pianoai list
54
57
 
55
58
  # Afficher les détails d'un morceau + notes pédagogiques
56
- pianai info moonlight-sonata-mvt1
59
+ pianoai info moonlight-sonata-mvt1
57
60
 
58
61
  # Jouer un morceau via VMPK
59
- pianai play let-it-be
62
+ pianoai play let-it-be
60
63
 
61
64
  # Jouer avec un tempo personnalisé
62
- pianai play basic-12-bar-blues --tempo 80
65
+ pianoai play basic-12-bar-blues --tempo 80
63
66
 
64
67
  # Avancer mesure par mesure
65
- pianai play autumn-leaves --mode measure
68
+ pianoai play autumn-leaves --mode measure
66
69
 
67
70
  # Pratique à mi-vitesse
68
- pianai play moonlight-sonata-mvt1 --speed 0.5
71
+ pianoai play moonlight-sonata-mvt1 --speed 0.5
69
72
 
70
73
  # Pratique lente mains séparées
71
- pianai play dream-on --speed 0.75 --mode hands
74
+ pianoai play dream-on --speed 0.75 --mode hands
75
+
76
+ # Chanter ensemble — narrer les noms de notes pendant la lecture
77
+ pianoai sing let-it-be --mode note-names
78
+
79
+ # Chanter ensemble en solfège, deux mains
80
+ pianoai sing fur-elise --mode solfege --hand both
81
+
82
+ # Chanter + piano ensemble (duo)
83
+ pianoai sing let-it-be --with-piano
84
+
85
+ # Voix d'abord, puis piano
86
+ pianoai sing fur-elise --with-piano --sync before
72
87
  ```
73
88
 
74
89
  ## Serveur MCP
75
90
 
76
- Le serveur MCP expose 7 outils pour l'intégration LLM :
91
+ Le serveur MCP expose 8 outils pour l'intégration LLM :
77
92
 
78
93
  | Outil | Description |
79
94
  |-------|-------------|
@@ -81,6 +96,7 @@ Le serveur MCP expose 7 outils pour l'intégration LLM :
81
96
  | `song_info` | Obtenir le langage musical complet, les objectifs pédagogiques, les suggestions de pratique |
82
97
  | `registry_stats` | Nombre de morceaux par genre et difficulté |
83
98
  | `teaching_note` | Note pédagogique par mesure, doigtés, dynamiques |
99
+ | `sing_along` | Obtenir le texte chantable par mesure (noms de notes, solfège, contour, syllabes) ; supporte `withPiano` pour l'accompagnement synchronisé |
84
100
  | `suggest_song` | Obtenir une recommandation selon des critères |
85
101
  | `list_measures` | Aperçu des mesures avec notes pédagogiques + avertissements d'analyse |
86
102
  | `practice_setup` | Suggérer la vitesse, le mode et les réglages vocaux pour un morceau |
@@ -95,8 +111,8 @@ pnpm mcp
95
111
  ```json
96
112
  {
97
113
  "mcpServers": {
98
- "pianai": {
99
- "command": "pianai-mcp"
114
+ "pianoai": {
115
+ "command": "pianoai-mcp"
100
116
  }
101
117
  }
102
118
  }
@@ -109,6 +125,7 @@ pnpm mcp
109
125
  | `list [--genre <genre>]` | Lister les morceaux disponibles, avec filtre optionnel par genre |
110
126
  | `info <song-id>` | Afficher les détails du morceau : langage musical, notes pédagogiques, structure |
111
127
  | `play <song-id> [opts]` | Jouer un morceau via VMPK par MIDI |
128
+ | `sing <song-id> [opts]` | Chanter ensemble — narrer les notes pendant la lecture |
112
129
  | `stats` | Statistiques du registre (morceaux, genres, mesures) |
113
130
  | `ports` | Lister les ports de sortie MIDI disponibles |
114
131
  | `help` | Afficher les informations d'utilisation |
@@ -122,9 +139,18 @@ pnpm mcp
122
139
  | `--speed <mult>` | Multiplicateur de vitesse : 0.5 = moitié, 1.0 = normal, 2.0 = double |
123
140
  | `--mode <mode>` | Mode de lecture : `full`, `measure`, `hands`, `loop` |
124
141
 
142
+ ### Options de chant
143
+
144
+ | Option | Description |
145
+ |--------|-------------|
146
+ | `--mode <mode>` | Mode de chant : `note-names`, `solfege`, `contour`, `syllables` |
147
+ | `--hand <hand>` | Quelle main : `right`, `left`, `both` |
148
+ | `--with-piano` | Jouer l'accompagnement piano en chantant |
149
+ | `--sync <mode>` | Synchronisation voix+piano : `concurrent` (par défaut, duo), `before` (voix d'abord) |
150
+
125
151
  ## Moteur pédagogique
126
152
 
127
- Le moteur pédagogique déclenche des hooks pendant la lecture. 7 implémentations de hooks couvrent tous les cas d'usage :
153
+ Le moteur pédagogique déclenche des hooks pendant la lecture. 9 implémentations de hooks couvrent tous les cas d'usage :
128
154
 
129
155
  | Hook | Cas d'usage |
130
156
  |------|-------------|
@@ -134,6 +160,8 @@ Le moteur pédagogique déclenche des hooks pendant la lecture. 7 implémentatio
134
160
  | `createCallbackTeachingHook(cb)` | Personnalisé — redirige vers n'importe quel callback asynchrone |
135
161
  | `createVoiceTeachingHook(sink)` | Voix — produit des `VoiceDirective` pour mcp-voice-soundboard |
136
162
  | `createAsideTeachingHook(sink)` | Aside — produit des `AsideDirective` pour la boîte de réception mcp-aside |
163
+ | `createSingAlongHook(sink, song)` | Chant — narre les notes/solfège/contour avant chaque mesure |
164
+ | `createLiveFeedbackHook(voiceSink, asideSink, song)` | Retour en direct — encouragements, conseils de dynamique, avertissements de difficulté |
137
165
  | `composeTeachingHooks(...hooks)` | Multi — dispatch vers plusieurs hooks en série |
138
166
 
139
167
  ### Retour vocal
@@ -177,6 +205,32 @@ const composed = composeTeachingHooks(
177
205
  );
178
206
  ```
179
207
 
208
+ ### Narration chantée
209
+
210
+ ```typescript
211
+ import {
212
+ createSingAlongHook,
213
+ createVoiceTeachingHook,
214
+ composeTeachingHooks,
215
+ createSession,
216
+ } from "@mcptoolshop/pianoai";
217
+ import { getSong } from "@mcptoolshop/ai-music-sheets";
218
+
219
+ const song = getSong("let-it-be")!;
220
+
221
+ // Narrer le solfège avant chaque mesure, puis les notes pédagogiques
222
+ const singHook = createSingAlongHook(voiceSink, song, {
223
+ mode: "solfege",
224
+ hand: "right",
225
+ });
226
+ const teachHook = createVoiceTeachingHook(voiceSink);
227
+ const combined = composeTeachingHooks(singHook, teachHook);
228
+
229
+ const session = createSession(song, connector, { teachingHook: combined });
230
+ await session.play();
231
+ // singHook.directives → "Do... Mi... Sol" bloquant avant chaque mesure
232
+ ```
233
+
180
234
  ## API programmatique
181
235
 
182
236
  ```typescript
@@ -212,13 +266,13 @@ await connector.disconnect();
212
266
  ## Architecture
213
267
 
214
268
  ```
215
- ai-music-sheets (bibliothèque) pianai (runtime)
269
+ ai-music-sheets (bibliothèque) pianoai (runtime)
216
270
  ┌──────────────────────┐ ┌────────────────────────────────┐
217
271
  │ SongEntry (hybride) │────────→│ Note Parser (sûr + strict) │
218
272
  │ Registry (recherche) │ │ Session Engine (vitesse+suivi) │
219
- │ 10 morceaux, 10 genres│ │ Teaching Engine (7 hooks) │
273
+ │ 10 morceaux, 10 genres│ │ Teaching Engine (9 hooks) │
220
274
  └──────────────────────┘ │ VMPK Connector (JZZ) │
221
- │ MCP Server (7 outils) │
275
+ │ MCP Server (8 outils) │
222
276
  │ CLI (barre de progression+voix)│
223
277
  └─────────┬──────────────────────┘
224
278
  │ MIDI
@@ -237,8 +291,8 @@ Routage des hooks pédagogiques :
237
291
  ## Tests
238
292
 
239
293
  ```bash
240
- pnpm test # 121 tests Vitest (parser + session + teaching + voice + aside)
241
- pnpm smoke # 20 tests d'intégration (pas de MIDI requis)
294
+ pnpm test # 181 tests Vitest (parser + session + teaching + voice + aside + chant)
295
+ pnpm smoke # 29 tests d'intégration (pas de MIDI requis)
242
296
  pnpm typecheck # tsc --noEmit
243
297
  ```
244
298
 
package/README.hi.md CHANGED
@@ -12,9 +12,9 @@
12
12
  AI-संचालित पियानो शिक्षण के लिए MCP सर्वर + CLI — MIDI के माध्यम से VMPK पर बजाता है और वॉइस फीडबैक देता है।
13
13
  </p>
14
14
 
15
- [![Tests](https://img.shields.io/badge/tests-121_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
- [![Smoke](https://img.shields.io/badge/smoke-20_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
- [![MCP Tools](https://img.shields.io/badge/MCP_tools-7-purple)](https://github.com/mcp-tool-shop-org/pianoai)
15
+ [![Tests](https://img.shields.io/badge/tests-181_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
16
+ [![Smoke](https://img.shields.io/badge/smoke-29_passing-brightgreen)](https://github.com/mcp-tool-shop-org/pianoai)
17
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-8-purple)](https://github.com/mcp-tool-shop-org/pianoai)
18
18
  [![Songs](https://img.shields.io/badge/songs-10_(via_ai--music--sheets)-blue)](https://github.com/mcp-tool-shop-org/ai-music-sheets)
19
19
 
20
20
  ## यह क्या है?
@@ -26,11 +26,14 @@
26
26
  - **4 प्लेबैक मोड** — full, measure-by-measure, hands separate, loop
27
27
  - **स्पीड कंट्रोल** — 0.5x धीमे अभ्यास से 2x तेज़ प्लेबैक तक, टेम्पो ओवरराइड के साथ स्टैक होता है
28
28
  - **प्रगति ट्रैकिंग** — प्रतिशत माइलस्टोन या प्रति-मेजर पर कॉन्फ़िगर करने योग्य कॉलबैक
29
- - **7 टीचिंग हुक** — console, silent, recording, callback, voice, aside, compose
29
+ - **9 टीचिंग हुक** — console, silent, recording, callback, voice, aside, sing-along, compose, live feedback
30
+ - **सिंग-अलॉंग नैरेशन** — प्रत्येक मेजर से पहले नोट नाम, सोलफेज, कॉन्टूर, या सिलेबल बोले जाते हैं
31
+ - **सिंक्रोनाइज़्ड गायन + पियानो** — concurrent (डुएट फ़ील) या before (पहले वॉइस) `--with-piano` के माध्यम से
32
+ - **लाइव टीचिंग फीडबैक** — प्लेबैक के दौरान रीयल-टाइम प्रोत्साहन, डायनामिक्स टिप्स, और कठिनाई चेतावनियाँ
30
33
  - **वॉइस फीडबैक** — mcp-voice-soundboard इंटीग्रेशन के लिए `VoiceDirective` आउटपुट
31
34
  - **Aside इंटरजेक्शन** — mcp-aside इनबॉक्स के लिए `AsideDirective` आउटपुट
32
35
  - **सुरक्षित पार्सिंग** — खराब नोट्स एकत्रित `ParseWarning` के साथ सुचारू रूप से स्किप होते हैं
33
- - **7 MCP टूल** — LLM के लिए रजिस्ट्री, टीचिंग नोट्स, और गाने की सिफारिशें उपलब्ध कराते हैं
36
+ - **8 MCP टूल** — LLM के लिए रजिस्ट्री, टीचिंग नोट्स, सिंग-अलॉंग, और गाने की सिफारिशें उपलब्ध कराते हैं
34
37
  - **नोट पार्सर** — साइंटिफिक पिच नोटेशन से MIDI और वापस
35
38
  - **मॉक कनेक्टर** — MIDI हार्डवेयर के बिना पूर्ण टेस्ट कवरेज
36
39
 
@@ -50,30 +53,42 @@ npm install -g @mcptoolshop/pianoai
50
53
 
51
54
  ```bash
52
55
  # सभी गाने सूचीबद्ध करें
53
- pianai list
56
+ pianoai list
54
57
 
55
58
  # गाने का विवरण + टीचिंग नोट्स देखें
56
- pianai info moonlight-sonata-mvt1
59
+ pianoai info moonlight-sonata-mvt1
57
60
 
58
61
  # VMPK के माध्यम से गाना बजाएँ
59
- pianai play let-it-be
62
+ pianoai play let-it-be
60
63
 
61
64
  # टेम्पो ओवरराइड के साथ बजाएँ
62
- pianai play basic-12-bar-blues --tempo 80
65
+ pianoai play basic-12-bar-blues --tempo 80
63
66
 
64
67
  # मेजर-दर-मेजर चरणबद्ध तरीके से चलें
65
- pianai play autumn-leaves --mode measure
68
+ pianoai play autumn-leaves --mode measure
66
69
 
67
70
  # आधी गति से अभ्यास
68
- pianai play moonlight-sonata-mvt1 --speed 0.5
71
+ pianoai play moonlight-sonata-mvt1 --speed 0.5
69
72
 
70
73
  # धीमा हैंड्स-सेपरेट अभ्यास
71
- pianai play dream-on --speed 0.75 --mode hands
74
+ pianoai play dream-on --speed 0.75 --mode hands
75
+
76
+ # सिंग अलॉंग — प्लेबैक के दौरान नोट नाम नैरेट करें
77
+ pianoai sing let-it-be --mode note-names
78
+
79
+ # सोलफेज के साथ सिंग अलॉंग, दोनों हाथ
80
+ pianoai sing fur-elise --mode solfege --hand both
81
+
82
+ # सिंग + पियानो एक साथ (डुएट फ़ील)
83
+ pianoai sing let-it-be --with-piano
84
+
85
+ # पहले वॉइस, फिर पियानो
86
+ pianoai sing fur-elise --with-piano --sync before
72
87
  ```
73
88
 
74
89
  ## MCP सर्वर
75
90
 
76
- MCP सर्वर LLM इंटीग्रेशन के लिए 7 टूल उपलब्ध कराता है:
91
+ MCP सर्वर LLM इंटीग्रेशन के लिए 8 टूल उपलब्ध कराता है:
77
92
 
78
93
  | टूल | विवरण |
79
94
  |------|--------|
@@ -82,6 +97,7 @@ MCP सर्वर LLM इंटीग्रेशन के लिए 7 टू
82
97
  | `registry_stats` | शैली और कठिनाई के अनुसार गानों की गिनती |
83
98
  | `teaching_note` | प्रति-मेजर टीचिंग नोट, फिंगरिंग, डायनामिक्स |
84
99
  | `suggest_song` | मानदंडों के आधार पर सिफारिश प्राप्त करें |
100
+ | `sing_along` | प्रति-मेजर गाने योग्य टेक्स्ट (नोट नाम, सोलफेज, कॉन्टूर, सिलेबल) प्राप्त करें; `withPiano` सपोर्ट |
85
101
  | `list_measures` | टीचिंग नोट्स + पार्स चेतावनियों के साथ मेजर का अवलोकन |
86
102
  | `practice_setup` | किसी गाने के लिए स्पीड, मोड, और वॉइस सेटिंग्स सुझाएँ |
87
103
 
@@ -95,8 +111,8 @@ pnpm mcp
95
111
  ```json
96
112
  {
97
113
  "mcpServers": {
98
- "pianai": {
99
- "command": "pianai-mcp"
114
+ "pianoai": {
115
+ "command": "pianoai-mcp"
100
116
  }
101
117
  }
102
118
  }
@@ -109,6 +125,7 @@ pnpm mcp
109
125
  | `list [--genre <genre>]` | उपलब्ध गाने सूचीबद्ध करें, वैकल्पिक रूप से शैली द्वारा फ़िल्टर |
110
126
  | `info <song-id>` | गाने का विवरण दिखाएँ: संगीत भाषा, टीचिंग नोट्स, संरचना |
111
127
  | `play <song-id> [opts]` | MIDI के माध्यम से VMPK पर गाना बजाएँ |
128
+ | `sing <song-id> [opts]` | सिंग अलॉंग — प्लेबैक के दौरान नोट्स नैरेट करें |
112
129
  | `stats` | रजिस्ट्री आँकड़े (गाने, शैलियाँ, मेजर) |
113
130
  | `ports` | उपलब्ध MIDI आउटपुट पोर्ट सूचीबद्ध करें |
114
131
  | `help` | उपयोग जानकारी दिखाएँ |
@@ -122,9 +139,18 @@ pnpm mcp
122
139
  | `--speed <mult>` | स्पीड मल्टीप्लायर: 0.5 = आधा, 1.0 = सामान्य, 2.0 = दोगुना |
123
140
  | `--mode <mode>` | प्लेबैक मोड: `full`, `measure`, `hands`, `loop` |
124
141
 
142
+ ### सिंग विकल्प
143
+
144
+ | फ़्लैग | विवरण |
145
+ |--------|--------|
146
+ | `--mode <mode>` | सिंग-अलॉंग मोड: `note-names`, `solfege`, `contour`, `syllables` |
147
+ | `--hand <hand>` | कौन सा हाथ: `right`, `left`, `both` |
148
+ | `--with-piano` | गायन के दौरान पियानो संगत बजाएँ |
149
+ | `--sync <mode>` | वॉइस+पियानो सिंक: `concurrent` (डिफ़ॉल्ट, डुएट), `before` (पहले वॉइस) |
150
+
125
151
  ## टीचिंग इंजन
126
152
 
127
- टीचिंग इंजन प्लेबैक के दौरान हुक फायर करता है। 7 हुक इम्प्लीमेंटेशन हर उपयोग मामले को कवर करते हैं:
153
+ टीचिंग इंजन प्लेबैक के दौरान हुक फायर करता है। 9 हुक इम्प्लीमेंटेशन हर उपयोग मामले को कवर करते हैं:
128
154
 
129
155
  | हुक | उपयोग मामला |
130
156
  |------|-------------|
@@ -134,6 +160,8 @@ pnpm mcp
134
160
  | `createCallbackTeachingHook(cb)` | कस्टम — किसी भी async कॉलबैक पर रूट करें |
135
161
  | `createVoiceTeachingHook(sink)` | वॉइस — mcp-voice-soundboard के लिए `VoiceDirective` उत्पन्न करता है |
136
162
  | `createAsideTeachingHook(sink)` | Aside — mcp-aside इनबॉक्स के लिए `AsideDirective` उत्पन्न करता है |
163
+ | `createSingAlongHook(sink, song)` | सिंग-अलॉंग — प्रत्येक मेजर से पहले नोट नाम/सोलफेज/कॉन्टूर नैरेट करता है |
164
+ | `createLiveFeedbackHook(voiceSink, asideSink, song)` | लाइव फीडबैक — प्रोत्साहन, डायनामिक्स टिप्स, कठिनाई चेतावनियाँ |
137
165
  | `composeTeachingHooks(...hooks)` | मल्टी — क्रमिक रूप से कई हुक पर डिस्पैच करता है |
138
166
 
139
167
  ### वॉइस फीडबैक
@@ -177,6 +205,32 @@ const composed = composeTeachingHooks(
177
205
  );
178
206
  ```
179
207
 
208
+ ### सिंग-अलॉंग नैरेशन
209
+
210
+ ```typescript
211
+ import {
212
+ createSingAlongHook,
213
+ createVoiceTeachingHook,
214
+ composeTeachingHooks,
215
+ createSession,
216
+ } from "@mcptoolshop/pianoai";
217
+ import { getSong } from "@mcptoolshop/ai-music-sheets";
218
+
219
+ const song = getSong("let-it-be")!;
220
+
221
+ // प्रत्येक मेजर से पहले सोलफेज नैरेट करें, फिर टीचिंग नोट्स बोलें
222
+ const singHook = createSingAlongHook(voiceSink, song, {
223
+ mode: "solfege",
224
+ hand: "right",
225
+ });
226
+ const teachHook = createVoiceTeachingHook(voiceSink);
227
+ const combined = composeTeachingHooks(singHook, teachHook);
228
+
229
+ const session = createSession(song, connector, { teachingHook: combined });
230
+ await session.play();
231
+ // singHook.directives → प्रत्येक मेजर से पहले ब्लॉकिंग "Do... Mi... Sol"
232
+ ```
233
+
180
234
  ## प्रोग्रामेटिक API
181
235
 
182
236
  ```typescript
@@ -212,13 +266,13 @@ await connector.disconnect();
212
266
  ## आर्किटेक्चर
213
267
 
214
268
  ```
215
- ai-music-sheets (लाइब्रेरी) pianai (रनटाइम)
269
+ ai-music-sheets (लाइब्रेरी) pianoai (रनटाइम)
216
270
  ┌──────────────────────┐ ┌────────────────────────────────┐
217
271
  │ SongEntry (हाइब्रिड) │────────→│ Note Parser (सुरक्षित + सख्त) │
218
272
  │ Registry (खोज) │ │ Session Engine (स्पीड+प्रगति) │
219
- │ 10 गाने, 10 शैलियाँ │ │ Teaching Engine (7 हुक) │
273
+ │ 10 गाने, 10 शैलियाँ │ │ Teaching Engine (9 हुक) │
220
274
  └──────────────────────┘ │ VMPK Connector (JZZ) │
221
- │ MCP Server (7 टूल) │
275
+ │ MCP Server (8 टूल) │
222
276
  │ CLI (प्रोग्रेस बार + वॉइस) │
223
277
  └─────────┬──────────────────────┘
224
278
  │ MIDI
@@ -237,8 +291,8 @@ ai-music-sheets (लाइब्रेरी) pianai (रनटाइम)
237
291
  ## टेस्टिंग
238
292
 
239
293
  ```bash
240
- pnpm test # 121 Vitest टेस्ट (पार्सर + सेशन + टीचिंग + वॉइस + aside)
241
- pnpm smoke # 20 स्मोक टेस्ट (इंटीग्रेशन, MIDI आवश्यक नहीं)
294
+ pnpm test # 181 Vitest टेस्ट (पार्सर + सेशन + टीचिंग + वॉइस + aside + सिंग-अलॉंग)
295
+ pnpm smoke # 29 स्मोक टेस्ट (इंटीग्रेशन, MIDI आवश्यक नहीं)
242
296
  pnpm typecheck # tsc --noEmit
243
297
  ```
244
298