ゲームミュージックのための

MMLプログラミング入門

(その3)



一歩差をつけるテクニックがこれだ

・厚みのあるサウンドをつくるワザ
パソコンの内蔵音源で曲を作る場合、いつも問題になるのは、いかに厚みのあるサウンドを作るかという点だね。内蔵音源で曲をプレイする場合には、YM2203タイプで最大6声、YM2608タイプで最大9声+リズムですべてを演奏する必要がある。だから、MIDIをつかったシンセのアンサンブルのように、和音を使ったアレンジをやろうにも限界がある。したがって、単音のメロディーだけでも充分聞きごたえのある厚みのある音色を作らなくてはいけないんだ。
内蔵音源のFM音源は、ヤマハのシンセEOSなどとほぼ同じような音色合成が可能なので、かなり厚みのある音色を作ることもできる。しかし、4オペレータ方式なので、同じFM音源といっても6オペレータ方式をとっているDX-7やSY-77といったシンセの音色と比べると、どうしても線か細い感じは否めない。そこで、実際のデータ作りではいろいろなワザを駆使して厚みのあるサウンドにしている。
まず、いちばん基本的なテクニックは、"M"コマンドを使い、LFOで音色にビブラートをかけることだ。実際の楽器でも、キレイに聞かせるためにはビブラートのテクニックが欠かせない。当然、内蔵音源でも重要になる。ビブラート奏法のカギは、短い音符ではかけず、長く延ばしたロングトーンの音符にだけかけるところにある。このためには、"M"コマンドの第一パラメータの設定を使い、その曲のスピードでだいたい4分音符一つ分ぐらい音をのばしてから、LFOがかかりはじめるようにするといい。また、ビブラートのスピードも、あまり速すぎるとせせこましくなってしまうので、その曲の8分音符が1周期になるぐらいに設定するといいだろう。
さて、ビブラートで間をもたせることはできても、音そのものが厚くなるわけではない。厚みのあるサウンド作りの基本は、「音を重ねる」ことにある。音を重ねるといっても、FMチャンネルを2チャンネル重ねてしまったのでは、後々のサウンド作りに支障がある。そこでFM音源にSSG音源を重ねることで、うまく重厚なサウンドを作らなくてはならない。ところが、FM音源のサウンドと、SSGのサウンドとは、そのままユニゾンさせたのでは、いかに近い音色をつくってもウマく混ざってくれない。それどころか、かえって安っぽいサウンドになってしまう。そこで、単に2つの音色を鳴らすのではなく、SSG音源側を「エフェクタ」として使い、サウンドに工夫するコトになる。そのために活躍するのがデチューンコマンド"D"だ。
メロディーをユニゾンさせるとき、SSG側も比較的近い音色に設定した上で、デチューンをかけるのである。すると、音色がウマく混ざりあうと共に、デチューンによりコーラス効果が発生し、音にも厚みが加わる。デチューンの幅は、あまり広げすぎると音が分離してしまうので、音色にもよるが5〜20の間ぐらいがいいだろう。また、デチューンをかける側は、"D-10"などマイナスのデータほうがいいようだ。この場合、FM側とSSG側の音量のバランスが重要で、デチューンをかけた側がちょっと小さいかなというぐらいの音量に収めるのがいい結果を生む。ちょうど次の例のような具合になる。

A v15l8 g2cdec d4ded2 c2>aba b4bb2
D v12l8 D-5 g2cdec d4ded2 c2>aba b4bb2

このコーラス効果は、どちらかというとロングトーンが多くでてくるメロディーの場合に効果がある。これに対し、短い音符の多い、パーカッシブなメロディーに厚みをつけるのに役立つのがディレイ効果だ。これは、いわゆる「エコー」をつけるものである。やり方は特別なコマンドを使うことなく、SSG側の演奏を短い休符をはさんで送らせるだけでいい。すなわち、

A v15l8 ededede16g16&g c>bbb D v13l8 r64ededede16g16&g c>bbb
という感じになる。もちろん、SSG側のチャンネルを2つ、3つと使うことで、さらにサウンドを重厚にすることもできる。
これらのテクニックは、もちろん併用可能なので、デチューン+ディレイ、ビブラート+デチューンというように組み合せることでさらに凝った演奏も可能だ。

