AIVONY
ピアノ初心者 × AI/ツール作りを temptation bundling(抱き合わせ)した趣味プロジェクト。狙いは 上達速度ではなく 「辞めない × 楽しい」 の最大化。名は Claude(Opus) × 作品番号 Op.88 × ピアノ88鍵。
- 状態:DESIGN.md の棚5要素(§5.1〜5.5)すべて最低限実装済み(2026-06-23)。正典は repo 直下
AIVONY/DESIGN.md。 旧名opus-88/からAIVONY/に改名(2026-06-23)。 - 実装済み:§5.5 生成 / §5.3 FSRS / §5.2 ジャーナルRAG / §5.4 演奏diff / §5.1 アンビエント可視化+MIDIライブロガー。
- 起動方法:正典=コンテナ内で
python main.py(AIVONY/backend)→http://localhost:8000。 host 直起動はstart.bat(→start.ps1、PORT=8010)でバックエンド+MIDIロガー+ブラウザを一括起動。 ※ Ollama (ollama serve) を先に起動(gemma4:12b 必須)、ピアノの電源も先に入れる。 - 設定(2026-06-18):
load_dotenv(override=False)。優先順位 env >.env(gitignore) > code default。 ground truth は code default(gemma4:12b/172.23.32.1)と.env.example。起動時 resolved 行を出力。
実装構成(2026-06-17 時点)
| ファイル | 役割 |
|---|---|
AIVONY/backend/main.py | FastAPI バックエンド(ABC生成・ジャーナル・ジャーナルRAG・FSRS・MIDIログ配信) |
AIVONY/backend/diff.py | 演奏 vs 参照の diff(編集距離アライメント・自前実装) |
AIVONY/host/midi_logger.py | Windowsホスト専用 MIDIライブロガー(mido + python-rtmidi) |
AIVONY/web/index.html | 単一HTML フロントエンド(生成/ジャーナル/復習/ライブ の4タブ・abcjs 組み込み) |
AIVONY/backend/data/cards.json | FSRS カードデータ(自動生成) |
AIVONY/backend/data/journal.md | 練習ジャーナル(追記式) |
AIVONY/backend/data/midi_log.jsonl | MIDIイベントログ(host が追記・コンテナが読む。gitignore) |
AIVONY/start.bat / start.ps1 | host 一括起動(サーバ+MIDIロガー+ブラウザ) |
4タブ構成
- 生成タブ:調・種類(スケール/アルペジオ/メロディ/5指練習)・難易度・小節数を指定し、gemma4:12b → ABC記法 → abcjs で楽譜表示+Web Audio 再生。
- ジャーナルタブ:練習メモを Markdown 形式で追記。生成フレーズをそのまま保存するボタンあり。さらに簡易RAGで過去ログに質問(bigram類似度検索→gemma4:12b)。
- 復習タブ:曲名・パッセージを登録し FSRS 間隔反復(Again/Hard/Good/Easy の4択)で管理。
- ライブタブ:MIDIロガーが書く
midi_log.jsonlをポーリングし、弾いた音を canvas に発光ブロブで描画(音高=色相・velocity=大きさ)。
技術スタック
- バックエンド:FastAPI + httpx + fsrs + pydantic + uvicorn + numpy(diff用)
- フロントエンド:Vanilla JS + abcjs(楽譜表示・Web Audio 再生)+ Canvas2D(ライブ可視化)
- MIDIキャプチャ:mido + python-rtmidi(Windowsホスト専用=コンテナの壁)
- Ollama 接続:WSL2 → Windows ホスト IP
172.23.32.1:11434(start.ps1 ではホスト側なのでlocalhost:11434)
妥協ポイント(§8通り・正典に詳細)
- ジャーナルRAGは embedding→Chroma ではなく bigram類似度(手元 Ollama が
--embeddings無し起動だったため)。 - 演奏diff は partitura のアライメント機能が存在せず編集距離DPで自前実装。参照は今のところ生成スケールのみ。
- ライブ可視化は音響レイヤー(M2)未使用で MIDI velocity のみの近似。
通底原則
純度と制御は気軽に妥協していい。目的(辞めない × 楽しい)だけは妥協しない。 最大の罠は「道具作りが練習を食うこと」=ツールの完成度は成果物にしない(§3)。
status/tagsの正は正典(AIVONY/DESIGN.md)。この地図は派生。