「Divinuet」のインタラクティブミュージックシステム パート 1

インタラクティブミュージック

私が初めてつくったゲーム inter-view は、ちょうど映画向けの作曲からゲーム向けの作曲に方向転換しようとしているときに、インタラクティブミュージックの作曲やWwiseを使った実装ができることを、潜在的なお客様に見せるためでした。そこで、実はインタラクティブミュージックに焦点をあてたゲームをつくる過程がとても楽しいことを発見して、もう1つ、つくろうと思ったのです。それが「Divinuet」です。

「Divinuet」はPCとMac向けのゲームで、タロット占いをもとにしたユニークな音楽体験が生み出されます。タロット占いをよく知らない方は、 この記事 が分かりやすくまとめています。タイトルの「Divinuet」はdivination(予言)とminuet(メヌエット)を組み合わせた「かばん語」で、私の賢い友人M Gewehrがつけてくれました。

DivinuetImage2

このゲームは2つのフェーズに分かれていて、Reading(読み上げ)フェーズではタロットカードをシャッフルして並べてめくるところまで進み、Generative(生成)フェーズでは出てきたカードの組み合わせや順番に合わせて独自の音楽やアートが生み出されます。今回のブログでは、Readingフェーズで再生される音楽に注目します。というのも、まだGenerativeフェーズの音楽システムの詳細をつめている最中であることと、すべてを詰め込もうとすると、とんでもなく長い記事になってしまうからです。近々、Generativeフェーズの音楽に焦点を当てた続編を書く予定です!

音楽

Readingフェーズで、3枚のカードが伏せて並べられます。カードを返していくとそのカードの意味が一枚ずつ解明されて、専用の音楽テーマがしばらく流れます(約45秒)。78枚あるので、78回分の作曲です!

Divinuet1

では、カードを配っている最中や、次のカードを返すまでの間は?カードごとの音楽テーマが演奏される間に沈黙が入ると、息が途絶えたようになってしまうので、合間にも音楽を再生することが肝心です。でも、78種類あるカード用の音楽テーマのうち、次にどのテーマが演奏されるかもわからないままに、はたしてどうやって滑らかに次へとつながる間奏曲を作曲できるのか?

単刀直入な解決策はカードのテーマ音楽を全て同じキーにすることで、そうすれば間奏の音楽も同じキーにできます。でも、それは避けたいと思いました。なんとなく、それだとプレイヤーにとって単調で地味になる気がして、カードが表す様々な概念や感情を引き出せないと思い、しかも同じキーの楽曲を自分で78個以上もつくるのは、泣くほど退屈するだろうと思いました。結局、これまでもインタラクティブミュージックを作曲するときによく採用した、音符が一部同じで、キーが異なるというやり方に落ち着きました。例外はあるものの(後ほど説明します)、ほとんどのカードのテーマ音楽はBbとEbで、長調、短調、ドリア旋法など、なんでもありです。

話を間奏曲に戻すと、色々あるキーに、スムーズに入り込まないといけないのは知っていました。また、短調にも長調にも偏らないようにしたいと思ったのですが、タロット占いの内容には様々な雰囲気があり、間奏曲の印象が、タロットカードの印象と衝突してほしくなかったのです。そこでカードのテーマ音楽に一番多く使うであろう4つのキー、つまりBb major、Bb minor、Eb major、Eb minorを見て、どの音符が共通するのかを調べました。それはBb、C、Eb、Fでした。結果的に、間奏曲に使うのはこれだけにしました。

間奏の音楽は縦型と横型の作曲アプローチを組み合わせています。縦方向を見ると、音楽がLow、Middle、Highの3つのレイヤで構成されています。シンプルな、1小節分の無限に繰り返されるピアノのフレーズであるMiddleレイヤが中心となり全体が構成され、MiddleレイヤはBbとFの四分音符が2つ、続いてBbとEbの四分音符が2つとなっています。

InterludeMidPianoMusic

 

もちろん、これだけを聴いてもただつまらないだけで、LowとHighのレイヤが加わることで面白くなるのです。ここが横方向の作曲アプローチの出番です。Bb、C、Eb、Fだけを使った一小節分の短いフレーズを、色々な楽器向けに作曲しました。そのいくつかを、ここで紹介します(シンプルにするためにバスクラリネットをコンサートピッチで書いています)。

 

