(以下の記事は、ピコカキコに@14(→ピコカキコ:波形で遊ぶ参照)が実装される前の機能を使用したものです。)
ピコカキコ:FMで遊ぶとは、ピコカキコで音色を作る際に使われるFM(@o、@i)を使って遊ぶ記事、すなわちこのページのことである。
なお、この記事はピコカキコについてある程度知っている事を前提に書かれている。これからピコカキコを始めてみようとお考えの方はまずは「ニコニコ大百科:ピコカキコヘルプ」辺りの記事を見ることをお薦めする。
概要
ピコカキコではFM(Frequency Modulation:周波数変調)を使う事によって音色を作成する事が出来る。これにより通常では出せないような複雑な音色を作成する事が可能である。簡単に言うとピコカキコがFM音源になると言う事である。
ただし、1音出すのに最低2トラック使用する事になるので、チャンネル数が多くなると再生が重くなるという諸刃の剣でもある。
FMとは――合成とFMの違い
FMとはFrequency Modulationの略である。日本語に訳せば周波数変調。
余談だが、FM変調と言う言葉をたまに見かけたりするが、周波数変調変調になるので実は誤用。まぁ、細かい事は気にしなくて好きに呼べば良いと思うよ?
さて、周波数変調とはどういったものか詳しい解説はwikipediaなんかを見ていただくとしてここでは簡単にイメージを解説する。
2つの周波数があるとき、同時に鳴らすとそれは単純に波形の合成(振幅量を単純に足し算したもの)となる(MMLの例:cdef;cdef)。片方の波形でもう片方に変調を掛けるのが周波数変調(FM)である。
2つの波形が全く同一の正弦波として、図で示すと以下の通りとなる。
波形の合成 | ||||
---|---|---|---|---|
+ | = | |||
周波数変調(FM) | ||||
※モジュレータ |
→ | ※キャリア |
= |
※モジュレータ=変調を掛ける側、キャリア=変調を掛けられる側
ご覧の通り、波形の合成は全く同じ波形同士の場合はただ振幅量が倍に増えた(=音が大きくなった)だけであるが、変調の方はかなり違った波形になっている(どのように変化させるかは後述する)。また変調は変調を掛けられる側の振幅量と同じになるので音量はキャリアのものと同じになる。
これが周波数変調(FM)で、出力される波形はかなり複雑になっている。これを上手く使う事によって様々な音色を作成する事が出来るのである。
使用方法
記述方法
これだけでFMを使用することが出来る。
実際のピコカキコサンプルは次の通りになる。
@o1,0 @0 cdefg; @i4,0 @0 cdefg; |
波形は出力も入力も正弦波を使用しているが、正弦波とは違う音色で演奏されていることがわかると思う。これがFM音源である。
@o を記述したトラックの波形で @i を記述したトラックに周波数変調を掛けているのである。
コマンド解説
@o[モード],[パイプNo]
@o コマンドは変調を掛ける側に記述するコマンドである。
モード | |
---|---|
0 | 出力をOFFにする。 |
1 | 上書きモード。パイプへ出力する際にパイプの中身を上書きする場合に指定する。 |
2 | 加算モード。パイプへ出力する際にパイプの中の波形に加算する場合に指定する。 |
パイプNo | |
0~3 | 使用するパイプNoを指定する。 |
パイプとは簡単に言うと波形を一時置いておく仮想の出力装置と考えていただければわかりやすいかも。ここに出力された波形で @i コマンドを指定したトラックに変調を掛ける。
モードを 0 以外を設定した場合は指定したパイプに波形が出力されるのでスピーカーから音は出なくなる。
@i[感度],[パイプNo]
@i コマンドは変調を掛けられる側に記述するコマンドである。
感度 | |
---|---|
0~9 | 変調のかかり具合を調整する。0でOFF。1が感度が弱く、9が感度が強い。感度を強くするとノイジーと言うか金属っぽい音って言うかそんな感じになります。 |
パイプNo | |
0~3 | 使用するパイプNoを指定する。 |
感度とは?
コマンド説明の所にも記載しているが、変調のかかり具合を調整するものである。
以下の正弦波同士の変調の計算式において、変調指数(β)を示すものである。
計算式:
FM(t) = A sin(2πCt + β sin(2πMt))
A=キャリア振幅、C=キャリア周波数、β=変調指数、M=モジュレータ周波数
どのような波形が出力されるか図で示す。
感度が3の場合 | 感度が4の場合 |
---|---|
モジュレータ・キャリアともに振幅量・周波数は同一のものである。
余談であるが「FMとは」で使用している画像は感度が2のものである。
変調指数はモジュレータの振幅量とも捉えられるので、モジュレータの音量を変更することにより感度より更に細かい変化をつけることが可能である。
パイプとは?
パイプとはトラックとトラックを繋ぐ為のもので、その名の通り本当にパイプみたいなものである。
@o コマンドが書かれたトラックの波形データは一度このパイプに出力される。そして、@i コマンドが書かれたトラックはこのパイプからの波形で変調を掛け出力する。
ここで @o コマンドの第1引数のモードが出てくるのである。
上述の通り、@o コマンドが書かれたトラックはパイプに波形データを出力するわけだが、モードが 1(上書き)の場合はパイプの中に何があろうとも完全に上書きするのである。
そして、モードが 2(加算)の場合はすでにパイプの中に存在する波形データに加算する形で出力するのである。
どう言う時にこのような事を行いかと言うと、ある波形Aとある波形Bを合成した波形を用いて変調を掛けたい場合に使用するのである。
YM2203(OPN)での例をあげてみよう。
アルゴリズム0や5、6の場合は全て直列に繋げばいいので問題は無いが、アルゴリズム1,2,3は複数のオペレータの出力を合成してキャリアに対して変調を掛けてるのである。
このようなものを再現するにモードの加算は欠かせないものとなっている。
簡単な例として | モジュレータ1 モジュレータ2 |
┐ ├ ┘ |
キャリア |
と言った繋がりで説明する。 |
MML記述例 |
---|
@o1,0 q16 @q0 @0 o4 @v50 e1; /* モジュレータ1 */ @o2,0 q16 @q0 @0 o5 @v50 e1; /* モジュレータ2 */ @i2,0 q16 @q0 @0 o4 @v100 e1; /* キャリア */ |
各波形は次の通りとなる。
モジュレータ1 | モジュレータ2 | キャリア |
---|---|---|
処理説明 | パイプ内波形 | スピーカー出力波形 |
---|---|---|
1.まずモジュレータ1の波形がパイプに出力される。 モードが上書きモードなのでパイプにはモジュレータ1と同じ波形が出力される。 |
- | |
2.次にモジュレータ2の波形がパイプに出力される。 モードが加算モードなのですでにパイプ内にある波形にモジュレータ2の波形が加算(合成)される。 |
- | |
3.キャリアの波形にパイプ内の波形で変調をかけてスピーカーに出力される。 | - |
上級テクニック
これまで出てきたサンプルはいわゆる2オペレータFM音源と同じあるが、3オペレータ、4オペレータも可能である。
3オペレータ例 | |
---|---|
$A = o4 cdefg; @o1,0 @0 @e1,0,0,127,0 NS19 v4 $A; @i4,0 @o1,1 @0 @e1,0,0,127,0 NS-12 v10 $A; @i4,1 @0 @e1,0,0,127,0 NS0 v15 $A; |
|
$A = o4 cdefg; @o1,0 @0 @e1,0,0,127,0 NS19 v4 $A; @o2,0 @0 @e1,0,0,127,0 NS-12 v10 $A; @i4,0 @0 @e1,0,0,127,0 NS0 v15 $A; |
|
4オペレータ例 | |
$A = o4 cdefg; @o1,0 @0 @e1,0,0,127,0 NS19 v4 $A; @i4,0 @o1,1 @0 @e1,0,0,127,0 NS-12 v10 $A; @i4,1 @o1,2 @0 @e1,0,0,127,0 NS12 v2 $A; @i4,2 @0 @e1,0,0,127,0 NS0 v15 $A; |
|
$A = o4 cdefg; @o1,0 @0 @e1,0,0,127,0 NS19 v2 $A; @i4,0 @o1,1 @0 @e1,0,0,127,0 NS-12 v6 $A; @o2,1 @0 @e1,0,0,127,0 NS12 v10 $A; @i4,1 @0 @e1,0,0,127,0 NS0 v15 $A; |
当然、波形も正弦波以外のものを使用することが可能です。
鋸波と三角波 | |
---|---|
$A = o4 cdefg; @o1,0 @1 @e1,0,0,127,0 v10 $A; @i4,0 @2 @e1,0,0,127,0 v15 $A; |
|
波形メモリと波形メモリ | |
$A = o4 cdefg; @o1,0 @10-0 @e1,0,0,127,0 v10 $A; @i4,0 @10-1 @e1,0,0,127,0 v15 $A; #WAV10 0,8765432100000000000000000FEDCBA9 #WAV10 1,00123456789ABCDE79BCDEFFFFFEDCB9 |
音色作成方法
PC-8801やPC-9801、X68000のゲーム音楽を作成してみようって思い音色を作ろうとすると大変だと思います。
一番の理由はYM2203やYM2151で設定出来るパラメータとは全く違うからです。
特にFB(フィードバック)やKSR(キースケールレイト)なんかが無いからです。
では、どうやって音色を作ればいいのでしょう?
それは簡単です。
試行錯誤すれば良いと思うよ?
と、さすがにこれでは不親切なので著者が普段気を使っている事を挙げてみる。
- モジュレータ側に書く譜面データは、キャリア側に書く譜面データの倍音になるように書くと気持ち良い音が出る。
- 一般的なFM音源を再現する場合、FBの存在は大きいのでピコカキコでは波形メモリを使ってそのような音を再現したものを用いてみる。
- 自分の勘を頼りにする
使用例
こずえのテーマ | YM2203を再現させたピコ。(同級生2 #2より) | |
音色サンプル | ギターっぽい音色のサンプル(ピコカキコ:FMで遊ぶ #10より) | |
音色サンプル | ベースっぽい音色のサンプル(ピコカキコ:FMで遊ぶ #11より) | |
音色サンプル | 鐘っぽい音色のサンプル(ピコカキコ:FMで遊ぶ #12より) | |
消えた王様の杖~ヒドラ | YM2203を再現させたピコ。(SORCERIAN #5より) | |
SUBTERRANEAN CANAL | YM2203を再現させたピコ。(イース2 #1より) | |
Over The Sea | YM3526を再現させたピコ。(東亜プラン #17より) | |
Sea Of Flame | YM2612を再現させたピコ。(サンダーフォース #53より) | |
音色サンプル | 鐘っぽい音色のサンプル2(ピコカキコ:FMで遊ぶ #23より) | |
オープニング | YM2203を再現させたピコ。(ピコカキコ:FMで遊ぶ #34より) | |
エンディング Ⅰ | YM2203を再現させたピコ。(SORCERIAN #13より) | |
以下募集! |
関連コミュニティ
関連項目
- 12
- 0pt