・MUSIC LALFならではのマクロを活用しよう
前回も書いたけれど、コンピュータプログラムを書くときには「読みやすく書く」というのが、デバッグのしやすさや、あとからの修正しやすさを考えてなによりもまず大切なことだ。それに、読みやすいプログラムは書くときにも間違いを起こしにくいので、一見手間がかかるようでも、けっきょくはいちばん近道になっているということも多い。一度ドツボにはまって地獄を見たことのあるヒトなら、これは身にしみて感じたことがあることじゃないかな。
そこで、プログラミングの分野では、「構造化」というのが常識化している。これはプログラムを書くときに、思い付くままにだらだらと各ルーチンを記述してゆくのではなく、プログラムを機能ごとのモジュールに分け、それぞれのモジュールを独立したものとして記述するとともに、プログラム全体の機能を記述する時には、それぞれのモジュールの組み合せとして書いてゆくというやり方だ。プログラムを作らないヒトには、ちょっとわかりにくいかもしれないが、こうすることで、たとえば画面表示のところを改良しようと思えば、そのモジュールだけ手直しすれば、他の部分に触れずに修正することも可能だし、デバッグなども各モジュールごとにできるから、グッと手間が省ける。また、一度書いたモジュールは、メインプログラムからは独立しているので、別のプログラムを作るときにも利用しやすいなど、まさにいいことづくめだ。
MUSIC LALFのようなMMLプログラムでは、音楽を演奏させるプログラムであるという性質上、時間と共にいろいろな制御を順を追って記述しなくてはならない。だから、こういう「構造化」を完全に行うのは難しいけれど、マクロ機能を使うことで、とても読みやすく、また書きやすいプログラムにすることができる。たとえば、一つのSSGのチャンネルでいくつものオリジナル音色を使いわける場合や、一つのFMのチャンネルでいろいろなパターンのLFOを使い分けようという場合、SSGの音色指定に使う"E"コマンドや、LFOの指定に使う"M"コマンドは、

E255,255,0,255,255,0
M1,1,1,1

というようにけっこう長い記述になるため、文中に何回もこれが入ってくるととても見にくくなってしまう。また、どうも設定が気にくわないというときにも、これらの表記をすべて修正しなくてはならないため、とても手間がかかってしまう。しかし、マクロを使ってこの設定を、

# *1{E255,255,255,220,3,20}
# *2{E100,125,250,240,0,20}
# *3{E255,200,225,225,4,20}
# *4{E250,150,180,220,8,10}

というように設定しておけば、極端な話、一音ごとに音色を変える場合でも、

D l8 *1c*2d*3e*2d *1c*2d*3e*2d

と書けば済んでしまう。これならたいした手間もかからないだけでなく、間にいちいち音色設定の"E"コマンドが入った場合に比べれば、どういうメロディーかも一目瞭然だ。だから、もしインプットを間違えたりしてデータの修正が必要になっても、ごく簡単にできるのがわかるだろう。
さて、もう一つのマクロを使った表記は、メロディーの方をマクロにする場合である。これが活用できるのは、次のような場合が考えられる。
まず最初は、ベースパターンなどで同じフレーズがくりかえされる場合がある。アクションゲームなどの音楽では、こういうベースラインが使われることが多いよね。たとえば、

A l16 c8c8c8gg d8
d8
d8aa f8f8f8 c8c8c8gg

などというベースラインがあった場合、

# *1{l16 c8c8c8gg}

と定義しておけば、このラインは、

A *1 K2*1 K5*1 K0*1

と書くことができる。このマクロの使い方の便利な点は、データを作っている途中で、まだベースラインが決らずいくつか候補があるときに、マクロの中だけを書き換えて演奏すれば、たちどころに違うベースライン演奏させることができるところにある。全体をいちいち書き換えたのでは手間がかかるし、ミスも多くなる。これはスゴいメリットだね。
次にあげるのは、ドラムパートのデータの例だ。サウンドボードIIのリズム音源が使える場合を除き、ふつうドラムパートをプログラムするときはFM音源、SSG音源で各ドラムやシンバルの音をシミュレートし、これを組み合せて使うコトが多い。ということは、1小節の中に、何度も音色指定がでてくるコトになる。たとえば、FM音源の音色で@10がバスドラム、@11がスネアドラムとすると、1小節だけでも、

A l8 @10cr@11cr@10cc@11cr

というようになる。これで全部書いたのでは、表記が長くなるだけでなく、とても見にくく間違えやすいので、バグの元になりやすい。幸いドラムは決ったパターンの組み合せで使われることが多いので、それぞれのパターンをマクロとして組んでしまい、本来のMML記述文ではマクロだけを並べるようにすればいい。こうやることで、フィルインのパターンを変えたり、バスドラムのアクセントを変えたりといった作業も、マクロの方だけを修正すればいいわけだからぜんぜん問題はない。たとえば、

# *1{l8 @10cr@11cr@10cc@11cr}
# *2{l8 @10cc@11cr@10cc@11cr}

A *1*2*1*2

という具合いに実際のトラックの方はとても簡単になる。これは、効果絶大だね。
しかし、マクロの御利益はこれだけではない。つかえばつかうほど、あたらしいワザを開発できるんだ。きみも、アイディアでマクロを使いこなそう。

