遂にオペレータが2つになりました!!
二つになったらそらもうFM変調するしかないでしょうという事で。
早速サンプルを鳴らしてみたので聞いてみてね。
MDXをそのまま鳴らす為に、今回オペレータ3と4を1と2に各パラメータを流し込んで
鳴らしてみました。よってフィードバックは無し。
ドラスピを聴いてわかると思うけど、かなりギョイ~ンといっております。
今回の一番の山場は「テーブル化」!!
毎22マイクロセカンドで計算しないといけないので、イチイチsin()とかlog10()とかexp()
とかでやってるとまあ遅い遅い!!
v1のサイン波でそのまま作ったら、演奏がヨレヨレになるくらい遅い。
2017年になっても、プログラムの高速化は必要なのでした。
そうなると古典的な方法、テーブル化。
計算を事前にしておいて、値を参照するだけなのですな。
今回、ほとんどリアルタイム部分はテーブル化してみました。
自前で全部用意しようと思ったけど、どうしてもピッチ関連だけはx68sound.dllのやり方
を使わせて頂く事になりました・・。むっちゃ大変なのよ、ピッチ関連・・。
実際どこまで作れたかというと、サインテーブルを用意して音程を変えるという所まで
作れたのでございます。ところが、ノートオン後、ノートオフの前にピッチをビビビと
変化させるとものすごいブリブリとノイズっぽいものが乗るのね。
波形を見てびっくり!
ピッチが変わる度に、サインテーブルに送る角度がリセットされるので、波形もリセット
されてしまう感じ。サンプル聴いてみて下さい。(※音量でかいかも)
ざらざらした音を再生する
サインテーブルに送る角度を毎回ゼロから計算するのではなく、角速度というもので
順送りにしていく必要があり、そこが何度やってもうまくいかず、最終的にはギブアップ。
FM変調も結局使わせてもらう事になりました・・。
でも完全に諦めたわけでは無い!全体がまとまってきたらまたチャレンジするつもり。
そのあたりの格闘具合はソースコードを見てみて下さい。
その他、大変だったのはエンベロープのテーブル化。
YM2151の挙動をサンプリングして計算で真似てみました。
結構いい感じにまとまってきたのではないでしょうか。
全く同じではなく、似てる感じが頑張ってる感出てます。
音量をテーブル化すると、音量が変わる時にこれまたノイズが乗るので、ロマンシアは
かなりボソボソいっております。これは2点取って補完する処理を入れなければいけない
けどこれも積み残し。
次はついに4オペレータ化!オシレータの波形追加!フィードバック!あとはパッチ!!
パッチはまた地獄になりそうやな・・。
0 件のコメント:
コメントを投稿