ピコカキコ:FMで遊ぶ単語

ピコカキコエフエムデアソブ
4.6千文字の記事
  • 12
  • 0pt
掲示板へ

(以下の記事は、ピコカキコ@14(→ピコカキコ:波形で遊ぶ参照)が実装される前の機を使用したものです。)

ピコカキコ:FMで遊ぶとは、ピコカキコで音色を作る際に使われるFM@o、@i)を使って遊ぶ記事、すなわちこのページのことである。

なお、この記事はピコカキコについてある程度知っている事を前提に書かれている。これからピコカキコを始めてみようとお考えの方はまずは「ニコニコ大百科:ピコカキコヘルプ」辺りの記事を見ることをお薦めする。

概要

ピコカキコではFMFrequency Modulation:周波数変調)を使う事によって音色を作成する事が出来る。これにより通常では出せないような複雑な音色を作成する事が可である。簡単に言うとピコカキコFM音源になると言う事である。

ただし、1音出すのに最低2トラック使用する事になるので、チャンネル数が多くなると再生が重くなるという諸刃の剣でもある。

FMとは――合成とFMの違い

FMとはFrequency Modulationの略である。日本語に訳せば周波数変調。
余談だが、FM変調と言う言葉をたまに見かけたりするが、周波数変調変調になるので実は誤用。まぁ、細かい事は気にしなくて好きに呼べば良いと思うよ?

さて、周波数変調とはどういったものか詳しい解説wikipediaexitなんかを見ていただくとしてここでは簡単にイメージ解説する。
2つの周波数があるとき、同時に鳴らすとそれは単純に波形の合成(振幅量を単純に足し算したもの)となる(MMLの例:cdef;cdef)。片方の波形でもう片方に変調を掛けるのが周波数変調(FM)である。
2つの波形が全く同一の正弦波として、図で示すと以下の通りとなる。

波形の合成
波形A 波形B 合成後波形
周波数変調(FM
波形A
※モジュレータ
波形B
※キャリア
変調後波形

※モジュレータ=変調を掛ける側、キャリア=変調を掛けられる側

ご覧の通り、波形の合成は全く同じ波形同士の場合はただ振幅量が倍に増えた(=音が大きくなった)だけであるが、変調の方はかなり違った波形になっている(どのように変化させるかは後述する)。また変調は変調を掛けられる側の振幅量と同じになるので音量はキャリアのものと同じになる。

これが周波数変調(FM)で、出される波形はかなり複雑になっている。これを上手く使う事によって様々な音色を作成する事が出来るのである。

使用方法

ピコカキコFMを使う方法は次の通りである。

記述方法

  1. トラック(モジュレータ)に @o[モード],[パイプNo] を記述し、譜面データを記述
  2. トラック(キャリア)に @i[感度],[パイプNo] を記述し、譜面データを記述

これだけでFMを使用することが出来る。
実際のピコカキコサンプルは次の通りになる。

3699
@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の場合
感度=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 モジュレータ2 キャリア

 

処理説明 パイプ内波形 スピーカー波形
1.まずモジュレータ1の波形がパイプに出される。
モード上書きモードなのでパイプにはモジュレータ1と同じ波形が出される。
パイプ内波形
2.次にモジュレータ2の波形がパイプに出される。
モード加算モードなのですでにパイプ内にある波形にモジュレータ2の波形が加算(合成)される。
パイプ内波形
3.キャリアの波形にパイプ内の波形で変調をかけてスピーカーに出される。 スピーカー出力波形

 

パイプとそのモードはこのように動作するのである。

上級テクニック

これまで出てきたサンプルはいわゆる2オペレータFM音源と同じあるが、3オペレータ、4オペレータも可である。

3オペレータ例
3700
$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;
3701
$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オペレータ例
3702
$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;
3703
$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;

当然、波形も正弦波以外のものを使用することが可です。

波と三
3704
$A = o4 cdefg;
@o1,0 @1 @e1,0,0,127,0 v10 $A;
@i4,0 @2 @e1,0,0,127,0 v15 $A;
波形メモリ波形メモリ
3705
$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-8801PC-9801X68000ゲーム音楽を作成してみようって思い音色を作ろうとすると大変だと思います。
一番の理由はYM2203YM2151で設定出来るパラメータとは全く違うからです。
特にFB(フィードバック)やKSRキースケールレイト)なんかがいからです。

では、どうやって音色を作ればいいのでしょう?
それは簡単です。

試行錯誤すれば良いと思うよ?

と、さすがにこれでは不切なので著者が普段気を使っている事を挙げてみる。

 

使用例

