見出し画像

ゲームプレイを音楽として再解釈する

私はかねてより「音楽とゲームの融合」を目指してゲーム開発を行ってきました。先日公開した作品「Same Game, Different Music」では、古典的なパズルゲームである「さめがめ」をプレイするだけで、ブロックを消す順番とスコアに応じて毎回違った音楽が生成・展開されます。

もし興味を持っていただければ、是非こちらからDLして遊んでみてください。Win/Mac対応です。

ゲームプレイから音楽が生成される、Generative Musicと呼ばれるタイプの作品は、なかなか目にする(耳にする)機会がないので「アイデアがすごい」などとお褒めいただきますが、私自身は10年以上も前からこうした作品を作っており、その延長上に自然と表れてきたアイデアを形にしているだけに過ぎません。

音楽マインスイーパーのDLはこちらから。もう10年以上も前の学生時代の作品です。

作品への感想として「自分でもこういうの作ってみたい!」という事も聞いたりしますが、実際のところ、技術的には可能であっても、ゼロから「どのようなゲームであれば、どんな音楽が生成できるのか」を見極めるのが難しい気がしています。

このようなGenerative Musicの作品を作っている人は他にあまり見たことがないですが、それは(勝手な想像ですが)技術的な問題ではなく方向性とか考え方の違いなんじゃないかと思っています。私は「音楽を作るためのゲーム」を目指しているのでもなければ、「ゲームを引き立てるための音楽」を目指しているわけでもない、それらを幾分犠牲にしてでも「自分のゲームプレイが音楽になるという体験」を目指してゲームデザインを行っています。

本記事では、そうしたゲームデザインのノウハウを一挙公開しますが、ここから着想して独自のGenerative Musicを作っていただいても嬉しいですし、そうではない方にも何かの刺激になれば幸いです。


「音楽マインスイーパー」のつくりかた

まず先に、私の処女作でもある「音楽マインスイーパー」の概説をしておこうと思います。

比べてみると明らかですが、最新作「Same Game, Different Music」の音楽生成ロジックも、基礎部分はこれと似ています。

「マインスイーパーの盤面をシーケンサーに見立てて、旗が置かれている場所で音を鳴らす」だけの仕組みです。

マインスイーパーって何?という方に説明すると、爆弾を避けて全部のマスを開けることが目的のゲームで、旗は爆弾があるとプレイヤーが判断したところに立てておくと便利な印です。

音階

音階は「ド・レ・ファ・ソ」の4音から、下の方から順番に低い音~高い音になるように並べています。

クリア後にはこれ以外の音階に変更もできるようになっていますが、それは私よりもずっと音楽に詳しい友人に手伝ってもらっており、私自身は和音の知識にはあまり自信がありません。

教科書的な知識は、この記事を書くときにもいろいろと復習しましたが……

「ド・レ・ファ・ソ」については、最初に適当に自分で選びました。なんとなくsus4(ドファソ)のコードが好きだったのと、それにミを足すよりもレを足すほうがなんかカッコよかったからです。適当!五度圏で近いところにある4音なので、相性は良さそうですね。

リズム

後ろのドラムトラックだけは自分で作っています。これがマインスイーパーの進捗速度に応じて盛り上がったり落ち着いたりします。

構成

シーケンサーが縦・横と2小節ずつ走査するため全部で4小節のループになります。ここで少しだけ、オリジナルのマインスイーパーからアレンジした部分があります。それは盤面の広さです。

Wikipediaによると、オリジナルの盤面構成は以下のようですが

  • 初級:9×9のマスに10個の地雷

  • 中級:16×16のマスに40個の地雷

  • 上級:30×16のマスに99個の地雷

音楽的にはやはり「16」という数を使いたいわけです。1小節は普通ですと「16分音符」が16個集まった長さなので、16のマスがあるとそれをちょうど1小節に対応させることができます。

そこで、

音楽マインスイーパー:32×16のマスに80個の地雷

という構成にしました。これで横に走査するだけでちょうど2小節分になり、縦横合わせて4小節になります。

地雷の数も地味にオリジナルより少なくしているのもポイントかもしれません(たしか、オリジナルと同じ99個だと微妙に音の密度が高すぎて、あまり綺麗に感じなかったため調整した記憶があります)。

