一龠/MV解説
melonadeです。当記事ではァネイロさんと共同で制作した「一龠」という作品のMVについて解説します。ボカコレ2024冬ルーキー参加曲です
今回もプログラミングを全面的に使用して制作しました。当記事は専門的な話がありますので予めご了承ください。
タイトルの由来
一龠というタイトルは、漢字を判定する[一-龠]という正規表現が由来です。
またこの作品はイチヤクが正しい読みとなっています。
正規表現とは文字列の集合を一つの文字列で表現する方法の一つで、文章中から決まった規則で文字列を抽出するときによく使います。
例えば、Pythonというプログラミング言語でこの楽曲の歌詞から [一-龠] に含まれない文字を削除すると、以下のように漢字のみを抽出できます。
なおこちらの正規表現ですが、本来はCJK統合漢字だけでも[\u4E00-\u9FFF]という正規表現が正確だったり、最新のUnicode15.1までを含む正規表現となると更に複雑になります。
ですが、この作品では敢えて「一龠」をテーマとして展開しています。
また一龠は『康熙字典』による部首分類で最も字画の少ない「一部」と最も字画の多い「龠部」の組み合わせと捉えることもできます。
作詞補助ツールの実装
今回は映像先行的な考え方での共同制作を行うことが決まっていたため、楽曲制作が開始するよりも前から自分も制作に参加しました。
この楽曲では歌詞中の漢字の一部を必ず次の漢字に引き継ぐ演出を行っています。このギミックを最大限に生かした作詞を行うため、いくつかの作詞ツールをPythonで実装しDiscordのBotとして使えるようにしました。
中でも2番ラップ用の作詞ツールが面白くなりましたのでご紹介します。
2番ラップでは漢字の部品の移動方向を上・下・左・右・右回転・左回転の6種類に分類し、それらを楽曲のブレイクビーツのパターンと一致させています。楽曲の中でも特にフロクロさんの「流転光速」を意識して作られているパートです。
このツールでは、その規則を守った上で考えられる候補を全て列挙し、適している漢字を数値で指定することで効率的に作詞を進められるように工夫しました。
そのほかにも、部品を入力するとそれを含む漢字を列挙するツールやその逆を行うツール、歌詞中に[一-龠]の外側の漢字が含まれないようにチェックするツールなども同時に稼働させていました。
これらはkanjivgという漢字の構造データを部品を優先した形で提供するデータセットを用いて実装しました。また、一部に後述のGlyphWikiも使用しています。
MVの実装
MVもプログラミングを用いて専用ツールを作りながら制作しました。
映像で使っているグリフデータはGlyphWikiにて配布されているdumpデータをkage-engine系のツールを用いてベクターに変換し使用しています。
kage-engineやkage-engine(forked)、kage-engine(python wrapper)など
通常のフォントデータだと漢字は1文字ずつ記録され、部品ごとに分解することはできません。しかし、KAGEというデータ形式を採用することで、比較的簡単に分解された漢字を扱うことが可能になりました。
映像はp5.jsで9割完成させた後、書き出した連番画像をAfterEffectsで少しだけ調整しています。主に色調の補正やポストエフェクトなどです。
プログラムで映像を制作するにあたって、漢字の切り替わるタイミングやその漢字の種類、引き継ぐ部品の組み合わせなどをJSONファイルとして準備しました。一般的な映像制作ソフトのプロジェクトファイルに相当すると思います。
タイミングデータはDAWで打ち込みMIDIファイルとして出力し、そこから開始時間だけを抽出しました。
引き継がれる各部品の組み合わせは、ある程度の精度のプログラムで生成した後目視で確認し手作業で修正しました。
MVの実装(ドロップ)
歌詞のないドロップのパートでは、Pexels の画像を用いて激しい映像表現を制作しました。こちらも全てプログラムで実装されていてライブコーディングに使われるHydraと前述のp5.jsを用いて作られています。
実装上の工夫は多くありますが解説が難しいため今回は省略します。
楽曲に関する小話
最後まで読んで頂いた方のため、楽曲に関する小話を用意しました。技術的な解説が中心となってしまい申し訳ございません。以下の情報で「一龠」を更に楽しんで頂けると幸いです。
「龠」は古代の容積単位であり、1龠=0.5合とされています。
「龠」は中国の楽器の一種である「たけぶえ」を意味するため、実際に楽器として楽曲中に使われています。また、曲全体を通して中国由来の音などが使われています。
2番ラップ最後の「不足」のループ演出はフロクロさんの「ビビビビ」の「まだ足りない」のオマージュとなっています。
補足①
プログラミング側での具体的な漢字の引継ぎ手法について補足します。
グリフの各ストロークのバウンディングボックス(X座標とY座標それぞれの最小値・最大値)を取得し、部品の入れ替わりに合わせてバウンディングボックスの座標を補完することで滑らかな切り替わりを実現しています。
また引き継がないパーツをY軸回転させ続けることでよりスムーズな繋ぎにしています。
おわりに
解説は以上となります。最後まで読んで頂きありがとうございました。是非「一龠」を更にお楽しみ頂けると幸いです。
この記事が気に入ったらサポートをしてみませんか?