スーパーファミコンの自作ゲーム用の音楽の書法を探る・後編


いろいろと制約がある中で、実機用の自作ゲームに組み込む譜面データを作っていこうという話の続きです。独自の開発環境でやっているので、前編を読んでいない方は、先に下記のリンクの記事からお読みください。


4.今ある機能の中で工夫して作ろう

聞いた話によると、既製品のゲームソフトでは、8トラック(同時発音数8)の仕様に対してリアルタイムに音楽や効果音のシーケンスを割り当てて、そのハードウェアが持つリソースを余すことなく活用するといった高機能なサウンドドライバが実装されているものがあるらしいのですが、Taco(仮)のプロジェクトではPA Gamesさんがゲーム開発の片手間で開発されているサウンドドライバであるため、このような特殊な機能はありません。

前編で紹介した作例です。今回もこれを題材にします。

このため作曲者側の自助努力として、トラックに発生する休符(空き時間)を利用したい場合は、あらかじめ効率的に発音されるように譜面を打ち込んでデータ化しています。具体的には作曲やアレンジの段階で、複数のフレーズやリズムを1音単位で効率良く1トラックに集約できる構造にした上で、MMLというテキストファイルの譜面にする段階で、細かく音色を切り替えるごとにベロシティやパンポットなどの命令を手打ちで挿入しています。

また、前編で述べたようにサウンドチップ内蔵のエフェクトの機能は使えないため、残響を表現したい場合は、音色データのループフラグの位置とエンベロープ(ADSR)のリリースの値の調整で、音が反響しながら減衰していく様子を表現したり、擬似ディレイの技法を使って譜面でエフェクトを書くことで補っています。


5.効率的に発音される譜面を書く

どのように1トラックの利用効率を上げるのでしょうか。ここでは前回に引き続きTaco(仮)の「お店のBGM」の譜面データを題材にします。最終的に譜面はテキストデータとして記述するのですが、これでは視覚的にフレーズの音型が分かりづらいので、Logic Pro Xのピアノロール画面を掲載します。本来、このDAWではベロシティの値によって音符に色が着くというUIになっているのですが、ここでは解説用として音色別に色分けをしているだけなので、それは無視してください。

トラック 6 のドラムキットの譜面の一部分。
マラカス(赤)コンガ(青・緑)
トラック 5 ではキック音(青)の間に、スティールパン(赤)の旋律を挿入。緑は擬似ディレイ音

さて、譜面の空き時間を活用して、音楽を豊かにできる手段を見つけたのはよいものの、楽曲全体を自然に聞かせるためには特殊なアレンジが必要になってきました。今回の例だと、キックを鳴らしているトラックに発生する空き時間では、裏拍を活用したフレーズが書けそうな予感はしてきます。楽曲によってはキックも1トラックのドラムキットに含めることも可能ですが、やはりキックと同時に鳴らしたい金物やパーカッションは出てくることが多いので、キックが鳴っていない時間を活用するこの方法は有効かと思います。

とまあ、このような感じで譜面の密度を上げていきます。細かいところを見ただけでは実感が湧かないと思うので、下記に楽曲全体の画像を掲載しておきます。

音色ごとにトラックを分けつつ、組み合わせの目星を付けながらアレンジして……
音符が重ならないように6トラックまでフレーズを集約する

PA GamesさんはqSPCというコンパイラを開発しており、ざっくりいうと、これに音色データと譜面データを渡せば、ゲームに組み込める音楽や効果音のデータが生成されます。ただし譜面データはSMF(MIDIファイル)ではなく、テキスト形式で譜面を記述するMMLというファイルが必要になるのです。

そうです、さすがに1つのトラックの中で不定形なフレーズが並走するような譜面をテキストで直打ちしながら作曲するのは非効率なので、あらかじめDAWのMIDIシーケンス画面で楽曲全体の設計図を作るイメージで音符を打ち込んでいるということなのです。

このとき、打ち込んだ譜面と自作の音色データを組み合わせたときの音色のキャラクター性を確認するために、DAWのプラグインとしてPPSE部さんのC700というツールを活用させてもらっています。もう何度も実機用のデータを作っているのでこれだけは言えるのですが、設定さえ間違えなければ、C700から出力される音はSFC実機用のゲームに組み込んで鳴らしたときの音と、ほぼ同等という印象なので安心してモックアップを作ることができます。


6.譜面をテキストデータとして記述する

6トラックまで譜面を集約するというアレンジができたら、一仕事終わった感じがあるのですが、実はここからが大変です。1つのトラックで音色切り替えを頻繁に行って譜面の密度を上げると、テキスト形式のMMLとして打ち込む時にベロシティ、パンポットの情報は音色を切り替えるたびに固有の値を正確に挿入しなければならないという苦行が待っています。あれ、なんか僕が知ってるファミコンのMMLと違う……

ちなみに余談として、SMFの音符の高さと長さのデータを正確かつ分かりやすくMMLに変換してくれるツールとしておすすめなのが、ごちゃさんとloveemuさんという方が開発された「PetiteMM」というツールです。音符が重ならないように譜面を打ち込んだり、クオンタイズをかけたりと、あらかじめグリッドに沿ったSMFを作っておけば、これで変換した後のMMLで音ズレが発生することはまずないです。

しかし、SMFを自動で汎用的なMMLに変換してくれるツールを使ったとしても、テンポや音の高さや長さだけなので、それ以外の命令は以下の動画のように全て手打ちになります。

5トラック目にキックとスティールパンの不定形なメロディと擬似ディレイを記述している

はい、このようにありのままに作ると見事にぐちゃぐちゃになるので、譜面データの節約の観点からも、個人的には音色切り替えを多用するトラックは2,3トラックまでにしておくのが合理的かなといった印象です。お店のBGMでこれをやっているのは5トラックと6トラックの2つなのですが、6トラック目のドラムキットのリズムパターンが一定で、基本的にループさせているだけなので少ない譜面データで済んでいます。

本来のMMLの書法を知っている方ならご存知かと思いますが、フレーズやコード進行の繰り返しを多用したり、楽曲構造的にマクロでまとめられるような音楽を作曲すれば、スマートなスコアデータを書くことができると思います。これは表現したい楽曲次第なんですが、ファミコンを楽器にしている人たちが書くような、プログラムのようにスマートなMMLもそのうち書いてみたいですね。


以上、譜面から音の密度を上げるというアプローチのお話でした。この方法で作られた音楽データは既にSFC実機で動作する自作ゲームに組み込まれており、2018年11月4日(日曜日)に秋葉原UDXで開催されるデジゲー博2018のE-11aのスペース「PA Games」にて、実際にゲームを試遊することができます。当日は僕も会場にいますので、ぜひ気軽に遊びに来てください。

アニマトーンはPA Gamesを応援しています。詳しくは公式サイトをチェック!