あとはクリア後にプレイ履歴からメロディが生成される、というのも音楽マインスイーパーの特徴ではあるのですが、今日の本題としてはSame Game, Different Musicのほうを説明したいので、ここでは省略します。

なぜマインスイーパーが音楽になったのか?

肝心の「どうしてこれが音楽になると思ったのか?」ですが、この処女作については残念ながら何らかの慧眼があって狙ったものではなく、運が良かったとしか言えません。

ゲーム制作の勉強のためにマインスイーパーのコピーを作り、オリジナルのゲームのために作っていた音楽機能を移植して「これシーケンサーにしたら面白いんじゃね?」という勢いのまま作ったらなんか音楽になった、というのが正直なところです。自分としてはこれに再現性があるとは一切思っていませんでした。

マインスイーパーの盤面自体が、「ちょうど音楽に使いやすい16x32の盤面に近かった」のと、「ちょうど音楽になりやすい爆弾の密度を持っていた」という偶然が重なったことが大きく、これを一般のパズルゲーム、それこそぷよぷよとかテトリスなんかに応用しようと思ってもこんな単純にうまくいくわけはありません。

(だからこそ、水口哲也さんがテトリスエフェクトを完成させた時は本当に度肝を抜かれました)

「Same Game, Different Music」のつくりかた

「音楽マインスイーパー」から10年も経ち、久々に作ったGenerative Musicの作品が「Same Game, Different Music」です。

あれ以来はなかなかこうした「1音単位での音楽生成」というのからは遠ざかっており、1小節とかセクションの単位で音楽を変化させるInteractive Music的な作品を多く作っていましたが、それはまさにこれから解説する「音楽的な情報量」をゲームから見出すのが難しいからにほかなりません。

では、「さめがめの音楽的再解釈」がどう作られているのか概説します。

「Same Game」いわゆる「さめがめ」をご存知ない方に基本ルールを説明しますと、基本は「同じ色が繋がっているブロックを消していく」だけで、一般的な落ちものパズルと違うのは何かが迫り上がったり落ちてきたりしないのでじっくり考えて良いということです。
何を考えてブロックを消すかというと、スコアです。消したブロックの数によってスコアが加算されるのですが、スコアの計算式は(消したブロックの数-2)の2乗、になっています。なので、2個消しだと0点なのに、12個消すと10*10=100点、52個消すと50*50=2500点と、とにかく大きなブロックの塊を作ってまとめて消すゲームになっています。

音階はド・レ・ソ・ド・レという5音から始まります。この5音構成がスコア状況により変化します。どの音程を選ぶかはブロックの座標から決めています(後ほど詳述)。

リズムに関しては、消したブロックの履歴を順に再生する形で、消したブロックの数=次の音符までの長さ、になるようになっています。2個消しなら16分音符2個分で、3個消しなら16分音符3個分で次の音が鳴ります。これが4色それぞれで4トラック重なることで複雑なリズムになっています。

譜面として残る音とは別に、ブロックを消すときの効果音もあります。こちらの音階も座標によって決めており、例外的に一定以上の大きな塊を消した時に気持ち良いアルペジオになるように設定してあります。

それに加えて、後ろのドラムトラックとベースパターンが、スコア状況(=5音構成の組み合わせ)に対応して用意されています。

基本的にはこれだけで、ゲームプレイが音楽に変換されています。

フレーズを生成するための「音楽的情報量」を見出す

マインスイーパーのように盤面をそのままシーケンサーにしたのではないので、このアイデアに到るまでは試行錯誤がありました。完成品を見れば作れるような気がしてもこれをゼロから考えるのはまた別の難しさがあります。

私がこのゲームの音楽システムを考えていた時のメモが残っていたので引用します。

音の構成要素としては、
消す時のフレーズ
消された履歴によるバッキング
この2つしかない
履歴はある程度積み重なってちゃんと覚えられるものが良い

ブロックにあるパラメータとしては?
・消したブロック
・ブロックの現在の座標
・ブロックの元の座標
・ブロックの数
・ブロックの色
・消したタイミング

から、タイミングと音程を決定する
とにかくタイミングはバラけた方が良い。

