[mckノイズおぼえがき]

書いた人:SBR (last update:2010/01/31)

・ファミコン本体の音源構成は以下のとおり。
channel A, B: 矩形波
4音色から選択可能、音量変更可
channel C: 三角波
音色/音量ともに1種類のみで設定不可
channel D: ノイズ
音量設定可、音色は無いが音程(周波数)を変えることで色々なノイズを出せる。
channel E: DPCM
サンプリング音源、使ったことないので詳細不明。
今回書くのはこのうちノイズ(channel D)でのパーカッション演奏について。


1、基本的な音量設定&演奏例(BPM150)
@v0 = {10,9,7,6,5,4,3,2,1,0} // スネア
@v1 = {6,3,0} // クローズハイハット
@v2 = {6,4,3,3,3,3,3,2,2,2,2,2,0} // オープンハイハット

D t150 q7 l16
D o0 [ @v1cc@v2c8 @v0c@v1c@v2c8 |]4
 [sample MP3]

音量テーブルの1要素はファミコンの1フレーム(1/60sec)に相当する。
16分音符の長さはBPM150の場合6フレーム、BPM180なら5フレームになる(こちらの「テンポによる音楽的音長とフレームの関係」参照)事を念頭に置くと各音の長さや性質を決めやすい。
(例えば上記のオープンハットは q8 で鳴らすとピッタリ8分音符の長さで停止する)


2、ノイズの音程
@EP0 = {12|0}
D t150 q7 l4
D v5 o0 cd-de-efg-ga-ab-b r EP0 cd-de-fg-ga-ab-b EP255
 [sample MP3]