InterludeHighViolinMusic

 

InterludeHighFluteMusic

 

InterludeLowBassClarinetMusic

 

InterludeLowPianoMusic

 

 

ループの長さはたった1小節なので、再生される音楽の1小節ごとに、Highレイヤのパートが1つ、Lowレイヤのパートが1つ、ランダムに再生されます。Wwiseで見ると、こうなります:

InterludeSegmentEditorScreenshot

 

すべてのレイヤが1つのミュージックセグメント上にあり、High、Middle、Lowのトラックが同時に再生されます。Middleトラックは先ほどの単純なピアノのパートで、毎回、必ず再生されます。一方、HighトラックとLowトラックはランダムなステップトラックで、中には複数のサブトラックが入っています。 どちらのトラックも空のサブトラックが1つ入っているので、ループ再生のときにHighやLowのパートが一方、または両方、再生されない可能性があるので、少し面白くしてくれます。

HighパートやLowパートが1小節分だけ演奏されて止まってしまうと、パートによってはやや唐突過ぎると感じられる、という問題が発生しました。そこで、そのパートの最後に余分な音符を1つ追加して、それを次の小節の最初の拍子で再生し、Wwiseではポストエグジットとしてプログラミングしました。

InterludeHighViolinMusicWithEndingNote

InterludeHighViolinWaveform


全部合わせて聞くと、このようになります!見ると、ミュージックプレイリストコンテナに実は2つのミュージックセグメントが入っているのが分かりますが、最初にIntroが1度だけ再生され、次にメインのInterlude(間奏曲)が永遠にループされます。Introには1小節のMiddleレイヤのピアノパートだけなので、間奏は必ずこのピアノの独奏でスタートし、次の小節から追加のレイヤが入ってきます。デモを聞くと、上に紹介したピアノ、バスクラリネット、バイオリン、フルートの各パートと、ほかのパートが、一緒に再生されています。

さて、間奏からカードの音楽へと進むときに、真ん中のピアノのレイヤが突然途切れてしまった場合に急にまとまりがなくなるのは、前述の問題と同じでした。このため、ミュージッククリップの最初の小節に必ずBbとF、またはBbとEbのピアノが入るようにして、それでピアノ部分の終わりを表現しました。次の2つのオーディオクリップは、どちらも間奏曲から「High Priestess」(女教皇)カードのテーマ音楽に移行するものですが、1つ目は追加のピアノの一音がなく、2つ目はあるので、聞き比べてみてください。

 

この追加の一音を、最初はWwiseのプログラミングで設定するつもりでしたが、結局、カードのテーマのオーディオファイルに、ピアノの音符をベイクして入れる方が簡単だと気付きました。追加の音符を入れながら気付いたのは、EbとBb以外のキーにも広げられるということで、最初のコードの音符にBbとF、またはBbとEbが入っていれば、うまくつながりました。例えば「Ace of Cups」(カップのエース)カードのテーマをフランス印象派のようにしたくて、ハ短調の第7和音で始めていますが、それはC、 Eb、G、Bbで成り立っています。

 

そうすると、このようになりました!この動画に出てくるReading部分はゲームのプロトタイプからとった部分なので、まだとても粗いです。完成品には、もっとたくさんの絵柄などが入ります。動画の冒頭にちょっと聞こえるのはシンセパッドですが、これはゲームのステート間のトランジションに使っています。

 

聞いて分かるとおり、カードのテーマ音楽が再生されたあと、すぐに間奏曲に戻ります。私の友達が、間に何らかの音楽を足して、内容をもっと読み込みたい人が時間をとれるようにしては、と提案してくれました。このアイディアがとても気に入ったので、おそらくカードのスートに合わせて変わるシンプルで夢のようなシンセパッドのサウンドスケープを、なにか考えると思います。

実装

音楽システムが完成したら、次に、どうやってゲームで実際に使えるようにするのかを考えました。今回はReading部分だけに焦点をあてて説明するので、ゲームステートが切り替わるときの仕組みなど、Reading以外については触れません。

