2015年6月10日水曜日

Windows:vstでFM音源鳴った・・

VSTのホストを使って、VSTインストを鳴らすってトコは割りとすんなりいった。
そこで、欲が出て、X68sound.dllの置き換えができるVSTinstが作れないか?というのが前回まで。

早速、FM音源とは何か?という勉強を始める。
ネットには、正直ほとんど資料は落ちていない。

FM音源の曲データを作るのはまだちょっとはあったけど、FM音源そのものを作りたい
という人は全くいないらしい。わはは。

もうしょうがないので、ちょろっとある資料を元に原理を調べてみる。

ふむふむ、まず、サイン波で音を鳴らす時、あの波が1秒間に440回だと、
「A」つまりラの音が鳴るという事がまずベース。

そこに、別のサイン波の音を畳み込んで計算すると、音が変調されて、
あの例の音になるらしい。

実際に、サイン波に別のサイン波を畳み込むという計算方法がまずわからなかった。
具体的には、簡単に書くと、

sin(2.0 * PI * 周波数)

これでとりあえず周波数のサイン波が出る。
畳み込みするためには、このカッコの中に、前のサイン波の結果を入れるのだ。

sin( sin(2.0 * PI * 周波数1) + (2.0 * PI * 周波数2))

こんな感じ。これで周波数1がモジュレータ、周波数2がキャリアとなる。ここまでは、
正直、すぐにできた。でも、FM音源独特のギョイ~~ンという感じにはならない。

■困った時は神様に頼る
というわけで、世の中に落ちていたソースを使って何がおかしいのかを探る。
x68sound.dllがビルドできたし、その他にもFMGENというソースも見つかった。
この2つのソースを行ったり来たりして解析を進める。

ADSRを自作してみた。しかし、目指すFM音源のADSRはものすごく特徴的で、
簡単な計算では全く似てこない。神様はやはりテーブルを作成していた。

ここで、powとかexpとかの使い方でハマった・・。
今でもよくわかんないけど、この辺りの関数をしっかり使うのが必要。

■ちゃんと計算したらダメ
やはり20年も前の技術なので、今の64bitの環境でヌルっと計算しても、あの感じ
にはならない。出来る限り再現したかったので、神様のソースに頼る。

■もうダメかと何回も思う・・
何度やってもいい感じにならないので数回諦めかけた。そこで何かひらめいて
次やってみたらちょっと進む、の繰り返し。もうたくさん躓いたので何か覚えてない!

とにかく、神様のソースを百回以上読んで、頂ける所はコピペ。自分で作る所は
自分で。あっちゃこっちゃガチャガチャやってたら、さっき、何とか鳴った!

ギョインって鳴った!

どうしてギョインって鳴るのかわかんないけど、とにかく鳴った!よかった!!

自作VSTinstに組み込めたので、今後は、

・オシレータをサイン波だけじゃなく、矩形波、三角波、ノコギリ波なども入れたい。
・エフェクターを入れ込みたい。
・現在リズム感が悪いので、チャキチャキと鳴らしたい。

この辺りを狙っております。いけるかな・・。


0 件のコメント:

コメントを投稿