@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.
- package/LICENSE +21 -0
- package/README.es.md +212 -0
- package/README.fr.md +212 -0
- package/README.hi.md +212 -0
- package/README.it.md +212 -0
- package/README.ja.md +214 -0
- package/README.md +214 -0
- package/README.pt-BR.md +212 -0
- package/dist/audio-engine.d.ts +9 -0
- package/dist/audio-engine.d.ts.map +1 -0
- package/dist/audio-engine.js +422 -0
- package/dist/audio-engine.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +551 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +903 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/midi/parser.d.ts +16 -0
- package/dist/midi/parser.d.ts.map +1 -0
- package/dist/midi/parser.js +192 -0
- package/dist/midi/parser.js.map +1 -0
- package/dist/midi/types.d.ts +44 -0
- package/dist/midi/types.d.ts.map +1 -0
- package/dist/midi/types.js +8 -0
- package/dist/midi/types.js.map +1 -0
- package/dist/note-parser.d.ts +105 -0
- package/dist/note-parser.d.ts.map +1 -0
- package/dist/note-parser.js +278 -0
- package/dist/note-parser.js.map +1 -0
- package/dist/playback/controls.d.ts +124 -0
- package/dist/playback/controls.d.ts.map +1 -0
- package/dist/playback/controls.js +252 -0
- package/dist/playback/controls.js.map +1 -0
- package/dist/playback/midi-engine.d.ts +68 -0
- package/dist/playback/midi-engine.d.ts.map +1 -0
- package/dist/playback/midi-engine.js +227 -0
- package/dist/playback/midi-engine.js.map +1 -0
- package/dist/playback/position.d.ts +95 -0
- package/dist/playback/position.d.ts.map +1 -0
- package/dist/playback/position.js +223 -0
- package/dist/playback/position.js.map +1 -0
- package/dist/playback/timing.d.ts +31 -0
- package/dist/playback/timing.d.ts.map +1 -0
- package/dist/playback/timing.js +57 -0
- package/dist/playback/timing.js.map +1 -0
- package/dist/sample-engine.d.ts +17 -0
- package/dist/sample-engine.d.ts.map +1 -0
- package/dist/sample-engine.js +428 -0
- package/dist/sample-engine.js.map +1 -0
- package/dist/schemas.d.ts +40 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +42 -0
- package/dist/schemas.js.map +1 -0
- package/dist/session.d.ts +106 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +361 -0
- package/dist/session.js.map +1 -0
- package/dist/sfz-parser.d.ts +36 -0
- package/dist/sfz-parser.d.ts.map +1 -0
- package/dist/sfz-parser.js +95 -0
- package/dist/sfz-parser.js.map +1 -0
- package/dist/smoke.d.ts +2 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/smoke.js +512 -0
- package/dist/smoke.js.map +1 -0
- package/dist/songs/config/loader.d.ts +14 -0
- package/dist/songs/config/loader.d.ts.map +1 -0
- package/dist/songs/config/loader.js +53 -0
- package/dist/songs/config/loader.js.map +1 -0
- package/dist/songs/config/schema.d.ts +70 -0
- package/dist/songs/config/schema.d.ts.map +1 -0
- package/dist/songs/config/schema.js +53 -0
- package/dist/songs/config/schema.js.map +1 -0
- package/dist/songs/index.d.ts +16 -0
- package/dist/songs/index.d.ts.map +1 -0
- package/dist/songs/index.js +20 -0
- package/dist/songs/index.js.map +1 -0
- package/dist/songs/jam.d.ts +48 -0
- package/dist/songs/jam.d.ts.map +1 -0
- package/dist/songs/jam.js +324 -0
- package/dist/songs/jam.js.map +1 -0
- package/dist/songs/loader.d.ts +27 -0
- package/dist/songs/loader.d.ts.map +1 -0
- package/dist/songs/loader.js +90 -0
- package/dist/songs/loader.js.map +1 -0
- package/dist/songs/midi/hands.d.ts +46 -0
- package/dist/songs/midi/hands.d.ts.map +1 -0
- package/dist/songs/midi/hands.js +134 -0
- package/dist/songs/midi/hands.js.map +1 -0
- package/dist/songs/midi/ingest.d.ts +8 -0
- package/dist/songs/midi/ingest.d.ts.map +1 -0
- package/dist/songs/midi/ingest.js +191 -0
- package/dist/songs/midi/ingest.js.map +1 -0
- package/dist/songs/midi/measures.d.ts +41 -0
- package/dist/songs/midi/measures.d.ts.map +1 -0
- package/dist/songs/midi/measures.js +64 -0
- package/dist/songs/midi/measures.js.map +1 -0
- package/dist/songs/midi/types.d.ts +25 -0
- package/dist/songs/midi/types.d.ts.map +1 -0
- package/dist/songs/midi/types.js +8 -0
- package/dist/songs/midi/types.js.map +1 -0
- package/dist/songs/registry.d.ts +37 -0
- package/dist/songs/registry.d.ts.map +1 -0
- package/dist/songs/registry.js +197 -0
- package/dist/songs/registry.js.map +1 -0
- package/dist/songs/types.d.ts +99 -0
- package/dist/songs/types.d.ts.map +1 -0
- package/dist/songs/types.js +27 -0
- package/dist/songs/types.js.map +1 -0
- package/dist/teaching/live-midi-feedback.d.ts +36 -0
- package/dist/teaching/live-midi-feedback.d.ts.map +1 -0
- package/dist/teaching/live-midi-feedback.js +259 -0
- package/dist/teaching/live-midi-feedback.js.map +1 -0
- package/dist/teaching/midi-feedback.d.ts +33 -0
- package/dist/teaching/midi-feedback.d.ts.map +1 -0
- package/dist/teaching/midi-feedback.js +208 -0
- package/dist/teaching/midi-feedback.js.map +1 -0
- package/dist/teaching/sing-on-midi.d.ts +77 -0
- package/dist/teaching/sing-on-midi.d.ts.map +1 -0
- package/dist/teaching/sing-on-midi.js +186 -0
- package/dist/teaching/sing-on-midi.js.map +1 -0
- package/dist/teaching.d.ts +148 -0
- package/dist/teaching.d.ts.map +1 -0
- package/dist/teaching.js +453 -0
- package/dist/teaching.js.map +1 -0
- package/dist/test-sound.d.ts +3 -0
- package/dist/test-sound.d.ts.map +1 -0
- package/dist/test-sound.js +41 -0
- package/dist/test-sound.js.map +1 -0
- package/dist/types.d.ts +229 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/vmpk.d.ts +23 -0
- package/dist/vmpk.d.ts.map +1 -0
- package/dist/vmpk.js +236 -0
- package/dist/vmpk.js.map +1 -0
- package/logo.png +0 -0
- package/package.json +70 -0
- package/songs/builtin/a-change-is-gonna-come.json +95 -0
- package/songs/builtin/a-thousand-years.json +93 -0
- package/songs/builtin/aint-no-sunshine.json +98 -0
- package/songs/builtin/all-blues.json +92 -0
- package/songs/builtin/autumn-leaves.json +100 -0
- package/songs/builtin/baba-oriley.json +91 -0
- package/songs/builtin/bach-invention-no1.json +70 -0
- package/songs/builtin/bach-prelude-c-major-bwv846.json +1282 -0
- package/songs/builtin/basic-12-bar-blues.json +119 -0
- package/songs/builtin/beethoven-waldstein-mvt1.json +7766 -0
- package/songs/builtin/bennie-and-the-jets.json +92 -0
- package/songs/builtin/besame-mucho.json +93 -0
- package/songs/builtin/black-orpheus.json +92 -0
- package/songs/builtin/blue-bossa.json +94 -0
- package/songs/builtin/blues-in-g.json +92 -0
- package/songs/builtin/bohemian-rhapsody-intro.json +94 -0
- package/songs/builtin/boogie-woogie-basics.json +93 -0
- package/songs/builtin/bossa-nova-basic.json +95 -0
- package/songs/builtin/chopin-nocturne-op9-no2.json +70 -0
- package/songs/builtin/cinema-paradiso.json +94 -0
- package/songs/builtin/clair-de-lune.json +11511 -0
- package/songs/builtin/clocks.json +91 -0
- package/songs/builtin/crystal-stream.json +70 -0
- package/songs/builtin/desafinado.json +93 -0
- package/songs/builtin/dont-stop-believin.json +91 -0
- package/songs/builtin/dream-on.json +100 -0
- package/songs/builtin/easy-winners.json +70 -0
- package/songs/builtin/el-condor-pasa.json +93 -0
- package/songs/builtin/elite-syncopations.json +70 -0
- package/songs/builtin/evening-calm.json +70 -0
- package/songs/builtin/everyday-blues.json +93 -0
- package/songs/builtin/fly-me-to-the-moon.json +91 -0
- package/songs/builtin/forrest-gump-suite.json +93 -0
- package/songs/builtin/fur-elise.json +20094 -0
- package/songs/builtin/georgia-on-my-mind.json +93 -0
- package/songs/builtin/girl-from-ipanema.json +92 -0
- package/songs/builtin/gladiolus-rag.json +70 -0
- package/songs/builtin/great-balls-of-fire.json +92 -0
- package/songs/builtin/guantanamera.json +92 -0
- package/songs/builtin/hallelujah.json +92 -0
- package/songs/builtin/hedwigs-theme.json +93 -0
- package/songs/builtin/hotel-california.json +92 -0
- package/songs/builtin/imagine.json +92 -0
- package/songs/builtin/just-the-two-of-us.json +92 -0
- package/songs/builtin/la-bamba.json +92 -0
- package/songs/builtin/layla-piano-coda.json +93 -0
- package/songs/builtin/lean-on-me.json +91 -0
- package/songs/builtin/let-it-be.json +101 -0
- package/songs/builtin/lets-stay-together.json +93 -0
- package/songs/builtin/magnetic-rag.json +70 -0
- package/songs/builtin/maple-leaf-rag.json +99 -0
- package/songs/builtin/mia-and-sebastians-theme.json +93 -0
- package/songs/builtin/minor-blues-in-a.json +94 -0
- package/songs/builtin/misty.json +94 -0
- package/songs/builtin/moon-river.json +93 -0
- package/songs/builtin/moonlight-sonata-mvt1.json +101 -0
- package/songs/builtin/morning-light.json +70 -0
- package/songs/builtin/mountain-dawn.json +70 -0
- package/songs/builtin/mozart-k545-mvt1.json +2956 -0
- package/songs/builtin/my-girl.json +92 -0
- package/songs/builtin/night-train.json +92 -0
- package/songs/builtin/november-rain.json +93 -0
- package/songs/builtin/ocean-waves.json +70 -0
- package/songs/builtin/over-the-rainbow.json +93 -0
- package/songs/builtin/oye-como-va.json +93 -0
- package/songs/builtin/peacherine-rag.json +70 -0
- package/songs/builtin/piano-man.json +92 -0
- package/songs/builtin/pineapple-rag.json +70 -0
- package/songs/builtin/pink-panther.json +94 -0
- package/songs/builtin/ragtime-dance.json +70 -0
- package/songs/builtin/river-flows-in-you.json +102 -0
- package/songs/builtin/rocket-man.json +92 -0
- package/songs/builtin/satie-gymnopedie-no1.json +70 -0
- package/songs/builtin/satin-doll.json +93 -0
- package/songs/builtin/schindlers-list.json +96 -0
- package/songs/builtin/schumann-traumerei.json +70 -0
- package/songs/builtin/sitting-on-the-dock.json +91 -0
- package/songs/builtin/slow-blues-in-bb.json +98 -0
- package/songs/builtin/snowfall.json +70 -0
- package/songs/builtin/so-what.json +92 -0
- package/songs/builtin/solace.json +70 -0
- package/songs/builtin/someone-like-you.json +92 -0
- package/songs/builtin/spirited-away.json +94 -0
- package/songs/builtin/st-louis-blues.json +93 -0
- package/songs/builtin/stairway-intro.json +93 -0
- package/songs/builtin/starlight-waltz.json +70 -0
- package/songs/builtin/stay-with-me.json +93 -0
- package/songs/builtin/stormy-monday.json +94 -0
- package/songs/builtin/superstition.json +93 -0
- package/songs/builtin/sweet-home-chicago.json +93 -0
- package/songs/builtin/take-five.json +92 -0
- package/songs/builtin/take-the-a-train.json +93 -0
- package/songs/builtin/the-entertainer.json +98 -0
- package/songs/builtin/the-godfather-waltz.json +93 -0
- package/songs/builtin/thrill-is-gone.json +94 -0
- package/songs/builtin/twilight-garden.json +70 -0
- package/songs/builtin/watermark.json +70 -0
- package/songs/builtin/wave.json +93 -0
- package/songs/builtin/whats-going-on.json +93 -0
- 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
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
14
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
15
|
+
[](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
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
16
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
17
|
+
[](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
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
16
|
+
[](https://github.com/mcp-tool-shop-org/ai_jam_session)
|
|
17
|
+
[](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
|