まず最初に、Reading中に随時、どの音楽を再生するのかを決めるStateグループを設定しました。このグループには、各カードのステートが1つずつと、間奏用のステートが1つ入ります。今のところカード10枚分の音楽しか用意できていませんが、最終的には78枚すべての音楽が入る予定です。 

DuringReadingStateGroup

 

Readingミュージックを整理してスイッチコンテナに入れ、プレイリストコンテナを、カードのテーマごとに1つずつ、そして間奏用に1つ、設定しました。次にプレイリストコンテナを、それぞれのステートに関連付けました。

ReadingSwitchContainer

 

ReadingStateAssociation

 

Wwiseで最後に行ったのは、イベントの作成です。Reading段階では必ず最初に間奏が再生されるので、一番最初にトリガーされるイベントは、DuringReadingのステートをInterludeに設定するものです(同時に音楽のPlayを押す役割もありますが、これは一次的なもので、最終的なゲームでは最初にメインメニューがあってその音楽が再生されます)。それ以外のイベントは、カードの内容を表示したときのものです。カードがめくられたときに、イベントがステートをすぐにカードに一致させ、5秒のディレイ後に、ステートを再びInterludeに戻します。

KingOfCupsEvent

 

私は、Readingミュージックのトランジション方法について、ステートが変わってもすぐに新ステートと一致するミュージックプレイリストに切り替えるのではなく、再生中のミュージックセグメントのエグジットキューに到達してから切り替えるようにしました。エグジットキューは音楽ピースの一番最後(エグジット後に再生されるリバーブテイルを抜いた部分の最後)に設定しました。つまり5秒経てば、ステートは変わりますが、再生される音楽自体が間奏曲に戻るのは、今の音楽ピースが終わってからです。

ReadingTransition

Unityで、プログラマーである友人の ソル・ルッツェ(Sol Lutze)がゲームのベースをつくり、なんだか魔術師のようなことをしてくれたので、私は簡単に各カードのScriptable Objectをつくれました。Scriptable Objectとは、カードごとにゲームオブジェクトをつくる(つまり大量のメモリを使う)代わりに、タロットカードを真っ白なキャンバスのように扱い、データをScriptable Objectの1つから引っ張ってくる方法です。Scriptable Objectに、カードのSuit(スート)、絵柄として使う画像、表示するカードの意味、などが入っていますが、今ここで見て欲しいデータフィールドは、私が追加したmusicEventというものです。

AceOfCupsScriptableObject

これが実際のスクリプトです。今回の目的に重要な2箇所に、まるをつけました。

TarotCardDataScript

using AK; で、AudioKineticコードを使うことをスクリプトに知らせ、public AK.Wwise.Event musicEvent; で、スクリプトに「メーガンが自分でWwiseで作成した、各Scriptable Objectに関連付けるイベントを選ぶよ」と伝えます。

これで、UnityのScriptable ObjectにあるMusic Eventをクリックすると、Wwiseイベントが表示されるので、そこから選択できます。

Divinuet2

ゲーム側が、いつカードの音楽を再生するのかを知るのは、ほとんどがソルの魔法のおかげで、たくさんのゲームステートを設定してもらいました(カードを配ったりめくったりしたことを検知できるように)。今、特に大事なのはReadingCardというステートで、カードの意味を表示しているときのステートです。このゲームステートのときに、ReadCardという関数が呼ばれます。私は関数にコードを1行追加して、読まれているカードに関連づけられたイベントが、ポストされるようにしました。(ちなみに、これはScriptable Object用に使うスクリプトとは別のスクリプトです。)

MusicEventPost

結局このコードが言わんとしているのは、「カードのデータの中で、メーガンが musicEventというWwiseイベントを選んだでしょ?そのイベントをね、今すぐ起動して」ということです。すると、WwiseのDuringReadingステートが、表示中のカードに関連付けられたステートに切り替わり、音楽も間奏の音楽からカードのテーマ音楽に切り替わります。そして、イベント作成の説明でも触れた通り、WwiseのDuringReadingステートがInterludeに戻り、カードのテーマ音楽の終わりまでくると、Interlude音楽の再生が始まります。このため、カード音楽が終わったときにInterlude音楽を再生させるための別イベントを設ける必要がありません。

先ほどのゲームプレイの動画をもう一度見ると、説明した内容を実際に耳と目で確かめることができます!

