@mcptoolshop/ai_jam_session 0.1.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.
Files changed (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.es.md +212 -0
  3. package/README.fr.md +212 -0
  4. package/README.hi.md +212 -0
  5. package/README.it.md +212 -0
  6. package/README.ja.md +214 -0
  7. package/README.md +214 -0
  8. package/README.pt-BR.md +212 -0
  9. package/dist/audio-engine.d.ts +9 -0
  10. package/dist/audio-engine.d.ts.map +1 -0
  11. package/dist/audio-engine.js +422 -0
  12. package/dist/audio-engine.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +551 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/index.d.ts +32 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +41 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/mcp-server.d.ts +3 -0
  22. package/dist/mcp-server.d.ts.map +1 -0
  23. package/dist/mcp-server.js +903 -0
  24. package/dist/mcp-server.js.map +1 -0
  25. package/dist/midi/parser.d.ts +16 -0
  26. package/dist/midi/parser.d.ts.map +1 -0
  27. package/dist/midi/parser.js +192 -0
  28. package/dist/midi/parser.js.map +1 -0
  29. package/dist/midi/types.d.ts +44 -0
  30. package/dist/midi/types.d.ts.map +1 -0
  31. package/dist/midi/types.js +8 -0
  32. package/dist/midi/types.js.map +1 -0
  33. package/dist/note-parser.d.ts +105 -0
  34. package/dist/note-parser.d.ts.map +1 -0
  35. package/dist/note-parser.js +278 -0
  36. package/dist/note-parser.js.map +1 -0
  37. package/dist/playback/controls.d.ts +124 -0
  38. package/dist/playback/controls.d.ts.map +1 -0
  39. package/dist/playback/controls.js +252 -0
  40. package/dist/playback/controls.js.map +1 -0
  41. package/dist/playback/midi-engine.d.ts +68 -0
  42. package/dist/playback/midi-engine.d.ts.map +1 -0
  43. package/dist/playback/midi-engine.js +227 -0
  44. package/dist/playback/midi-engine.js.map +1 -0
  45. package/dist/playback/position.d.ts +95 -0
  46. package/dist/playback/position.d.ts.map +1 -0
  47. package/dist/playback/position.js +223 -0
  48. package/dist/playback/position.js.map +1 -0
  49. package/dist/playback/timing.d.ts +31 -0
  50. package/dist/playback/timing.d.ts.map +1 -0
  51. package/dist/playback/timing.js +57 -0
  52. package/dist/playback/timing.js.map +1 -0
  53. package/dist/sample-engine.d.ts +17 -0
  54. package/dist/sample-engine.d.ts.map +1 -0
  55. package/dist/sample-engine.js +428 -0
  56. package/dist/sample-engine.js.map +1 -0
  57. package/dist/schemas.d.ts +40 -0
  58. package/dist/schemas.d.ts.map +1 -0
  59. package/dist/schemas.js +42 -0
  60. package/dist/schemas.js.map +1 -0
  61. package/dist/session.d.ts +106 -0
  62. package/dist/session.d.ts.map +1 -0
  63. package/dist/session.js +361 -0
  64. package/dist/session.js.map +1 -0
  65. package/dist/sfz-parser.d.ts +36 -0
  66. package/dist/sfz-parser.d.ts.map +1 -0
  67. package/dist/sfz-parser.js +95 -0
  68. package/dist/sfz-parser.js.map +1 -0
  69. package/dist/smoke.d.ts +2 -0
  70. package/dist/smoke.d.ts.map +1 -0
  71. package/dist/smoke.js +512 -0
  72. package/dist/smoke.js.map +1 -0
  73. package/dist/songs/config/loader.d.ts +14 -0
  74. package/dist/songs/config/loader.d.ts.map +1 -0
  75. package/dist/songs/config/loader.js +53 -0
  76. package/dist/songs/config/loader.js.map +1 -0
  77. package/dist/songs/config/schema.d.ts +70 -0
  78. package/dist/songs/config/schema.d.ts.map +1 -0
  79. package/dist/songs/config/schema.js +53 -0
  80. package/dist/songs/config/schema.js.map +1 -0
  81. package/dist/songs/index.d.ts +16 -0
  82. package/dist/songs/index.d.ts.map +1 -0
  83. package/dist/songs/index.js +20 -0
  84. package/dist/songs/index.js.map +1 -0
  85. package/dist/songs/jam.d.ts +48 -0
  86. package/dist/songs/jam.d.ts.map +1 -0
  87. package/dist/songs/jam.js +324 -0
  88. package/dist/songs/jam.js.map +1 -0
  89. package/dist/songs/loader.d.ts +27 -0
  90. package/dist/songs/loader.d.ts.map +1 -0
  91. package/dist/songs/loader.js +90 -0
  92. package/dist/songs/loader.js.map +1 -0
  93. package/dist/songs/midi/hands.d.ts +46 -0
  94. package/dist/songs/midi/hands.d.ts.map +1 -0
  95. package/dist/songs/midi/hands.js +134 -0
  96. package/dist/songs/midi/hands.js.map +1 -0
  97. package/dist/songs/midi/ingest.d.ts +8 -0
  98. package/dist/songs/midi/ingest.d.ts.map +1 -0
  99. package/dist/songs/midi/ingest.js +191 -0
  100. package/dist/songs/midi/ingest.js.map +1 -0
  101. package/dist/songs/midi/measures.d.ts +41 -0
  102. package/dist/songs/midi/measures.d.ts.map +1 -0
  103. package/dist/songs/midi/measures.js +64 -0
  104. package/dist/songs/midi/measures.js.map +1 -0
  105. package/dist/songs/midi/types.d.ts +25 -0
  106. package/dist/songs/midi/types.d.ts.map +1 -0
  107. package/dist/songs/midi/types.js +8 -0
  108. package/dist/songs/midi/types.js.map +1 -0
  109. package/dist/songs/registry.d.ts +37 -0
  110. package/dist/songs/registry.d.ts.map +1 -0
  111. package/dist/songs/registry.js +197 -0
  112. package/dist/songs/registry.js.map +1 -0
  113. package/dist/songs/types.d.ts +99 -0
  114. package/dist/songs/types.d.ts.map +1 -0
  115. package/dist/songs/types.js +27 -0
  116. package/dist/songs/types.js.map +1 -0
  117. package/dist/teaching/live-midi-feedback.d.ts +36 -0
  118. package/dist/teaching/live-midi-feedback.d.ts.map +1 -0
  119. package/dist/teaching/live-midi-feedback.js +259 -0
  120. package/dist/teaching/live-midi-feedback.js.map +1 -0
  121. package/dist/teaching/midi-feedback.d.ts +33 -0
  122. package/dist/teaching/midi-feedback.d.ts.map +1 -0
  123. package/dist/teaching/midi-feedback.js +208 -0
  124. package/dist/teaching/midi-feedback.js.map +1 -0
  125. package/dist/teaching/sing-on-midi.d.ts +77 -0
  126. package/dist/teaching/sing-on-midi.d.ts.map +1 -0
  127. package/dist/teaching/sing-on-midi.js +186 -0
  128. package/dist/teaching/sing-on-midi.js.map +1 -0
  129. package/dist/teaching.d.ts +148 -0
  130. package/dist/teaching.d.ts.map +1 -0
  131. package/dist/teaching.js +453 -0
  132. package/dist/teaching.js.map +1 -0
  133. package/dist/test-sound.d.ts +3 -0
  134. package/dist/test-sound.d.ts.map +1 -0
  135. package/dist/test-sound.js +41 -0
  136. package/dist/test-sound.js.map +1 -0
  137. package/dist/types.d.ts +229 -0
  138. package/dist/types.d.ts.map +1 -0
  139. package/dist/types.js +22 -0
  140. package/dist/types.js.map +1 -0
  141. package/dist/vmpk.d.ts +23 -0
  142. package/dist/vmpk.d.ts.map +1 -0
  143. package/dist/vmpk.js +236 -0
  144. package/dist/vmpk.js.map +1 -0
  145. package/logo.png +0 -0
  146. package/package.json +70 -0
  147. package/songs/builtin/a-change-is-gonna-come.json +95 -0
  148. package/songs/builtin/a-thousand-years.json +93 -0
  149. package/songs/builtin/aint-no-sunshine.json +98 -0
  150. package/songs/builtin/all-blues.json +92 -0
  151. package/songs/builtin/autumn-leaves.json +100 -0
  152. package/songs/builtin/baba-oriley.json +91 -0
  153. package/songs/builtin/bach-invention-no1.json +70 -0
  154. package/songs/builtin/bach-prelude-c-major-bwv846.json +1282 -0
  155. package/songs/builtin/basic-12-bar-blues.json +119 -0
  156. package/songs/builtin/beethoven-waldstein-mvt1.json +7766 -0
  157. package/songs/builtin/bennie-and-the-jets.json +92 -0
  158. package/songs/builtin/besame-mucho.json +93 -0
  159. package/songs/builtin/black-orpheus.json +92 -0
  160. package/songs/builtin/blue-bossa.json +94 -0
  161. package/songs/builtin/blues-in-g.json +92 -0
  162. package/songs/builtin/bohemian-rhapsody-intro.json +94 -0
  163. package/songs/builtin/boogie-woogie-basics.json +93 -0
  164. package/songs/builtin/bossa-nova-basic.json +95 -0
  165. package/songs/builtin/chopin-nocturne-op9-no2.json +70 -0
  166. package/songs/builtin/cinema-paradiso.json +94 -0
  167. package/songs/builtin/clair-de-lune.json +11511 -0
  168. package/songs/builtin/clocks.json +91 -0
  169. package/songs/builtin/crystal-stream.json +70 -0
  170. package/songs/builtin/desafinado.json +93 -0
  171. package/songs/builtin/dont-stop-believin.json +91 -0
  172. package/songs/builtin/dream-on.json +100 -0
  173. package/songs/builtin/easy-winners.json +70 -0
  174. package/songs/builtin/el-condor-pasa.json +93 -0
  175. package/songs/builtin/elite-syncopations.json +70 -0
  176. package/songs/builtin/evening-calm.json +70 -0
  177. package/songs/builtin/everyday-blues.json +93 -0
  178. package/songs/builtin/fly-me-to-the-moon.json +91 -0
  179. package/songs/builtin/forrest-gump-suite.json +93 -0
  180. package/songs/builtin/fur-elise.json +20094 -0
  181. package/songs/builtin/georgia-on-my-mind.json +93 -0
  182. package/songs/builtin/girl-from-ipanema.json +92 -0
  183. package/songs/builtin/gladiolus-rag.json +70 -0
  184. package/songs/builtin/great-balls-of-fire.json +92 -0
  185. package/songs/builtin/guantanamera.json +92 -0
  186. package/songs/builtin/hallelujah.json +92 -0
  187. package/songs/builtin/hedwigs-theme.json +93 -0
  188. package/songs/builtin/hotel-california.json +92 -0
  189. package/songs/builtin/imagine.json +92 -0
  190. package/songs/builtin/just-the-two-of-us.json +92 -0
  191. package/songs/builtin/la-bamba.json +92 -0
  192. package/songs/builtin/layla-piano-coda.json +93 -0
  193. package/songs/builtin/lean-on-me.json +91 -0
  194. package/songs/builtin/let-it-be.json +101 -0
  195. package/songs/builtin/lets-stay-together.json +93 -0
  196. package/songs/builtin/magnetic-rag.json +70 -0
  197. package/songs/builtin/maple-leaf-rag.json +99 -0
  198. package/songs/builtin/mia-and-sebastians-theme.json +93 -0
  199. package/songs/builtin/minor-blues-in-a.json +94 -0
  200. package/songs/builtin/misty.json +94 -0
  201. package/songs/builtin/moon-river.json +93 -0
  202. package/songs/builtin/moonlight-sonata-mvt1.json +101 -0
  203. package/songs/builtin/morning-light.json +70 -0
  204. package/songs/builtin/mountain-dawn.json +70 -0
  205. package/songs/builtin/mozart-k545-mvt1.json +2956 -0
  206. package/songs/builtin/my-girl.json +92 -0
  207. package/songs/builtin/night-train.json +92 -0
  208. package/songs/builtin/november-rain.json +93 -0
  209. package/songs/builtin/ocean-waves.json +70 -0
  210. package/songs/builtin/over-the-rainbow.json +93 -0
  211. package/songs/builtin/oye-como-va.json +93 -0
  212. package/songs/builtin/peacherine-rag.json +70 -0
  213. package/songs/builtin/piano-man.json +92 -0
  214. package/songs/builtin/pineapple-rag.json +70 -0
  215. package/songs/builtin/pink-panther.json +94 -0
  216. package/songs/builtin/ragtime-dance.json +70 -0
  217. package/songs/builtin/river-flows-in-you.json +102 -0
  218. package/songs/builtin/rocket-man.json +92 -0
  219. package/songs/builtin/satie-gymnopedie-no1.json +70 -0
  220. package/songs/builtin/satin-doll.json +93 -0
  221. package/songs/builtin/schindlers-list.json +96 -0
  222. package/songs/builtin/schumann-traumerei.json +70 -0
  223. package/songs/builtin/sitting-on-the-dock.json +91 -0
  224. package/songs/builtin/slow-blues-in-bb.json +98 -0
  225. package/songs/builtin/snowfall.json +70 -0
  226. package/songs/builtin/so-what.json +92 -0
  227. package/songs/builtin/solace.json +70 -0
  228. package/songs/builtin/someone-like-you.json +92 -0
  229. package/songs/builtin/spirited-away.json +94 -0
  230. package/songs/builtin/st-louis-blues.json +93 -0
  231. package/songs/builtin/stairway-intro.json +93 -0
  232. package/songs/builtin/starlight-waltz.json +70 -0
  233. package/songs/builtin/stay-with-me.json +93 -0
  234. package/songs/builtin/stormy-monday.json +94 -0
  235. package/songs/builtin/superstition.json +93 -0
  236. package/songs/builtin/sweet-home-chicago.json +93 -0
  237. package/songs/builtin/take-five.json +92 -0
  238. package/songs/builtin/take-the-a-train.json +93 -0
  239. package/songs/builtin/the-entertainer.json +98 -0
  240. package/songs/builtin/the-godfather-waltz.json +93 -0
  241. package/songs/builtin/thrill-is-gone.json +94 -0
  242. package/songs/builtin/twilight-garden.json +70 -0
  243. package/songs/builtin/watermark.json +70 -0
  244. package/songs/builtin/wave.json +93 -0
  245. package/songs/builtin/whats-going-on.json +93 -0
  246. package/songs/builtin/yesterday.json +92 -0
package/README.it.md ADDED
@@ -0,0 +1,212 @@
1
+ <p align="center"><a href="README.md">English</a> | <a href="README.ja.md">日本語</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <strong>Italiano</strong> | <a href="README.pt-BR.md">Português</a></p>
2
+
3
+ <p align="center">
4
+ <img src="logo.png" alt="Logo PianoAI" width="180" />
5
+ </p>
6
+
7
+ <h1 align="center">PianoAI</h1>
8
+
9
+ <p align="center">
10
+ Pianoforte AI con motore audio integrato e libreria di 100 brani. Server MCP per Claude, CLI per gli esseri umani.
11
+ </p>
12
+
13
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-15-purple)](https://github.com/mcp-tool-shop-org/ai_jam_session)
14
+ [![Songs](https://img.shields.io/badge/songs-100_built--in-blue)](https://github.com/mcp-tool-shop-org/ai_jam_session)
15
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/mcp-tool-shop-org/ai_jam_session)
16
+
17
+ ## Cos'e?
18
+
19
+ Un pianoforte che Claude sa suonare. PianoAI e un server MCP con motore audio integrato: riproduce il suono direttamente dai tuoi altoparlanti, senza bisogno di software esterno. Claude esplora una libreria di 100 brani in 10 generi, sceglie i pezzi, li insegna e ci improvvisa sopra. Funziona anche come CLI indipendente.
20
+
21
+ ## Funzionalita
22
+
23
+ - **Motore piano integrato** — audio basato su campioni tramite `node-web-audio-api`, riproduce dagli altoparlanti
24
+ - **Libreria di 100 brani** — classica, jazz, pop, blues, rock, R&B, latin, colonne sonore, ragtime, new-age
25
+ - **AI Jam Session** — Claude analizza gli accordi e la melodia di un brano, poi crea la propria interpretazione
26
+ - **Supporto file MIDI** — riproduci qualsiasi file `.mid`: `pianoai play song.mid`
27
+ - **Sistema didattico** — note didattiche per ogni battuta, descrizioni del linguaggio musicale, consigli per lo studio
28
+ - **4 modalita di riproduzione** — completa, battuta per battuta, mani separate, loop
29
+ - **Controllo velocita** — da 0.5x per lo studio lento fino a 4x per la riproduzione veloce
30
+ - **Controlli in tempo reale** — pausa, ripresa, cambio di velocita durante la riproduzione
31
+ - **15 strumenti MCP** — riproduci, esplora, insegna, improvvisa, importa — tutto tramite il protocollo MCP
32
+ - **Aggiungi i tuoi brani** — lo strumento `add_song` accetta JSON SongEntry, `import_midi` converte file MIDI
33
+ - **Uscita MIDI opzionale** — instrada verso software esterno con il flag `--midi` (richiede loopMIDI + VMPK)
34
+
35
+ ## Installazione
36
+
37
+ ```bash
38
+ npm install -g @mcptoolshop/ai_jam_session
39
+ ```
40
+
41
+ Richiede **Node.js 18+**. Tutto qui — nessun driver MIDI, nessuna porta virtuale, nessun software esterno.
42
+
43
+ ## Avvio rapido
44
+
45
+ ```bash
46
+ # Riproduci un brano dalla libreria
47
+ ai-jam-session play let-it-be
48
+
49
+ # Riproduci un file MIDI
50
+ ai-jam-session play path/to/song.mid
51
+
52
+ # Esercitati a meta velocita
53
+ ai-jam-session play moonlight-sonata-mvt1 --speed 0.5
54
+
55
+ # Elenca tutti i brani disponibili
56
+ ai-jam-session list
57
+
58
+ # Mostra i dettagli di un brano e le note didattiche
59
+ ai-jam-session info autumn-leaves
60
+ ```
61
+
62
+ ### Opzioni di riproduzione
63
+
64
+ | Flag | Descrizione |
65
+ |------|-------------|
66
+ | `--speed <mult>` | Moltiplicatore di velocita: 0.5 = meta, 1.0 = normale, 2.0 = doppia |
67
+ | `--tempo <bpm>` | Sovrascrive il tempo predefinito del brano (10-400 BPM) |
68
+ | `--mode <mode>` | Modalita di riproduzione: `full`, `measure`, `hands`, `loop` |
69
+ | `--midi` | Instrada verso software MIDI esterno invece del motore integrato |
70
+
71
+ ## Server MCP
72
+
73
+ Il server MCP espone 15 strumenti per l'integrazione con LLM:
74
+
75
+ | Strumento | Descrizione |
76
+ |-----------|-------------|
77
+ | `list_songs` | Esplora/cerca brani per genere, difficolta o query |
78
+ | `song_info` | Linguaggio musicale completo, obiettivi didattici, suggerimenti per lo studio |
79
+ | `registry_stats` | Conteggio brani per genere e difficolta |
80
+ | `teaching_note` | Nota didattica per battuta, diteggiatura, dinamiche |
81
+ | `suggest_song` | Raccomandazione basata su criteri |
82
+ | `list_measures` | Panoramica delle battute con note didattiche |
83
+ | `practice_setup` | Suggerisce velocita, modalita e impostazioni per un brano |
84
+ | `sing_along` | Testo cantabile (nomi delle note, solfeggio, contorno) per battuta |
85
+ | `play_song` | Riproduci un brano o file MIDI dagli altoparlanti |
86
+ | `pause_playback` | Metti in pausa o riprendi il brano in riproduzione |
87
+ | `set_speed` | Cambia la velocita durante la riproduzione |
88
+ | `stop_playback` | Ferma il brano in riproduzione |
89
+ | `ai_jam_session` | Ottieni un brief per la jam — accordi, melodia, guida stilistica — per l'improvvisazione |
90
+ | `add_song` | Aggiungi un nuovo brano (JSON SongEntry) alla libreria |
91
+ | `import_midi` | Converti un file MIDI in SongEntry e registralo |
92
+
93
+ ### AI Jam Session
94
+
95
+ Lo strumento `ai_jam_session` estrae un "jam brief" strutturato da qualsiasi brano: progressione di accordi, contorno melodico e guida stilistica specifica per il genere. Claude usa il brief per creare la propria interpretazione.
96
+
97
+ Due modalita:
98
+ - **Brano specifico:** `ai_jam_session({ songId: "autumn-leaves", style: "blues" })` — improvvisa su Autumn Leaves in stile blues
99
+ - **Scelta casuale per genere:** `ai_jam_session({ genre: "jazz" })` — sceglie un brano jazz a caso e ci improvvisa sopra
100
+
101
+ Parametri opzionali: `mood` (allegro, malinconico, sognante, ecc.), `difficulty`, `measures` (intervallo come "1-8").
102
+
103
+ ### Configurazione Claude Desktop / Claude Code
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "pianoai": {
109
+ "command": "npx",
110
+ "args": ["-y", "-p", "@mcptoolshop/ai_jam_session", "ai-jam-session-mcp"]
111
+ }
112
+ }
113
+ }
114
+ ```
115
+
116
+ ### Plugin per Claude Code
117
+
118
+ PianoAI include un plugin per Claude Code che aggiunge comandi slash e personalita agente:
119
+
120
+ | Comando | Descrizione |
121
+ |---------|-------------|
122
+ | `/pianoai:teach <song>` | Avvia una sessione didattica strutturata |
123
+ | `/pianoai:practice <song>` | Ottieni un piano di studio con raccomandazioni su velocita e modalita |
124
+ | `/pianoai:explore [query]` | Esplora la libreria musicale per genere, difficolta o parola chiave |
125
+ | `/pianoai:jam <song or genre>` | Avvia una jam session — Claude crea la propria interpretazione |
126
+
127
+ Due personalita agente:
128
+ - **Piano Teacher** — paziente, pedagogico, si adatta al livello dello studente
129
+ - **Jam Musician** — atmosfera rilassata da jam band, prima il groove, incoraggia la sperimentazione
130
+
131
+ ## Libreria musicale
132
+
133
+ 100 brani integrati in 10 generi, 3 livelli di difficolta:
134
+
135
+ | Genere | Brani | Esempi |
136
+ |--------|-------|--------|
137
+ | Classica | 10 | Fur Elise, Clair de Lune, Moonlight Sonata, Bach Prelude in C |
138
+ | Jazz | 10 | Autumn Leaves, Take Five, So What, Misty |
139
+ | Pop | 10 | Imagine, Hallelujah, Piano Man, Bohemian Rhapsody |
140
+ | Blues | 10 | Basic 12-Bar, St. Louis Blues, Stormy Monday, Thrill Is Gone |
141
+ | Rock | 10 | Stairway Intro, Hotel California, Rocket Man, Layla Coda |
142
+ | R&B | 10 | Superstition, Georgia On My Mind, Lean On Me, My Girl |
143
+ | Latin | 10 | Girl from Ipanema, Besame Mucho, Oye Como Va, Wave |
144
+ | Colonne sonore | 11 | Cinema Paradiso, Moon River, Hedwig's Theme, Spirited Away |
145
+ | Ragtime | 9 | The Entertainer, Maple Leaf Rag, Elite Syncopations |
146
+ | New-Age | 10 | River Flows in You, Snowfall, Crystal Stream, Evening Calm |
147
+
148
+ ## API programmatica
149
+
150
+ ```typescript
151
+ import { createAudioEngine, parseMidiFile, PlaybackController } from "@mcptoolshop/ai_jam_session";
152
+
153
+ const connector = createAudioEngine();
154
+ await connector.connect();
155
+
156
+ const midi = await parseMidiFile("song.mid");
157
+ const controller = new PlaybackController(connector, midi);
158
+
159
+ controller.on("noteOn", (e) => console.log(`Note: ${e.noteName}`));
160
+ await controller.play({ speed: 0.75 });
161
+
162
+ controller.pause();
163
+ controller.setSpeed(1.5);
164
+ await controller.resume();
165
+
166
+ await connector.disconnect();
167
+ ```
168
+
169
+ ### Riproduci un brano dalla libreria
170
+
171
+ ```typescript
172
+ import { getSong, createSession, createAudioEngine } from "@mcptoolshop/ai_jam_session";
173
+
174
+ const connector = createAudioEngine();
175
+ await connector.connect();
176
+
177
+ const song = getSong("autumn-leaves")!;
178
+ const session = createSession(song, connector, {
179
+ mode: "full",
180
+ speed: 0.75,
181
+ });
182
+
183
+ await session.play();
184
+ await connector.disconnect();
185
+ ```
186
+
187
+ ## Architettura
188
+
189
+ ```
190
+ MIDI files (.mid) Built-in song library (JSON)
191
+ | |
192
+ v v
193
+ MIDI Parser ──────────────── Note Parser
194
+ | |
195
+ v v
196
+ MidiPlaybackEngine SessionController
197
+ | |
198
+ └──────── PlaybackController ──┘
199
+ (real-time events, hooks)
200
+ |
201
+ ┌─────────────┼─────────────┐
202
+ v v v
203
+ AudioEngine Teaching Hooks Progress
204
+ (speakers) (per-measure) (callbacks)
205
+ |
206
+ v
207
+ node-web-audio-api (Rust DSP)
208
+ ```
209
+
210
+ ## Licenza
211
+
212
+ MIT
package/README.ja.md ADDED
@@ -0,0 +1,214 @@
1
+ <p align="center">
2
+ <a href="README.md">English</a> | <strong>日本語</strong> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="logo.png" alt="PianoAI logo" width="180" />
7
+ </p>
8
+
9
+ <h1 align="center">PianoAI</h1>
10
+
11
+ <p align="center">
12
+ 内蔵オーディオエンジンと100曲ライブラリを備えたAIピアノプレイヤー。Claude用MCPサーバー、人間用CLI。
13
+ </p>
14
+
15
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-15-purple)](https://github.com/mcp-tool-shop-org/ai_jam_session)
16
+ [![Songs](https://img.shields.io/badge/songs-100_built--in-blue)](https://github.com/mcp-tool-shop-org/ai_jam_session)
17
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/mcp-tool-shop-org/ai_jam_session)
18
+
19
+ ## これは何ですか?
20
+
21
+ Claudeが演奏できるピアノです。PianoAIは内蔵オーディオエンジンを搭載したMCPサーバーで、外部ソフトウェア不要でスピーカーから直接再生します。Claudeは10ジャンル100曲のライブラリを閲覧し、楽曲を選び、教え、ジャムセッションを行います。スタンドアロンCLIとしても動作します。
22
+
23
+ ## 機能
24
+
25
+ - **内蔵ピアノエンジン** — `node-web-audio-api`によるサンプルベースオーディオ、スピーカーから再生
26
+ - **100曲ライブラリ** — クラシック、ジャズ、ポップ、ブルース、ロック、R&B、ラテン、映画音楽、ラグタイム、ニューエイジ
27
+ - **AIジャムセッション** — Claudeが楽曲のコードとメロディを分析し、独自の解釈を創作
28
+ - **MIDIファイル対応** — 任意の`.mid`ファイルを再生: `ai-jam-session play song.mid`
29
+ - **教習システム** — 小節ごとの教習ノート、音楽表現の解説、練習のアドバイス
30
+ - **4つの再生モード** — フル再生、小節ごと、片手ずつ、ループ
31
+ - **速度制御** — 0.5倍のスロー練習から4倍の高速再生まで
32
+ - **リアルタイム操作** — 再生中の一時停止、再開、速度変更
33
+ - **15のMCPツール** — 再生、閲覧、教習、ジャム、インポート — すべてMCPプロトコル経由
34
+ - **楽曲の追加** — `add_song`ツールでSongEntry JSONを受付、`import_midi`でMIDIファイルを変換
35
+ - **オプションのMIDI出力** — `--midi`フラグで外部ソフトウェアに転送(loopMIDI + VMPKが必要)
36
+
37
+ ## インストール
38
+
39
+ ```bash
40
+ npm install -g @mcptoolshop/ai_jam_session
41
+ ```
42
+
43
+ **Node.js 18+**が必要です。それだけです — MIDIドライバも、仮想ポートも、外部ソフトウェアも不要です。
44
+
45
+ ## クイックスタート
46
+
47
+ ```bash
48
+ # 内蔵楽曲を再生
49
+ ai-jam-session play let-it-be
50
+
51
+ # MIDIファイルを再生
52
+ ai-jam-session play path/to/song.mid
53
+
54
+ # 半速で練習
55
+ ai-jam-session play moonlight-sonata-mvt1 --speed 0.5
56
+
57
+ # すべての内蔵楽曲を一覧表示
58
+ ai-jam-session list
59
+
60
+ # 楽曲の詳細と教習ノートを表示
61
+ ai-jam-session info autumn-leaves
62
+ ```
63
+
64
+ ### 再生オプション
65
+
66
+ | フラグ | 説明 |
67
+ |------|------|
68
+ | `--speed <mult>` | 速度倍率: 0.5 = 半速、1.0 = 通常、2.0 = 倍速 |
69
+ | `--tempo <bpm>` | 楽曲のデフォルトテンポをオーバーライド(10-400 BPM) |
70
+ | `--mode <mode>` | 再生モード: `full`、`measure`、`hands`、`loop` |
71
+ | `--midi` | 内蔵エンジンの代わりに外部MIDIソフトウェアに転送 |
72
+
73
+ ## MCPサーバー
74
+
75
+ MCPサーバーはLLM連携用に15のツールを公開しています:
76
+
77
+ | ツール | 説明 |
78
+ |------|------|
79
+ | `list_songs` | ジャンル、難易度、クエリで楽曲を検索・閲覧 |
80
+ | `song_info` | 音楽表現、教習目標、練習提案の詳細情報 |
81
+ | `registry_stats` | ジャンル別・難易度別の楽曲数 |
82
+ | `teaching_note` | 小節ごとの教習ノート、運指、ダイナミクス |
83
+ | `suggest_song` | 条件に基づくおすすめ楽曲 |
84
+ | `list_measures` | 教習ノート付きの小節一覧 |
85
+ | `practice_setup` | 楽曲に適した速度、モード、設定を提案 |
86
+ | `sing_along` | 小節ごとの歌唱テキスト(音名、ソルフェージュ、輪郭) |
87
+ | `play_song` | 楽曲またはMIDIファイルをスピーカーから再生 |
88
+ | `pause_playback` | 現在再生中の楽曲を一時停止または再開 |
89
+ | `set_speed` | 再生中に速度を変更 |
90
+ | `stop_playback` | 現在再生中の楽曲を停止 |
91
+ | `ai_jam_session` | ジャムブリーフを取得 — コード、メロディ、スタイルのガイダンス — 即興演奏用 |
92
+ | `add_song` | 新しい楽曲(SongEntry JSON)をライブラリに追加 |
93
+ | `import_midi` | MIDIファイルをSongEntryに変換してライブラリに登録 |
94
+
95
+ ### AIジャムセッション
96
+
97
+ `ai_jam_session`ツールは任意の楽曲から構造化された「ジャムブリーフ」を抽出します: コード進行、メロディの輪郭、ジャンル固有のスタイルガイダンス。Claudeはこのブリーフを使って独自の解釈を創作します。
98
+
99
+ 2つのモード:
100
+ - **特定の楽曲:** `ai_jam_session({ songId: "autumn-leaves", style: "blues" })` — Autumn Leavesをブルーススタイルでジャム
101
+ - **ランダムなジャンル選択:** `ai_jam_session({ genre: "jazz" })` — ランダムなジャズ楽曲を選んでジャム
102
+
103
+ オプションパラメータ: `mood`(アップビート、メランコリック、ドリーミーなど)、`difficulty`、`measures`("1-8"のような範囲指定)。
104
+
105
+ ### Claude Desktop / Claude Code設定
106
+
107
+ ```json
108
+ {
109
+ "mcpServers": {
110
+ "pianoai": {
111
+ "command": "npx",
112
+ "args": ["-y", "-p", "@mcptoolshop/ai_jam_session", "ai-jam-session-mcp"]
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### Claude Codeプラグイン
119
+
120
+ PianoAIにはスラッシュコマンドとエージェントパーソナリティを追加するClaude Codeプラグインが付属しています:
121
+
122
+ | コマンド | 説明 |
123
+ |---------|------|
124
+ | `/pianoai:teach <song>` | 構造化された教習セッションを開始 |
125
+ | `/pianoai:practice <song>` | 速度・モードのおすすめ付き練習プランを取得 |
126
+ | `/pianoai:explore [query]` | ジャンル、難易度、キーワードでライブラリを閲覧 |
127
+ | `/pianoai:jam <song or genre>` | ジャムセッションを開始 — Claudeが独自の解釈を創作 |
128
+
129
+ 2つのエージェントパーソナリティ:
130
+ - **ピアノ教師** — 忍耐強く教育的、生徒のレベルに合わせた指導
131
+ - **ジャムミュージシャン** — リラックスしたジャムバンドの雰囲気、グルーヴ重視、実験を促進
132
+
133
+ ## 楽曲ライブラリ
134
+
135
+ 10ジャンル、3段階の難易度にわたる100曲の内蔵楽曲:
136
+
137
+ | ジャンル | 曲数 | 例 |
138
+ |---------|------|------|
139
+ | クラシック | 10 | Fur Elise, Clair de Lune, Moonlight Sonata, Bach Prelude in C |
140
+ | ジャズ | 10 | Autumn Leaves, Take Five, So What, Misty |
141
+ | ポップ | 10 | Imagine, Hallelujah, Piano Man, Bohemian Rhapsody |
142
+ | ブルース | 10 | Basic 12-Bar, St. Louis Blues, Stormy Monday, Thrill Is Gone |
143
+ | ロック | 10 | Stairway Intro, Hotel California, Rocket Man, Layla Coda |
144
+ | R&B | 10 | Superstition, Georgia On My Mind, Lean On Me, My Girl |
145
+ | ラテン | 10 | Girl from Ipanema, Besame Mucho, Oye Como Va, Wave |
146
+ | 映画音楽 | 11 | Cinema Paradiso, Moon River, Hedwig's Theme, Spirited Away |
147
+ | ラグタイム | 9 | The Entertainer, Maple Leaf Rag, Elite Syncopations |
148
+ | ニューエイジ | 10 | River Flows in You, Snowfall, Crystal Stream, Evening Calm |
149
+
150
+ ## プログラマティックAPI
151
+
152
+ ```typescript
153
+ import { createAudioEngine, parseMidiFile, PlaybackController } from "@mcptoolshop/ai_jam_session";
154
+
155
+ const connector = createAudioEngine();
156
+ await connector.connect();
157
+
158
+ const midi = await parseMidiFile("song.mid");
159
+ const controller = new PlaybackController(connector, midi);
160
+
161
+ controller.on("noteOn", (e) => console.log(`Note: ${e.noteName}`));
162
+ await controller.play({ speed: 0.75 });
163
+
164
+ controller.pause();
165
+ controller.setSpeed(1.5);
166
+ await controller.resume();
167
+
168
+ await connector.disconnect();
169
+ ```
170
+
171
+ ### 内蔵楽曲を再生
172
+
173
+ ```typescript
174
+ import { getSong, createSession, createAudioEngine } from "@mcptoolshop/ai_jam_session";
175
+
176
+ const connector = createAudioEngine();
177
+ await connector.connect();
178
+
179
+ const song = getSong("autumn-leaves")!;
180
+ const session = createSession(song, connector, {
181
+ mode: "full",
182
+ speed: 0.75,
183
+ });
184
+
185
+ await session.play();
186
+ await connector.disconnect();
187
+ ```
188
+
189
+ ## アーキテクチャ
190
+
191
+ ```
192
+ MIDIファイル (.mid) 内蔵楽曲ライブラリ (JSON)
193
+ | |
194
+ v v
195
+ MIDIパーサー ──────────────── ノートパーサー
196
+ | |
197
+ v v
198
+ MidiPlaybackEngine SessionController
199
+ | |
200
+ └──────── PlaybackController ──┘
201
+ (リアルタイムイベント、フック)
202
+ |
203
+ ┌─────────────┼─────────────┐
204
+ v v v
205
+ AudioEngine 教習フック プログレス
206
+ (スピーカー) (小節ごと) (コールバック)
207
+ |
208
+ v
209
+ node-web-audio-api (Rust DSP)
210
+ ```
211
+
212
+ ## ライセンス
213
+
214
+ MIT
package/README.md ADDED
@@ -0,0 +1,214 @@
1
+ <p align="center">
2
+ <a href="README.md"><strong>English</strong></a> | <a href="README.ja.md">日本語</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="logo.png" alt="PianoAI logo" width="180" />
7
+ </p>
8
+
9
+ <h1 align="center">PianoAI</h1>
10
+
11
+ <p align="center">
12
+ AI piano player with built-in audio engine and 100-song library. MCP server for Claude, CLI for humans.
13
+ </p>
14
+
15
+ [![MCP Tools](https://img.shields.io/badge/MCP_tools-15-purple)](https://github.com/mcp-tool-shop-org/ai_jam_session)
16
+ [![Songs](https://img.shields.io/badge/songs-100_built--in-blue)](https://github.com/mcp-tool-shop-org/ai_jam_session)
17
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](https://github.com/mcp-tool-shop-org/ai_jam_session)
18
+
19
+ ## What is this?
20
+
21
+ A piano that Claude can play. PianoAI is an MCP server with a built-in audio engine — it plays through your speakers, no external software required. Claude browses a 100-song library spanning 10 genres, picks songs, teaches them, and jams on them. Also works as a standalone CLI.
22
+
23
+ ## Features
24
+
25
+ - **Built-in piano engine** — sample-based audio via `node-web-audio-api`, plays through speakers
26
+ - **100-song library** — classical, jazz, pop, blues, rock, R&B, latin, film, ragtime, new-age
27
+ - **AI Jam Session** — Claude analyzes a song's chords and melody, then creates its own interpretation
28
+ - **MIDI file support** — play any `.mid` file: `pianoai play song.mid`
29
+ - **Teaching system** — per-measure teaching notes, musical language descriptions, practice recommendations
30
+ - **4 playback modes** — full, measure-by-measure, hands separate, loop
31
+ - **Speed control** — 0.5x slow practice to 4x fast
32
+ - **Real-time controls** — pause, resume, speed change during playback
33
+ - **15 MCP tools** — play, browse, teach, jam, import — all through the MCP protocol
34
+ - **Add your own songs** — `add_song` tool accepts SongEntry JSON, `import_midi` converts MIDI files
35
+ - **Optional MIDI output** — route to external software via `--midi` flag (requires loopMIDI + VMPK)
36
+
37
+ ## Install
38
+
39
+ ```bash
40
+ npm install -g @mcptoolshop/ai_jam_session
41
+ ```
42
+
43
+ Requires **Node.js 18+**. That's it — no MIDI drivers, no virtual ports, no external software.
44
+
45
+ ## Quick Start
46
+
47
+ ```bash
48
+ # Play a built-in song
49
+ ai-jam-session play let-it-be
50
+
51
+ # Play a MIDI file
52
+ ai-jam-session play path/to/song.mid
53
+
54
+ # Half-speed practice
55
+ ai-jam-session play moonlight-sonata-mvt1 --speed 0.5
56
+
57
+ # List all built-in songs
58
+ ai-jam-session list
59
+
60
+ # Show song details + teaching notes
61
+ ai-jam-session info autumn-leaves
62
+ ```
63
+
64
+ ### Play Options
65
+
66
+ | Flag | Description |
67
+ |------|-------------|
68
+ | `--speed <mult>` | Speed multiplier: 0.5 = half, 1.0 = normal, 2.0 = double |
69
+ | `--tempo <bpm>` | Override the song's default tempo (10-400 BPM) |
70
+ | `--mode <mode>` | Playback mode: `full`, `measure`, `hands`, `loop` |
71
+ | `--midi` | Route to external MIDI software instead of built-in engine |
72
+
73
+ ## MCP Server
74
+
75
+ The MCP server exposes 15 tools for LLM integration:
76
+
77
+ | Tool | Description |
78
+ |------|-------------|
79
+ | `list_songs` | Browse/search songs by genre, difficulty, or query |
80
+ | `song_info` | Full musical language, teaching goals, practice suggestions |
81
+ | `registry_stats` | Song counts by genre and difficulty |
82
+ | `teaching_note` | Per-measure teaching note, fingering, dynamics |
83
+ | `suggest_song` | Recommendation based on criteria |
84
+ | `list_measures` | Overview of measures with teaching notes |
85
+ | `practice_setup` | Suggest speed, mode, and settings for a song |
86
+ | `sing_along` | Singable text (note names, solfege, contour) per measure |
87
+ | `play_song` | Play a song or MIDI file through speakers |
88
+ | `pause_playback` | Pause or resume the currently playing song |
89
+ | `set_speed` | Change playback speed during playback |
90
+ | `stop_playback` | Stop the currently playing song |
91
+ | `ai_jam_session` | Get a jam brief — chords, melody, style guidance — for improvisation |
92
+ | `add_song` | Add a new song (SongEntry JSON) to the library |
93
+ | `import_midi` | Convert a MIDI file into a SongEntry and register it |
94
+
95
+ ### AI Jam Session
96
+
97
+ The `ai_jam_session` tool extracts a structured "jam brief" from any song: chord progression, melody contour, and genre-specific style guidance. Claude uses the brief to create its own interpretation.
98
+
99
+ Two modes:
100
+ - **Specific song:** `ai_jam_session({ songId: "autumn-leaves", style: "blues" })` — jam on Autumn Leaves, blues style
101
+ - **Random genre pick:** `ai_jam_session({ genre: "jazz" })` — pick a random jazz song and jam on it
102
+
103
+ Optional parameters: `mood` (upbeat, melancholic, dreamy, etc.), `difficulty`, `measures` (range like "1-8").
104
+
105
+ ### Claude Desktop / Claude Code configuration
106
+
107
+ ```json
108
+ {
109
+ "mcpServers": {
110
+ "pianoai": {
111
+ "command": "npx",
112
+ "args": ["-y", "-p", "@mcptoolshop/ai_jam_session", "ai-jam-session-mcp"]
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### Claude Code Plugin
119
+
120
+ PianoAI ships with a Claude Code plugin that adds slash commands and agent personalities:
121
+
122
+ | Command | Description |
123
+ |---------|-------------|
124
+ | `/pianoai:teach <song>` | Start a structured teaching session |
125
+ | `/pianoai:practice <song>` | Get a practice plan with speed/mode recommendations |
126
+ | `/pianoai:explore [query]` | Browse the song library by genre, difficulty, or keyword |
127
+ | `/pianoai:jam <song or genre>` | Start a jam session — Claude creates its own interpretation |
128
+
129
+ Two agent personalities:
130
+ - **Piano Teacher** — patient, pedagogical, meets students where they are
131
+ - **Jam Musician** — laid-back jam band vibes, groove-first, encourages experimentation
132
+
133
+ ## Song Library
134
+
135
+ 100 built-in songs across 10 genres, 3 difficulty levels:
136
+
137
+ | Genre | Songs | Examples |
138
+ |-------|-------|---------|
139
+ | Classical | 10 | Fur Elise, Clair de Lune, Moonlight Sonata, Bach Prelude in C |
140
+ | Jazz | 10 | Autumn Leaves, Take Five, So What, Misty |
141
+ | Pop | 10 | Imagine, Hallelujah, Piano Man, Bohemian Rhapsody |
142
+ | Blues | 10 | Basic 12-Bar, St. Louis Blues, Stormy Monday, Thrill Is Gone |
143
+ | Rock | 10 | Stairway Intro, Hotel California, Rocket Man, Layla Coda |
144
+ | R&B | 10 | Superstition, Georgia On My Mind, Lean On Me, My Girl |
145
+ | Latin | 10 | Girl from Ipanema, Besame Mucho, Oye Como Va, Wave |
146
+ | Film | 11 | Cinema Paradiso, Moon River, Hedwig's Theme, Spirited Away |
147
+ | Ragtime | 9 | The Entertainer, Maple Leaf Rag, Elite Syncopations |
148
+ | New-Age | 10 | River Flows in You, Snowfall, Crystal Stream, Evening Calm |
149
+
150
+ ## Programmatic API
151
+
152
+ ```typescript
153
+ import { createAudioEngine, parseMidiFile, PlaybackController } from "@mcptoolshop/ai_jam_session";
154
+
155
+ const connector = createAudioEngine();
156
+ await connector.connect();
157
+
158
+ const midi = await parseMidiFile("song.mid");
159
+ const controller = new PlaybackController(connector, midi);
160
+
161
+ controller.on("noteOn", (e) => console.log(`Note: ${e.noteName}`));
162
+ await controller.play({ speed: 0.75 });
163
+
164
+ controller.pause();
165
+ controller.setSpeed(1.5);
166
+ await controller.resume();
167
+
168
+ await connector.disconnect();
169
+ ```
170
+
171
+ ### Play a built-in song
172
+
173
+ ```typescript
174
+ import { getSong, createSession, createAudioEngine } from "@mcptoolshop/ai_jam_session";
175
+
176
+ const connector = createAudioEngine();
177
+ await connector.connect();
178
+
179
+ const song = getSong("autumn-leaves")!;
180
+ const session = createSession(song, connector, {
181
+ mode: "full",
182
+ speed: 0.75,
183
+ });
184
+
185
+ await session.play();
186
+ await connector.disconnect();
187
+ ```
188
+
189
+ ## Architecture
190
+
191
+ ```
192
+ MIDI files (.mid) Built-in song library (JSON)
193
+ | |
194
+ v v
195
+ MIDI Parser ──────────────── Note Parser
196
+ | |
197
+ v v
198
+ MidiPlaybackEngine SessionController
199
+ | |
200
+ └──────── PlaybackController ──┘
201
+ (real-time events, hooks)
202
+ |
203
+ ┌─────────────┼─────────────┐
204
+ v v v
205
+ AudioEngine Teaching Hooks Progress
206
+ (speakers) (per-measure) (callbacks)
207
+ |
208
+ v
209
+ node-web-audio-api (Rust DSP)
210
+ ```
211
+
212
+ ## License
213
+
214
+ MIT