3690
こずえテーマ YM2203再現させたピコ。(同級生2 #2より)
3709
音色サンプル ギターっぽい音色のサンプル(ピコカキコ:FMで遊ぶ #10より)
3710
音色サンプル ベースっぽい音色のサンプル(ピコカキコ:FMで遊ぶ #11より)
3711
音色サンプル 鐘っぽい音色のサンプル(ピコカキコ:FMで遊ぶ #12より)
3716
消えた王様ヒドラ YM2203再現させたピコ。(SORCERIAN #5より)
3723
SUBTERRANEAN CANAL YM2203再現させたピコ。(イース2 #1より)
3906
Over The Sea YM3526を再現させたピコ。(東亜プラン #17より)
4262
Sea Of Flame YM2612再現させたピコ。(サンダーフォース #53より)
4395
音色サンプル 鐘っぽい音色のサンプル2(ピコカキコ:FMで遊ぶ #23より)
4845
オープニング YM2203再現させたピコ。(ピコカキコ:FMで遊ぶ #34より)
5013
エンディング YM2203再現させたピコ。(SORCERIAN #13より)
以下募集!

 

関連コミュニティ

関連項目

この記事はピコカキコに関連した書きかけ項です。この記事を加筆して下さる協者をめています。

【スポンサーリンク】

  • 12
  • 0pt
スマホ版URL:
https://dic.nicovideo.jp/t/a/%E3%83%94%E3%82%B3%E3%82%AB%E3%82%AD%E3%82%B3%3Afm%E3%81%A7%E9%81%8A%E3%81%B6

この記事の掲示板に最近描かれたお絵カキコ

ピコカキコ:FMで遊ぶ

50
◆Yumi/doko2 2010/10/15(金) 01:36:50 ID: bShNb/r6kG
>>49
おー詳細な情報ありがとうございます!
テーブル式のエンベロープも結構便利だったりするんでいいですね~
ADSR式とテーブル式の両方が使えるのが一番便利でいいけどw
mckとかはゆっくり減衰する音とか結構つらいから(^^;

不具合もあるみたいだけど、面そうではありますね~
ただ作っても発表する場が…ってのはあるけど(^^;
51 LDrive
2010/10/16(土) 00:14:04 ID: mbf/nb5Mnq
http://dic.nicovideo.jp/b/a/sorcerian/1-#29
イントロのうにょ~んっていう音がよく出来てるなぁ^^
いい感じですねー
リングモジュレータはそもそも原理を分かってなかったのでにわかに勉強しましたw。波形同士を掛け算するものなんですねー
52 LDrive
2010/10/16(土) 00:19:54 ID: mbf/nb5Mnq
>>50
思いのほかSiON作者さんが前向きな反応くれたので、
気づいたことをレポートしてみたテスト
ちょっと様子見。
53
◆Yumi/doko2 2010/10/16(土) 17:32:18 ID: bShNb/r6kG
>>51
うにょ~んの音色はかなり時間がかかりました(^^;
アタックがどうしてもYM2203と違う形で立ち上がるので結構困ったり><
PSGMIXモードFlMML作者さんが要望にあげておいてーって言ってたのであげておきましたw
もし実装されたら1トラックで鳴らせるようになるのでいいですね♪

>>52
SiONの作者さんやる気十分なんですね♪
うちも昨日、ちらっとリファレンスを見てみたけど、面そうではありますねぇ~
そのうち大百科でも使えるようにしてくれたらありがたいのにw
ピコがあるから理か(^^;
54 LDrive
2010/10/19(火) 21:29:13 ID: mbf/nb5Mnq
>>50
SiONのMMLを発表する場は
http://mmltalks.appspot.com/exit
ここでピコカキコみたいに投稿できるようですが、IE8だとちょっと表示等不具合あるっぽいです。。人通りは少ない感じですね(

>>53
MIXモード実装されたら入が楽になりますね^^
メジャーデーモンの曲は最後のノイズパートだけ、地味なのに面倒な実装を要してきていますから(笑)
FlMMLもすっかりver.up熱も下がって寂しい限りなので、これでまた進んでくれたらいいなぁ。

過去MMLデータの互換性の問題でSiONが実装できないのだとしたら、MMLヘッダ部分でSiONライブラリに渡すMMLですよ、って定義することにしてデュアル実装を…
すぐ却下されそうですねw
55
◆Yumi/doko2 2010/10/22(金) 02:44:04 ID: bShNb/r6kG
>>54
IE8+ぷにるのうちにはちゃんと表示されませんw
なので聞けたことがない><

FlMML一通実装した感があるので停滞気味なんかなぁ?
要望は色々あるけど、さすがに全部入れることも出来ないだろうしねぇ~

SiONの実装とかはグニャラくんやる気次第?w
興味がなければ華麗にスルーだろうしね~(^^;
56 LDrive
2010/10/22(金) 22:46:18 ID: mbf/nb5Mnq
>>55
javascriptの問題って言ってたからie8環境でも動くようになるのも間近かも。。再生だけとかMMLエディタの画面なら音が鳴るんだけどねー。

FlMMLwikiにもいろいろ書いたけど華麗にスルーされてさみしい限り。
自分でやれよということか・・
MMLコマンドの修正とかはわりと簡単そうだけど、高音質化でサンプルレートをあげたり、OPMモジュールを追加したりするのは大変そうだなぁ・・。バリデーションの問題もあるよねー
57 LDrive
2010/11/03(水) 02:25:43 ID: mbf/nb5Mnq
http://dic.nicovideo.jp/b/a/sorcerian/31-#44
やっとMMLジェネレータが動き出したのでテストで作ってみました。=)
いかがでしょうか?

C言語もずいぶん忘れていて、やたら時間がかかってしまいました。。
ひとまずこれで192分音符換算でも128分音符換算でもどっちでも出せるようになったのと、できるだけ認識しやすい音長表記(多重付点もある程度対応)に気をつけてみました。

今回のテストでは休符が連続するときの累積計算に間違いが発覚(x_x)
この曲では128分音符換算が読みやすかったのでそちらを採用。
FMの音色は1つだけだけど、まずまず似せられたかな・・?
この曲のやさしい雰囲気が好きです^^

(省略しています。全て読むにはこのリンクをクリック!)
58 LDrive
2010/11/03(水) 20:21:17 ID: mbf/nb5Mnq
>>55
今日ie8で
http://mmltalks.appspot.com/exit
こちらの盤表示、直ってるみたいでした^^
59 ななしのよっしん
2018/10/19(金) 18:21:44 ID: Xgq8qwLEv2
FM音源@14)の解説がない。
Reference斜め読みしてきたけどOPN、OPMパラメーター互換機が用意されているから@iや@oで再現する必要はない感じ、ここFM音源モジュール実装される以前に書かれた記事なんだろうな。