連続したものを消す性質上、お団子コードが多くなってしまう。

制作中のメモより

こういった海の物とも山の物ともつかぬ雑多な情報から、なんか音楽っぽくなる特性をもったものを見出す必要があります。

繰り返し構造を作る

音楽に絶対必要な構造とは何か、と言われたらそれは「繰り返し」であると考えます。

もっと分解すると「繰り返しから次の音が予測できるようになること」です。予測が生まれることで、繰り返しでそれが肯定されたり、変化したときに驚きが生まれたりします。「単なる音の羅列」と「音楽」を分かつ分岐点がここにあると言っても過言ではないと思います。繰り返しが無かったとしても、それは今までの音楽的な経験というより大きな繰り返しの中から次の音を予測しているに過ぎない、と考えます。

とにもかくにも、音楽というのは「これが繰り返されるだろう」という予測がなければ成り立たないわけです。

さめがめはブロックを消していくので盤面は最後に消えてしまいます。そのため、繰り返し構造を得るには「消した」ブロックの履歴を使うしかない、という考えがここから導かれます。

適度な密度でリズムを埋める

さめがめの戦略上、2,3個の小さいブロックを消していって大きな塊を作るので、この2とか3とかの数をリズムの素にするのは良さそうな気がします。ということで早速その履歴を「一列の」リズムにしてみたのですが、その時の音楽を再現してみると以下のようになりました。絶望的に音楽からは程遠い感じがわかって「あー……」となるはず。

嫌な予感がしました。さめがめ、音楽にならないんじゃね?このままいい感じのロジックが見つからなかったらどうしよう。と、結構焦りました。

この時点では、まだ「色ごとに履歴を分けて4トラックにする」というアイデアがなかったのです。ここで久しぶりに音楽マインスイーパーの動画を見返して、なんであれは音楽っぽくなったのか?をもう一度自分で分析したところ、リズムに多層的な構造あることが重要だったんだと気付かされました(自分で作っといて)。

以下、4トラックにした際の動画。うっすらと音楽になりそうな気配が漂ってきた。(ギリギリ動画が残ってた)(1トラックの時のは恥ずかしすぎて残してなかった)(UIも色も何も調整されてなくてひどい)これが9/12で渋谷PARCOに展示するまで1ヶ月切ってる状態。

伸ばす音じゃなくて16分音符になったのは、たしか意図的じゃなくて最初バグだったような記憶が……「えっこのほうがいいじゃん」となって採用。同時に採用する音列の実験もやっている。

ベース音を入れて音色を仮で整えて、これでようやく最終仕様にかなり近づいた形。あとはブラッシュアップすれば音楽になるかな!?という予感がしてきました。

4小節の長さに納める

リズムの生成仕様が決まったところで、これを4小節に納める方法を考えるのですが、驚くべきことに、最初に適当に決めた「16x16の盤面」がピッタリと4小節に収まることに気が付きました。どういうことかというと、

1ブロック=16分音符1個分の長さと決めたので、16ブロック=1小節の長さ

つまり、16*16の盤面は、全部繋げると1小節*16=16小節の長さ

これを4色で分けるので、1色は(平均して)16/4=4小節の長さ

で、なんと勝手に各色のトラックが4小節になってくれるのです。

細かいことを言うと、4色のブロック数は等分ではなくランダムに割り振られるので、平均は16*4=64ブロックで、それより多い色は4小節より長く、少ない色は4小節より短くなる可能性があります。が、これは無視できる程度のものでした。

「さめがめ」の原作やそれに連なる作品群では、ほとんどの場合横長の盤面に5つ以上の色を使って行われることが多いです。

SameGame for Windows
http://www.vector.co.jp/magazine/jyuou/backnumber/jyuou_020724.html

16*16にしたのは単に正方形が好きだったのと、プログラマーとしても16が都合が良さそうだったからで、それが結果的に音楽としても「ちょうどよい」情報量となったことはありがたい偶然でした。

音程を適度にバラけさせる

一番簡単なのはマインスイーパーと同じように「マス目の高さをそのまま音階に結びつける」というシーケンサー的な考え方ですが、「さめがめ」では「左右または上下に隣接したブロック」を消すために、それだとお団子コードが多くなってちょっと味気なくなる可能性がありました。

