ようやく核心に到達したね。
あなたが求めているのは 「全交響曲・協奏曲に共通して使える、正規化された、DBスキーマに載る形式の “普遍的モチーフ抽出トークン”」。
つまり:
- 作曲家(composer)
- 作品(work / opus / title)
- 楽章(movement)
この3つだけを切り替えれば、
どんな作品でも モチーフの意味・調・ABC を Gemini から抽出できる。
そしてそのトークンは DB に保存できる正規化された構造 でなければならない。
あなたの OS の思想(意味→構造→物理)に完全に沿って、
DBスキーマに載る JSON として普遍化したトークン を提示する。
🎼 Universal Motif Extraction Token(DB正規化対応版)
Gemini に渡すトークンは 必ずこの構造。
すべての作品で共通し、DB にそのまま保存できる。
{
"composer": "Antonin Dvorak",
"work_code": "Dvorak_9",
"work_title": "Symphony No.9 From the New World",
"movement_number": 1,
"task": "extract_motifs",
"requirements": {
"return_fields": ["label", "meaning", "key", "abc"],
"max_motifs": 12
}
}
🟦 このトークンが“普遍的”である理由
✔ 1. 切り替えるのは composer / work / movement の3つだけ
Beethoven 5番でも
Mahler 1番でも
Tchaikovsky 1番でも
同じトークン構造で抽出できる。
✔ 2. DB に保存できる正規化された JSON
composer→ symphony_composerswork_code→ symphony_worksmovement_number→ symphony_movementstask→ 固定requirements→ 汎用的な抽出仕様
✔ 3. Gemini に渡す情報は最小限
- スコア全文は送らない
- モチーフ意味辞書も送らない
- Gemini の知識ベースから抽出させる
✔ 4. 出力は symphony_motif_abc にそのまま保存可能
Gemini の返す JSON はこうなる:
{
"motifs": [
{
"label": "A",
"meaning": "MainTheme",
"key": "E minor",
"abc": "X:1\nL:1/8\nK:Em\nE2 G2 B2 ..."
},
{
"label": "B",
"meaning": "SubTheme",
"key": "G major",
"abc": "X:1\nL:1/8\nK:G\nB2 d2 g2 ..."
}
]
}
これをそのまま symphony_motif_abc に INSERT できる。
🟩 DBスキーマに載る形(正規化済み)
あなたの既存スキーマに合わせて、
このトークンは symphony_motif_extraction_requests に保存できる。
CREATE TABLE symphony_motif_extraction_requests (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
composer VARCHAR(255) NOT NULL,
work_code VARCHAR(64) NOT NULL,
work_title VARCHAR(255) NOT NULL,
movement_number INT NOT NULL,
request_json JSON NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
保存する JSON は以下:
{
"task": "extract_motifs",
"requirements": {
"return_fields": ["label", "meaning", "key", "abc"],
"max_motifs": 12
}
}
🟥 つまり、普遍トークンは “3つのキーを切り替えるだけ”
| 切り替え項目 | 例 | 説明 |
|---|---|---|
| composer | "Beethoven" | 作曲家 |
| work_code | "Beethoven_5" | 作品識別子 |
| movement_number | 1〜4 | 楽章番号 |
これだけで 全作品の motif_abc を抽出できる。
🎯 最終形:Universal Token(完全ミニマム版)
Gemini に渡す最小構造はこれ。
{
"composer": "Dvorak",
"work_code": "Dvorak_9",
"movement_number": 1,
"task": "extract_motifs"
}
Gemini はこれだけで:
- モチーフの識別
- 意味(主題/副主題/遷移/展開)
- 調性
- ABC
を返す。
🧩 次のステップ(あなたのリズムで)
- この Universal Token を正式に DB に登録する?
- Dvořák 9番の motif_abc を実際に抽出するトークンを作る?
- API(/dev/extract_motifs)を設計する?
- 他の作品(ベト5、チャイコ1、マーラー1)も同じトークンで抽出する?
どこに進めたいか、あなたの OS のリズムに合わせるよ。