ソルの作業内容を「魔術」と形容したあたりから、私がプロのプログラマーではないことが分かったと思います。プログラミングコースを受けたことはありません。それでもインターネットに無料の情報源がたっぷりあるので、自分でC#のプログラミング関係のことを勉強できました(そして、ソルをせっついて、さらに教えてもらいました)。Unityのウェブサイトには、特に素晴らしいC#のチュートリアルがあります。プログラミングに興味のある方は、ネットで色々と検索して、無料リソースを活用することをお勧めします。

以上が、「Divinuet」の占い部分、つまりReadingフェーズの音楽のためにやってきた作業です。これからゲームをつくり終わるまでに全く違う展開となるかもしれませんが、これまでのところの成果にとても満足しています。

オーディオの開発者で、自分のゲームをつくりたいと思っている方がいれば、ぜひお勧めします!日々の仕事に制限されずに別の方面でも創造力を発揮できるのは気持ちの良いもので、副業的なプロジェクトの存在は本当に楽しく、ワクワクします。UnityもUnrealもタダで使えますし、どちらも無料のオンラインチュートリアルが豊富にあるので、始めやすいと思います。

ここでちょっと自己PRをさせてください。Divinuetは、Indiegogoで資金調達中です(自分一人でお金をかけずにやろうと思えばできるのですが、手伝ってくれる人を雇えれば、よりスムーズに、より良いゲームをつくれると思うのです)。このゲームに興味のある方は、ぜひキャンペーン内容を こちらでチェックしてみてください!

メーガン・カーンズ(MEGAN CARNES)

コンポーザー、ゲームデベロッパー

メーガン・カーンズ(MEGAN CARNES)

コンポーザー、ゲームデベロッパー

ロサンゼルス拠点のコンポーザー、ゲームデベロッパー。特にインタラクティブでジェネレイティブな音楽に興味を持ち、音楽ベースのゲーム「inter-view」や「Divinuet」を制作。また、インディーズの2D Platformerゲーム「A Crooked Heart」の音楽を担当予定。Game Audio LAの共同主催者。

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

ミストラリアの不思議でダイナミックなサウンドスケープができるまで

ミストラリアの魔術師(Mages of Mystralia)は、主人公のZiaがSpellcraftの魔法を習得していく明るくてカラフルなアクションアドベンチャーゲームです。私はBorealys...

7.4.2020 - 作者 アントワン・バション(ANTOINE VACHON)

単なる音楽だけでないゲーム音楽を目指して パート1

17.6.2021 - 作者 オリヴィエ・ドリヴィエール(OLIVIER DERIVIÈRE)

ミュージックデザインのテンプレート Wwiseを使って先陣を切る

Foxface Rabbitfishのコンポーザーでありオーディオディレクターでもあるガイ・ウィットモア氏(Guy Whitmore)は、2019年のWwise Interactive Music...

30.6.2021 - 作者 ガイ・ウィットモア(GUY WHITMORE)

日常生活のなかで、Wwiseでインタラクティブミュージックをつくってみる

3.11.2021 - 作者 レッサ・シュバルツバルト(Ressa Schwarzwald)

WwiseとUnityでオーディオリアクティブなオブジェクトを作る方法

今回はWwiseのRTPCを使ってUnity内のゲームオブジェクトを動かす方法と、オーディオドリブン – Audio...

3.8.2022 - 作者 廣木 智一(TOMOKAZU HIROKI)

WwiseとUnityでジェネレーティブミュージックアルバムの作曲と演奏を行う

イントロ ...

12.7.2023 - 作者 カイオ・M・ジャコミニ

ほかの記事

ミストラリアの不思議でダイナミックなサウンドスケープができるまで

ミストラリアの魔術師(Mages of Mystralia)は、主人公のZiaがSpellcraftの魔法を習得していく明るくてカラフルなアクションアドベンチャーゲームです。私はBorealys...

単なる音楽だけでないゲーム音楽を目指して パート1

ミュージックデザインのテンプレート Wwiseを使って先陣を切る

Foxface Rabbitfishのコンポーザーでありオーディオディレクターでもあるガイ・ウィットモア氏(Guy Whitmore)は、2019年のWwise Interactive Music...