ノイズチャンネルも、通常トーンと同様に各音程に異なる周波数が振られている。また、EPコマンドで周波数をオフセットさせることで「短周期ノイズ」を出すことができる。(出典:mck technical information in 2ch
2010/01/31追記:リンク切れ。現在はMCK Wikiさんの「MMLの書き方」に詳しい解説が書かれてるのでそちらオススメ。この記事より細かいノイズ音程の指定についても書かれてます。

一番軽いノイズは「o0c」で、音程指定が高くなるほど周波数が低く重くなっていく。特に「o0c」と「o0d-」の間には音の”量感”にかなりの差があるのでハイハットとシンバルのような差別化したい音同士で使い分けると単調さが薄れる。
また、「スネアを少し強めに叩きたいが音量を1つ上げると差が目立ちすぎる」といった場合は音程を1つ上げてみるとピッタリはまる事も。

注意点としては「短周期ノイズは発声直前までの状況で聞こえ方が変わる」ということ。演奏開始時に初期値をセットしてその後ノイズ発声のたびに続きを出力しているらしく、ドラムを1音挿入するだけでそれ以降の短周期ノイズの音が小さくなったり質感が変わったりしてしまう事がある。そういった場合はリズムパターンに手を加えるか休符の部分で音量0のノイズを鳴らすことで一応調整できる。
※シルフィードも2ループ目で最後のドラムソロの質感がおかしくなったため無音ノイズで調整していて、実は正しく鳴るかは8ループ目までしか確認していません。


3、コナミスネア
※具体的なソースが見つけられなかったので、あくまで「真似してそれっぽい音を出した」という自己例です。
@v0 = {4,12,11,10,9,8,12,7,5,4,3,2,1,0}
@v1 = {6,3,0}
@v2 = {6,4,3,3,3,3,3,2,2,2,2,2,0}
@EN1 = { 10 -10 | 0 }

D t150 q7 l16
D o0 [ @v1cc@v2c8 EN1@v0cEN255 @v1c@v2c8 |]2
 [sample MP3]

MSXやファミコンのコナミゲーで多用されてた「パシッ」という感じのスネア音。
具体的にはアタックの「パ」を周波数低めのノイズ、リリースの「シッ」を周波数高めのノイズで鳴らす。
(上記の場合 @EN1 で「1フレーム目は音程を半音10個ぶん高くし、2フレーム目で元に戻し、3フレーム目からはそのまま」という設定をしているため、「EN1」と「EN255(設定解除)」に挟まれているスネア(@v0c)は最初の1フレーム目だけ「o0b-」にあたる音が出る。)

なお、スネアの音量設定(@v0)で最初の 1 フレームの音を小さくしているのは、低周波になることでアタックに”量感”がついて浮いてしまったのを馴染ませるため。(調整しない場合PC88の「Xak」っぽいスネアになるので、こっちはこっちで使いみちありそう)


4、(∩゚д゚)アーアー聞こえない
@v0 = {3,9,7,6,5,4,3,2,1,0} // スネア
@v1 = {6,3,0} // クローズハイハット
@v2 = {6,4,3,3,3,3,3,2,2,2,2,2,0} // オープンハイハット
@v3 = {6,10,7,7,6,6,5,5,4,4,3,3,2,2,1,1,0} // シンバル
@EN0 = {10,-10,|0}

D t150 q7 l16
D o0 [ EN0@v3d-8.EN255 @v1c EN0@v0cEN255 @v1c@v2c8 |:@v1cccc EN0@v0cEN255 @v1c@v2c8:|3 |]2
 [sample MP3]

シンバルを派手に鳴らせばその間他の音が聞こえなくてもそれほど気にならないはず、という考え方。X68Kやメガドラなどの、PCM音源を1chだけ搭載していた機種のパーカッションでよく使われていた手法。(特にX68Kの「ジェノサイド」は必聴)


5、聞こえるかい聞こえるだろう
※今回の本題。既出技な可能性もありますが、「1ノイズで複数パートのリズムを刻む」という意図のデータは今のところ聴いた事が無いので大発見的な気持ちで。
@v0 = {6,12,11,10,9,8,12,7,5,4,3,2,1,0} // コナミスネア+クローズハット
@v1 = {12,6,2} // クローズハット単体
@v2 = {12,8,7,5,5,5,12,8,5,5,4,4,4,3,3,3,2,2,2} // オープンハット+クローズハット
@v3 = {10,14,13,12,10,10,12,9,7,7,5,5,12,6,3,3,2,2,1,1,0} // シンバル+クローズハット
@EN0 = {10,-10,|0}

D t150 q7 l16
D o0 [ EN0@v3c8.EN255 @v1c EN0@v0cEN255 @v1c@v2c8 |:@v1cccc EN0@v0cEN255 @v1c@v2c8:|3 |]2
 [sample MP3]

「同じ音とはいえシンバルやオープンハットのリリース部分ではクローズハットが聞こえるはず」ということで、シンバルとオープンハットにクローズハットを直接埋め込んで両方鳴っている状態を再現する。例えばシルフィードはBPM150で16ビートのクローズハットが常に鳴り続けているので、シンバルとオープンハットのエンベロープに6フレームおきにクローズハットのアタック部分を書き込めばOK。

 (参考例:シルフィード冒頭比較)
 パターンA[sample MP3]
 パターンB[sample MP3]
 ABを同時に鳴らした完成状態[sample MP3]

シルフィードの場合クローズハットは16ビート刻みっぱなしなのでシンバルもオープンハットも用意したのは1種類だが、「2拍目だけクローズハットが埋まってるシンバル」「1拍目と3拍目だけ埋まってるシンバル」のような組み合わせをあり得るだけ全種類揃えておけばクローズハットに独立したリズムを刻ませることも可。
(全種類といっても、オープンハットが16分音符2拍の長さだとすると組み合わせは全4パターン、3拍のシンバルなら8パターンの定義でOK)

※ちなみに同時出品した「平本洸一のテーマ」のループ直前では1小節長(BPM180なので40フレーム)のリバースシンバルにその間で鳴らすスネア&タムのリズムパターンをまるごと書き込んでます。


以上。最後のノイズの使い方はファミコンの演奏としてはインチキと取られそうな気もしますが、フレーム単位での制御はトーンパート(A〜Cチャンネル)では今日当たり前のように行われてるし同じ音源でリズムパターンの引き出しが増やせるならそれに越した事は無いと考えます。

おしまい。