AIで史実をビートに乗せる — 武将選択から曲・歌詞・画像・動画まで
三国志の武将生涯は、そのままHIPHOPの「語り(ラップ)」になる。葛藤・勝敗・信念・裏切り — 史実はすでにストーリーを持っている。
例えば曹仁の樊城(はんじょう)籠城戦(219年)。関羽の大軍と洪水に囲まれながら城を守り抜く。この「絶望的な状況で屈しない」というテーマは、まさにHIPHOPのそれだ。
本教科書は、こうした史実のエピソードを、発音・韻・楽曲構造・映像の技術で形にするノウハウをまとめたもの。
| 工程 | ツール(例) | 役割 |
|---|---|---|
| 楽曲 | MiniMax music-2.6 | ジャンル+BPM+歌詞から楽曲生成 |
| 画像 | MiniMax image-01 等 | アートワーク(水墨画風 等) |
| 動画 | MiniMax Hailuo video 等 | 静止画→動画化(I2V / FL2V / S2V) |
通し読み:第2章(武将選び)→ 第9章(実例)まで、1曲制作の流れを追う。
部分読み:困った工程だけ引く。例えば「発音が悪い」→ 第4章、「韻を踏みたい」→ 第5章。
人物像:守り名将・冷静・不屈。曹操の従弟。
推奨ジャンル:和風HIPHOP(籠城=静謐な強さ) テンポ:ミドル(86-100)
史実参照:三国志演義 第74-75回 / 正史「曹仁伝」
人物像:覇王・奸雄・詩人。冷徹だが情もある。
推奨ジャンル:オーケストラHIPHOP / エピックHIPHOP テンポ:ミドル〜アップ(90-110)
史実参照:三国志演義 全編 / 正史「武帝紀」
人物像:武神・義に厚い・高慢・忠義。
推奨ジャンル:中華風HIPHOP / ブームバップ テンポ:ミドル(86-100)
史実参照:三国志演義 第74-77回 / 正史「関羽伝」
人物像:豪快・暴れん坊・情に厚い・酒乱。
推奨ジャンル:ヌメタルHIPHOP / ドリル テンポ:ファスト(116+)
史実参照:三国志演義 第42回 / 正史「張飛伝」
人物像:完璧超人・忠義・武勇・謙虚。
推奨ジャンル:オーケストラHIPHOP / ブームバップ テンポ:アップ(101-115)
史実参照:三国志演義 第41回 / 正史「趙雲伝」
人物像:知将・忠義・疲弊・悲劇の天才。
推奨ジャンル:オーケストラHIPHOP / Lofi HIPHOP テンポ:スロー〜ミドル(70-100)
史実参照:三国志演義 第43-104回 / 正史「諸葛亮伝」
人物像:最強の暴力・裏切り・孤独・猛将。
推奨ジャンル:ドリル / ヌメタルHIPHOP テンポ:ファスト(116+)
史実参照:三国志演義 第3-19回 / 正史「呂布伝」
人物像:雅・美丈夫・英才。諸葛亮への対抗心。
推奨ジャンル:グレイトフル・デイズ風 / 和楽器HIPHOP テンポ:ミドル(86-100)
史実参照:三国志演義 第44-57回 / 正史「周瑜伝」
人物像:仁義・人徳・涙。草莽から皇帝へ。
推奨ジャンル:オーケストラHIPHOP / ブームバップ テンポ:ミドル(86-100)
史実参照:三国志演義 全編 / 正史「先主伝」
人物像:梟雄・忍耐・狡猾。最終勝者。
推奨ジャンル:ドリル / サイバートラップ テンポ:ミドル〜アップ(90-115)
史実参照:三国志演義 第95-106回 / 正史「司馬懿伝」
語り甲斐のある生涯を選ぶ — 葛藤・勝敗・信念を持つ武将ほど、ラップのストーリーになる。
最大の局面を楽曲テーマにする。武将の生涯で最もドラマチックな場面:
ジャンルは大きく6系統。武将の人物像に合ったものを選ぶと世界観が刺さる。
| 系統 | 代表ジャンル | 適合武将 |
|---|---|---|
| 和風 | 和風HIPHOP / グレイトフル・デイズ風 / 和楽器HIPHOP | 曹仁・周瑜・諸葛亮 |
| 中国/アジアン | 中華風HIPHOP / チャイニーズトラップ | 関羽・曹操・呂布 |
| トラップ/ドリル | トラップ / ドリル / サイバートラップ | 呂布・張飛・司馬懿 |
| オーケストラ | オーケストラHIPHOP / エピックHIPHOP | 曹操・諸葛亮・趙雲 |
| レトロ/クラシック | ブームバップ / Lofi HIPHOP | 関羽・劉備・諸葛亮 |
| ロック融合 | ラップロック / ヌメタルHIPHOP / 和太鼓融合 | 張飛・呂布 |
核心公式(4/4拍子):
1小節の長さ(秒) = (60 ÷ BPM) × 4
秒数 = 小節数 × 4拍 × (60 ÷ BPM)
小節数 = (分数 × BPM) ÷ 4
BPM別 早見表:
| BPM | 1小節 | 8小節(Chorus) | 16小節(Verse) |
|---|---|---|---|
| 80 | 3.00秒 | 24秒 | 48秒 |
| 90 | 2.67秒 | 21秒 | 43秒 |
| 100 | 2.40秒 | 19秒 | 38秒 |
| 110 | 2.18秒 | 17.5秒 | 34.9秒 |
| 120 | 2.00秒 | 16秒 | 32秒 |
秒数計算だけでなく、各セクションに音楽的役割を割り当てると楽曲の説得力が上がる。
| セクション | 小節 | タイム | 音楽的役割 |
|---|---|---|---|
| Intro | 8 | 0:00-0:17 | 静寂(鐘・雨音)から爆発 |
| Verse1 | 16 | 0:18-0:45 | 音数を落とし言葉を聴かせる |
| PreChorus | 8 | 0:46-0:59 | サビへのビルドアップ |
| Chorus | 16 | 1:00-1:28 | 最大の盛り上がり |
| Verse2 | 16 | 1:41-2:08 | 2番歌詞 |
| Bridge | 8 | 2:38-3:05 | 落ちサビ・閉鎖空間 |
| 大Chorus | 16 | 3:06-3:40 | 転調・最大ピーク |
| Outro | 8 | 3:41-4:00 | 余韻を残して収束 |
[Intro][Verse][Pre Chorus][Chorus][Interlude][Bridge][Outro][Post Chorus][Transition][Break][Hook][Build Up][Inst][Solo]
[Verse]単独だとAIが圧縮する傾向。[Verse 1][Verse 2][Verse 3]と番号付きにすると長尺が保ちやすい。MiniMax music-2.6 に歌詞を渡すとき、漢字は使わず全てひらがなで書く。AIは漢字を正しく読めず、誤読・造語を量産する。
AIは助詞「は」を 「ha」 と誤発音する。歌詞では全て「わ」と書く:
(F)=女性/(M)=男性。デュオ時は括弧で明示| 失敗 | 原因 | 対策 |
|---|---|---|
| 造語(「まいふせつ」「すがわだ」) | 適当にひらがな化 | 辞書(janome)で読み確認 |
| 不屈=ふこつ(誤読) | 辞書確認せず | 正:ふくつ |
| 存在しない活用形「きたったのだ」 | 活用形誤り | 1行ずつ音読 |
形態素解析器(janome 等)は、武将名などの固有名詞を勝手に分割して誤読する。
例:関羽 → 正しくは「かんう」だが、janomeは「せき + はね」等に分割してしまう。
| 漢字 | 読み | 区分 |
|---|---|---|
| 曹仁 | そうじん | 魏の武将 |
| 曹操 | そうそう | 魏 |
| 関羽 | かんう | 蜀の武将 |
| 張飛 | ちょうひ | 蜀 |
| 趙雲 | ちょううん | 蜀 |
| 諸葛亮 | しょかつりょう | 蜀 |
| 呂布 | りょふ | 群雄 |
| 周瑜 | しゅうゆ | 呉 |
| 司馬懿 | しばい | 魏 |
| 樊城 | はんじょう | 地名 |
| 赤壁 | せきへき | 地名 |
| 五丈原 | ごじょうげん | 地名 |
janome で一般語の読みを取得し、三国志固有名詞は手動マップで上書きするツール。正規表現で固有名詞を先に切り出してから処理することで、関羽→せき+はね問題を回避している。
pip install janome
#!/usr/bin/env python3
"""漢字歌詞 → 正しいひらがな歌詞 変換スクリプト."""
import re
from janome.tokenizer import Tokenizer
# 三国志固有名詞の手動マップ(史実の日本語読み・カタカナ値)
PROPER_NOUNS = {
"曹仁": "ソウジン", "樊城": "ハンジョウ", "関羽": "カンウ",
"于禁": "ウキン", "庞徳": "ホウトク", "徐晃": "ジョコウ",
"曹操": "ソウソウ", "蜀": "ショク", "魏": "ギ",
"劉備": "リュウビ", "諸葛亮": "ショカツリョウ", "孔明": "コウメイ",
"呂布": "リョフ", "張飛": "チョウヒ", "趙雲": "チョウウン",
"馬超": "バチョウ", "黄忠": "コウチュウ", "周瑜": "シュウユ",
"孫権": "ソンケン", "孫策": "ソンサク", "司馬懿": "シバイ",
"袁紹": "エンショウ", "董卓": "トウタク",
"銅雀台": "ドウジャクダイ", "赤壁": "セキヘキ",
"五丈原": "ゴジョウゲン", "官渡": "カント", "呉": "ゴ", "漢": "カン",
}
def kata_to_hira(kata: str) -> str:
"""カタカナ→ひらがな."""
out = []
for c in kata:
if "ァ" <= c <= "ヴ":
out.append(chr(ord(c) - 0x60))
else:
out.append(c)
return "".join(out)
def kanji_to_hiragana(text: str, tokenizer=None) -> str:
"""text をひらがな化。固有名詞は正規表現で先分割してPROPER_NOUNSを直接適用。
(関羽→せき+はね問題の対策)"""
if tokenizer is None:
tokenizer = Tokenizer()
names = sorted(PROPER_NOUNS.keys(), key=len, reverse=True)
pattern = re.compile("(" + "|".join(re.escape(n) for n in names) + ")")
parts = pattern.split(text)
result_parts = []
for part in parts:
if not part:
continue
if part in PROPER_NOUNS:
result_parts.append(kata_to_hira(PROPER_NOUNS[part]))
else:
for tk in tokenizer.tokenize(part):
s = tk.surface
if tk.reading and tk.reading != "*":
result_parts.append(kata_to_hira(tk.reading))
else:
result_parts.append(s)
return "".join(result_parts)
if __name__ == "__main__":
sample = "樊城の 嵐… 関羽の 軍が 迫る"
print(kanji_to_hiragana(sample))
# → はんじょうの あらし… かんうの ぐんが せまる
日本語ラップの韻は子音より母音。語尾の母音が揃えば韻になる。
例:「そうじん」= s/o ー/o j/i n
「こうしん」= k/o ー/o sh/i n
→ 母音列 [o-u-i-n] 完全一致 → 4字韻(複韻)
| 種類 | 場所 | 特徴 |
|---|---|---|
| 脚韻 | 行末尾 | 基本。聞き手が期待する着地点 |
| 頭韻 | 行先頭 | 脚韻と併用で強力 |
| 内部韻 | 行途中 | flowに躍動感 |
| 呼び | 文字数 | 例 |
|---|---|---|
| 単韻 | 1字 | だ/な/か |
| 2字韻 | 2字 | そう/こう(o-u) |
| 3字韻 | 3字 | そうじ/こうし(o-u-i) |
| 4字韻(複韻) | 4字 | そうじん/こうしん(o-u-i-n) |
prompt(スタイル記述)は構造化フォーマットで書くと精度が上がる。
[ジャンル] / [サウンド特性] / [BPM] / [ボーカル] / [世界観] / [スケール] / [構造]
Aggressive Japanese hip-hop / rap-rock ← ジャンル
heavy trap beats mixed with distorted electric guitar ← 低域補強
hard-hitting 808 drums around BPM 115 ← BPM+低域
deep gritty powerful male rap vocal in his 50s ← ボーカル
dark masculine warlord energy ← 世界観
Chinese pentatonic motifs ← スケール
anthemic hook chorus with back-up shouts ← 構造
[Verse 1][Chorus] 等は公式14種を使用。promptに「音作り」の表現を盛り込むと生成品質が上がる。
三味線・琵琶の速弾きにディレイ/リバーブを深くかけ、高音域の金属的アタックを空間配置。
shamisen fast picking with deep reverb, metallic attack high frequencies
ドロップチューニングのディストーションギターをベースラインと同期。
drop-tuned distorted guitar synced with heavy bassline, thick bottom end
落ちサビ等でローパスフィルター(高音域カット)を適用、こもった音像で閉鎖空間演出。
muffled lo-fi section with low-pass filter, underwater atmosphere
pumping sidechain bass with 808 kicksvinyl crackle, wow flutter tape texture, laid-back drums dragging slightly off-gridtape stop transitions, digital glitch effects between sections| ジャンル系 | スケール | prompt表現 |
|---|---|---|
| 和風HIPHOP(攻め) | 陰音階(マイナー) | minor key, Japanese in scale, dark |
| 和風(雅・叙事) | 都節音階 | miyako-bushi scale, traditional Japanese mode |
| 中華風HIPHOP | ペンタトニック | Chinese pentatonic scale, guzheng motifs |
| 和風Lofi | 和風ペンタトニック | Japanese pentatonic, mellow, nostalgic |
music-2.6 は非決定的(同じprompt+歌詞でも毎回違う結果・seed指定不可)。歌詞を直して再生成すると曲調まで変わる。良い曲を活かして歌詞だけ直すには music-cover を使う。
良い曲を base64 エンコードで POST すると、曲の音響特徴(24h有効)を取得。
curl -X POST https://api.minimax.io/v1/music_generation \
-H "Authorization: Bearer $MINIMAX_API_KEY" \
-d "{\"model\":\"music-cover\",\"cover_feature_id\":\"\",\"lyrics\":\"<修正歌詞>\"}"
| 症状 | 原因 | 対処 |
|---|---|---|
| 発音が崩れる | 漢字誤読・助詞「は」 | 第4章ルール適用→music-coverで修正 |
| 曲が短くなる | Verse圧縮 | [Verse 1][Verse 2] 番号付き |
| 曲調が劣化 | 再生成の非決定性 | 良い回をpreprocess保存 |
アートワーク生成のプロンプトも構造化フォーマットで書くと精度が上がる。
[スタイル] + [被写体] + [環境/小物] + [照明/色] + [構図] --ar 16:9
Chinese ink wash painting, general Cao Ren on flooded walls,
rain and storm clouds, dramatic lighting indigo and crimson,
cinematic --ar 16:9
武将の象徴シーンを選ぶ:曹仁なら籠城/関羽攻撃/洪水、関羽なら麦城、呂布なら虎牢関 等。
花鈿(かでん/huadian)とは、古代中国の女性が眉間に施した赤い装飾。AI画像生成は古代中国女性を描く際、この花鈿を強制付加する傾向がある。
武将の妻・姫などの女性キャラを描く際、史実や構図に関わらず花鈿が乗ってしまう。アートワークとして不要な場合が多い。
no forehead mark, no huadian 等のネガティブ指示を入れる(効果は限定的)MiniMax Hailuo video 等の動画生成は、入力方式で3モードがある。
| モード | 入力 | 向いてる用途 |
|---|---|---|
| FL2V | 開始帧+終了帧 | 2つの構図を繋ぐ変化 |
| S2V | 人物参照画像 | 特定キャラクターを動かす |
| I2V | 静止画1枚 | アートワークに動きを付ける(基本) |
楽曲の雰囲気に合わせて、動画の動き方(カメラワーク・粒子・遷移)を指示する。
perfect loop, subtle swaying smoke, slow grain,
no sudden camera movement
fast dynamic camera panning, ink transition effect,
aggressive particle motion
ink transition effect(墨の滲みで遷移)が世界観に合う。I2V で参照画像を渡す際、素の base64 だと invalid image url でrejectされる。data URI 形式(data:image/jpeg;base64,...)にすること。
動画生成は非同期:task_id 返却 → ポーリングで完了を待つ。I2V 6秒動画で約2分20秒。
/v1/video_generation)。MCP経由でも可能だが、枠制限に当たった場合は直接API+従量アカウントで回避。テーマ:曹仁の樊城(はんじょう)籠城戦(219年)。関羽の猛攻と洪水に囲まれながら城を守り抜く「不屈」の物語。
| 項目 | 値 |
|---|---|
| ジャンル | 和風HIPHOP / ラップロック(攻め) |
| BPM | 115 |
| ボーカル | 男性(50代・渋く力強い) |
| 曲長 | 175秒(約2分55秒) |
| 成果物 | 楽曲(mp3)/ 水墨画アートワーク(jpeg)/ 動画(mp4 1280×720) |
完成まで8回の試行錯誤があった。ここで得た学びが本教科書の各章に結実している。
ビート・メロディ・構造は良好(Verse3回・172秒)。だが助詞「は」を「ha」と誤発音。「樊城は倒れぬ」が「樊城ha倒れぬ」に。
「は→わ」を直して再生成したら、曲調まで変わってしまった。music-2.6 の非決定性(同じprompt+歌詞でも毎回違う結果)の壁。
良い曲(v6)を music-cover で参照し、修正した歌詞(v7の正しい発音)だけを乗せ直す。結果:v6のビート/メロディ/構造を維持 + v7の正しい発音。175秒・v6との差はわずか3秒(第6章 music-cover手法)。