そこで色々試しつつ、適当な計算式でXとYを混ぜていい感じにしました。

音程の計算ロジック部分のコード

ちなみに、この「ブロックの座標」は消したときの現在座標ではなく、盤面生成時の「オリジナル座標」をもとに計算しています。ルール上どうしてもゲームが進むほど盤面は画面下方に集まるため、オリジナル座標を利用することで、そうした影響を排除して均一に音を分布させることができます。

以上でひとまず、このゲームの特徴である1音ずつの完全オリジナルフレーズ生成ロジックが完成いたしました。

ゲームプレイの展開から「音楽的構造」を見出す

Same Game, Different Musicでは、先程作ったオリジナルフレーズで使われる音階がスコアに応じて変化するようになっています。

プレイ中はなんとなーくゲームの状態に合わせて音楽の緊張感が変化したり盛り上がったりする様子が感じられると思います。

LV1からLV2

LV2からTENSION LV3

TENSION LV3からTENSION LV4からTENSION LV5

TENSION LV5からLV5(緊張からの開放)

ここで注目して頂きたいのは、この変化が単なる「盛り上がり」という一直線の変化ではなく、緊張状態(TENSION)からの解放、というゲーム的にも音楽的にも意味のある変化が生み出されている点です。

緊張からの解放

「スコア」というのは一直線にしか上がっていかない数値です。しかしこのゲームは単にスコアを積み上げるだけではなく、その前に「大量スコアを狙うための大きなブロックの塊を崩さないように慎重に作っていく」という事前準備によって「緊張状態」が生まれることが醍醐味となっています。

そこで「潜在スコア」という数値を利用して音楽を変化させています。

潜在スコアとは、「今繋がっている中で最も大きい塊のブロックを消した時に得られるスコア」のことで、これと音楽を対応させることで、プレイヤーが感じている「今すごくいい感じにブロックを繋げられている」という緊張感を表現する(あるいは、気づいていないプレイヤーにも「今あなたはこのゲームをうまくプレイできている」という事を音楽から気づかせる)ことができます。

86ブロック繋いで(86-2)^2=7056点を一気に叩き出すとこうなります。

あとはこの「潜在スコア」と「現在スコア」の2つの値から音階を決定します。ロジックとしては「潜在スコア閾値」と「現在スコア閾値」を両方とも持った「音楽レベル」を定義しておいて、それを順に見ていって最初に条件を満たしたレベルを採用する、といった形です。

こうすることで、徐々に潜在スコアを稼いでいって一気に現在スコアに変換するというゲーム展開が、音楽的な緊張と解放で表現されます。

音楽レベルにはフレーズで使う音階テーブルの他に、ドラムトラックとベーストラックも同時に定義されています。このとき、音階テーブルは一定なのに対して、ベースのみが4小節に1音ずつ変化しており、これだけでコードの進行感を出しています。

ベースしか変化していないけど雰囲気が変わる

これも音楽をやっている方にとっては常識的な話ではありますが、和音ってベースの音が変わるだけで全然違った響きになるんですよね。

ベースという楽器は目立たないと思っている方も、こういった形で和音の印象に根底から影響を与えている楽器だと知ると興味が湧くのではないでしょうか。低音がまともに聴こえない環境の方はこれを期に低音もちゃんと聴こえるヘッドホンやスピーカーをお求めいただくというのはいかがでしょうか??絶対違いますよ!

というわけで、このゲームは毎回全然違ったフレーズが生成されながらも、スコアアタックをすると同じコード進行をたどるので、以下の動画のように「複数のリプレイ映像を一つのミュージックビデオとして繋げる」ような芸当ができたりします。

このゲームを渋谷PARCOのイベントで展示していた際に、会場でプレイしていただいた600名以上のプレイヤーの履歴から生成されたMVです

ゲームの持つ音楽的な構造

このようにゲームの持つ緊張と解放の流れを表現するのは、マインスイーパーのシステムでは不可能だったので、今回できて良かったです。