・ノリを出すにはどうするの〜「読者のハガキから」
最後に、読者からさっそく質問のお葉書が来たので、答えてみたい。読者の皆さんから来た質問も、どんどん取り上げていきたいので遠慮しないでどんどん手紙を出してほしい。手紙をくれたのは、千葉県習志野市の太田豊紀くん。質問の内容はこうだ。

<質問>
いわゆる"ノリ"の作り方を教えて欲しいです。自分で曲を作ると、どうしても曲が途切れ途切れになって、頭で浮かぶイメージ通りになりません。
CD等でゲームミュージックを聞くと、ドラムと、ベースが、違うリズムを刻んでいたり、バックでパーカッションが鳴っていたりするように思えます。しかし、パソコンのFM3PSG3では、パーカッションを入れる余裕は無いし、バッキングで工夫しようにも、ほとんど8分音符刻みで音色を変えなきゃいかないし、何かよい方法は無いものでしょうか?
あと、ドラムでスィング感を出すことは、やはり不可能でしょうか。
最後に、古代先生はカウンターラインを作るとき、スケールを意識していますか?
もう一つ、ポリリズムについて教えて欲しい。

では、順番に答えていこう。
演奏でノリを出す。これは内蔵音源に限らず、MIDIでもなんでもコンピュータミュージックをやろうというときには、永遠の課題といっていい。気持ちよく聞けるノリを作るには、どうしても工夫が必要なんだ。「どうもノリが違うな」と思うときには、二つのパターンがある。
一つは、根本的にリズムそのものの感じが違う場合。もう一つは、理論的にはあっているのだがなんか感じが変だという場合だ。
まず前者の、リズムそのものが違う場合についてその原因を考えてみよう。
まあ、データの入れ間違いとか、勘違い、あるいは譜面の読み違いといった単純な間違いはさておいて、よくあるのは音の長さがいいかげんなため、ノリが出てこな場合だ。実際の演奏では、「音符の長さ」と、「音を延ばす長さ」は違っている。スタッカートとレガートというコトバは、音楽の授業で聞いたことがあるかもしれないけど、同じ4分音符でも、曲の展開によって、音がなっている長さは一定ではない。あるときには4分音符の長さだけまるまる延ばすこともあるし、あるときには、16分音符の長さぐらいしか音を延ばさず、歯切れよく切ることもある。MIDIのシーケンサーでは、音符の長さは「ステップタイム」、音の延ばす長さは「ゲートタイム」と呼んで、別のパラメータとして管理している。そのコトバを使えば、「ゲートタイム」を工夫することで、いろいろなノリが出てくるんだ。これは、MMLの場合、"q"コマンドを使うか、あるいは、一つの音符をより細かい音符に分解して表記することで対応する。たとえば、次の例はサンバなどによく出てくるベースパターンだが、この両者は譜面の表記上は一緒になる。しかし、ノリはかなり違うはずだ。データをインプットして試して欲しい。

A l16 >a4.a4.
A l16 >a8r4a8r4
また、ドラムパターンなどの場合には、拍の強弱がノリを作り出していることも多い。しかし、これをプログラムするには、こまめにヴォリュームを設定するしかない。これは、手間はかかるものの、確実に効果が上がる方法だ。
後者の場合は、音色の作り方に問題があることが多い。たとえば、ストリングスのようにアタックが遅かったり、リリースが長かったりする音色は、ロングトーンで延ばすときには問題ないが、短い音符が続く速いメロディーの場合は、ウマく演奏できないコトが多い。それだけでなく、内蔵音源の場合、次の音を出すためには、前の音を強制的に中断させることになるため、ほとんど音がならなかったり、リズムがズレて聞こえたりするコトも多い。こういうときには音色の方をエディトして、アタックが速く、リリースも短い音色に修正するとよくなる。
このように、ノリを出すには、かなりきめ細かい設定が必要になる。だから、太田くんの想像したように、音符一つごとに、音色やヴォリュームを細かくいじってプログラムするしかない。確かに手間はかかるけれど、これも、MUSIC LALFのマクロ機能を使えば、他のMMLとは違いグンと楽にプログラムできるぞ。
さて、ドラムでのスイング感だ。スイングのノリは、4分音符を8分音符に分けるところが、1:1とか、2:1とかいった単純な比でなく、7:5ぐらいの比になっているのが特徴だ。
だから、

A [c8&c48 c48&c12]4

というようにすれば、それっぽいノリにはなる。でも、ジャズっぽいドラムプレイは、シンバルの使い方がポイントになっているが、このシンバルというのが、内蔵音源ではいちばん出しにくい音なんだ。だから、それらしいドラムパートを作るのはけっこう大変だと思うけれどね。
最後の質問は、古代先生から直接答えてもらうことにしましょう。



まえにもどる

つぎにすすむ

「まるボ」アーカイブにもどる


はじめにもどる