2017年1月27日金曜日

FMtrial version2.0リリース!!

遂にオペレータが2つになりました!!
二つになったらそらもうFM変調するしかないでしょうという事で。

早速サンプルを鳴らしてみたので聞いてみてね。

MDXをそのまま鳴らす為に、今回オペレータ3と4を1と2に各パラメータを流し込んで
鳴らしてみました。よってフィードバックは無し。

ドラスピを聴いてわかると思うけど、かなりギョイ~ンといっております。

今回の一番の山場は「テーブル化」!!

毎22マイクロセカンドで計算しないといけないので、イチイチsin()とかlog10()とかexp()
とかでやってるとまあ遅い遅い!!

v1のサイン波でそのまま作ったら、演奏がヨレヨレになるくらい遅い。
2017年になっても、プログラムの高速化は必要なのでした。

そうなると古典的な方法、テーブル化。

計算を事前にしておいて、値を参照するだけなのですな。

今回、ほとんどリアルタイム部分はテーブル化してみました。

自前で全部用意しようと思ったけど、どうしてもピッチ関連だけはx68sound.dllのやり方
を使わせて頂く事になりました・・。むっちゃ大変なのよ、ピッチ関連・・。

実際どこまで作れたかというと、サインテーブルを用意して音程を変えるという所まで
作れたのでございます。ところが、ノートオン後、ノートオフの前にピッチをビビビと
変化させるとものすごいブリブリとノイズっぽいものが乗るのね。

波形を見てびっくり!

ピッチが変わる度に、サインテーブルに送る角度がリセットされるので、波形もリセット
されてしまう感じ。サンプル聴いてみて下さい。(※音量でかいかも)

ざらざらした音を再生する

サインテーブルに送る角度を毎回ゼロから計算するのではなく、角速度というもので
順送りにしていく必要があり、そこが何度やってもうまくいかず、最終的にはギブアップ。
FM変調も結局使わせてもらう事になりました・・。

でも完全に諦めたわけでは無い!全体がまとまってきたらまたチャレンジするつもり。

そのあたりの格闘具合はソースコードを見てみて下さい。

その他、大変だったのはエンベロープのテーブル化。

YM2151の挙動をサンプリングして計算で真似てみました。
結構いい感じにまとまってきたのではないでしょうか。
全く同じではなく、似てる感じが頑張ってる感出てます。

音量をテーブル化すると、音量が変わる時にこれまたノイズが乗るので、ロマンシアは
かなりボソボソいっております。これは2点取って補完する処理を入れなければいけない
けどこれも積み残し。

次はついに4オペレータ化!オシレータの波形追加!フィードバック!あとはパッチ!!
パッチはまた地獄になりそうやな・・。

0 件のコメント:

コメントを投稿