他のパズルゲームで考えても、潜在スコアを溜めて一気に解放するというシステムは珍しく、テトリスに代表されるようにブロックが積み上がって追い詰められる系のパズルでは、解放されるには粘って粘って状況を改善していくしかない、という感じで解放の瞬間を作り出すのが難しそうです(だからこそ、テトリスエフェクトは「途中でSPEED LVを下げる」というシステムを追加導入することでこれを解決していたのでした)。

ゲームプレイを音楽として再解釈しようとした際に、それはどんなゲームにも同様にできるものではなく、ゲームが本来持っている流れに強く制限されます。

ゲームシステムから音楽に変換しやすいパラメータを見つける、
あるいは音楽のためにパラメータをデザインする。

こういった流れを無視して何でも音楽に結びつけようとすると、音楽が何を表しているのかが不明瞭になり音楽としての体裁を維持するのが難しくなり、意味がなくなります。そういう失敗をしているゲームをたくさん見ましたし、自分で実験しててもそういう失敗はあります。

これはGenerative Musicに限らずInteractive Musicの設計でも重要な視点ですが、「音楽は同時に一つのことしか表せない」という意識が必要です。

音楽がいくら多層的であっても、プレイヤーに伝えることができる印象はその音楽全体によって一つに定まります。これを奪い合うパラメータを不用意に増やすべきではなく、そのため、「このゲームではどのパラメータをプレイヤーが最も気にかけているのか?」を把握して、もっとも重要なものに音楽が対応するように設計すべき、と考えています。

それを見出した後は、その重要な変化が

  • 一方通行で変化するのか、もとに戻るのか?
    (もとに戻ることがあると音楽の遷移が作りづらい)

  • 必ず変化するのか、変化しないこともあるのか?
    (変化する前提のほうが変化前をシンプルにしておける)

  • 一気に変化するのか、徐々に変化するのか?
    (一気に変化したほうが大きな変化が作れる)

  • どれくらいの時間同じ状態が維持されるのか?
    (状態が一定以上維持されないと音楽を聴いてもらえない)

といった特徴を観察しながら、それに合うような音楽を想像して作ることになります。

あるいは、そもそも私は音楽変化させる前提でゲームを作っているので、「重要なパラメータが音楽的に制御しやすいように変化するか?」を目安に作るゲームのシステムを選んだりデザインしています。

そのゲームが音楽的かどうか

あるゲームを音楽として再解釈し、ゲームプレイから音楽を生成するためには、「音楽的な情報量」を持つパラメータをいい感じに取り出して、「音楽的な構造」を持つ展開をいい感じに見出す必要があります。

まとめると結局それはセンスなのでは?という気がしてきてしまってもどかしいですが、センスというのも試行錯誤の結果でしかないので、試行錯誤したら見つかるかもしれません。Same Gameも最初のプロトタイプがひどかったのはお見せした通りなので……

もちろん今回紹介した手法はほんの一例で、マインスイーパーもSame Gameも細かいリズムで気持ちよくなるという方向性は同じなので、この方法だと音楽が似通ってきてしまいます。もっと別の「コード進行に対応させたら面白いパラメータ」とか「メロディに対応させたら面白いパラメータ」はまた違った性質のゲームから見いだせるかもしれません。

私はやっぱりドラム・パーカッション奏者だったのでリズム重視になりがちです。音楽の形式なんてまだまだ沢山あります。何でもAメロBメロサビがなければ音楽じゃないなんてことは全くないわけです。

例として、「ゼルダの伝説 風のタクト」の通常戦闘曲のメロディがプレイヤーの剣戟に応じて生成されていることを解説した「Ludo-Musica II」の記事をリンクしておきます。

未開拓の魅力がたくさんある領域だと思うので、新たに挑戦したことや実はこんな面白いGenerative Musicのゲームが……というのがあれば是非教えてください!

「良い音楽」とは何か?

「Same Game, Different Music」を渋谷PARCOに展示した際に(って、この記事では言ってませんでしたよね。実はこのゲームは展示用に制作されたんです)、DOMMUNEという番組に少し出させていただいたのですが、ゲームの説明として「プレイするだけで良い感じの音楽が~」と申し上げたところで司会の宇川さんから「良い音楽、っていうのも難しいよね」という大変鋭いテーマが投げかけられました。

私の答えは、「このゲームにおいて良い音楽というのは、ゲームを上手くプレイできていることを確信させる機能を持った音楽である」ということです。むしろ、「ゲームが上手く行っている感覚のほうが、音楽の良さを規定している」とも考えられます。

自分の作品だから言いますが、単純なドラムにランダムなバッキングを重ねただけで、「この程度のものが音楽なのか?」という見方もできます。このゲームを通じて完成された音楽を、ゲームを知らない他人に聞かせたところで、何にも面白くないのは私自身もよくわかっています。

では、このゲームの音楽は面白くないのかというと、そんなことはないはずです。それは、「不完全な音楽が自分のプレイによって完成されていく」という体験が面白いからです。

「ゲーム」と「音楽」はそれぞれで別々の価値があって足し算されるものではなく、「ゲームという媒体によって自分が音楽と関わること」という価値があるわけです。

Same Game, Different Musicの場合は、1音ずつのフレーズが自分のプレイから生み出されることで細かなフレーズ1つへの関わりの深さを生み、さらに、スコアアタックによってコード進行が変化することで音楽全体の展開に対しても関わりの深さが生まれています。その結果、単純な4小節ループの音楽もプレイヤーにとって大切なものになるわけです。

ゲームならではの価値

ゲームならではの面白さは、音楽に限らず物語などでもそうした「関わりの深さ」が魅力になっています。ゲームの物語で感動したといってもテキストや映像作品化してそのまま面白いかというとそうではなくて、「自分がやった」という実感を伴うからこそ世界との繋がりが生まれて感動できます。

音楽じゃなくて物語における「関わりの深さ」について参考になる記事↑

私が目指しているのは、単体で聴いて良い音楽を作ることではなく、ゲームという表現手法でしかできない「関わりの深い音楽」を作ることなんだと思います。

音楽プログラミングのためのライブラリとTIPS

最後に、実際作ってみようかなと興味を持っていただいた方向けに具体的なライブラリの紹介とTIPSを載せておきます。

音楽のタイミングに合わせていろんなものを駆動する仕組みは、自作のMusicEngineを使っています。Githubで公開しているのでどうぞ。

最初は音楽に合わせる機能だけだったんですが、最近アップデートしてこれ単体でもインタラクティブミュージックの縦・横の遷移がどちらもできるようになりました。

サポートはお約束できませんが、手軽にかなり高級な音楽演出ができるので、小さいゲームを実験する時などにどうぞ。

本作でもMusic.IsJustChangedのタイミングを使って色んな音を鳴らしています。分解能はフレームレートに依存してしまいますが、最適化できればなんとかなります。

Same Game, Different Musicの実際のフレーズ再生コード

Chord/Note/Instrumentみたいな独自クラスがありますが、ここらへんは流石に自分以外がまともに使えると思えない独自設計なのでMusicEngineには含めていません……音程を表すクラスと、それを再生するクラスというだけなので、好きなように作ってください。

停止時間の予約は以下のようなUnityのAPIを使っています。SetScheduledStartTime/SetScheduledEndTimeを使えば、かなりの精度でサウンドの同期再生ができます。

停止タイミングを指定

音程の変更は普通にpitchをいじっていますが、例えばドの音を1個だけ用意すると1オクターブ(pitch=2.0)を超えたあたりで音質的にも(多分API的にも)限界が来るので、適度な音階ごとに別のAudioClipを用意しています。ドとソ、オクターブ上のドとソ、みたいな感じで用意しておいて、あとは一番近い音を見つけてピッチシフトして鳴らす感じです。昔からわりとよくある手法です。

用意した音程の中で近いものからピッチシフトする

意外とこういう単純なことのほうが、最初に手を出すときは「普通どうやってるんだ??」と疑問になるところだったりしますからね。

というわけで、自分の考えとかライブラリとかサンプルコードも含めて洗いざらい公開しましたが、改めてこれ本当に誰かの役に立つんだろうか……?

結局こういうのって発表することで自分の頭が整理されることが目的だったりして、その意味では良かった気がするけど、こんな事他に誰かやるのか、いや、これでやる人が増えるかもしれないし……

最後に、今作っているゲームの宣伝を置いておきます。

サポートいただけたら、連載への励みになります!