先日のオシレーター負荷一覧とは関係ないですがFM作ってるのでどうするのが軽いかテスト。2opでキャリア側にフィードバック付き
------------------------------------------------------------------------------------
その1. mspオブジェクトのpeekでbufferにサイン波を書き込みgenのwaveで読んだものを10個複製
wave(buff, phasor(freq) + wave(buff, phasor(freq) ) * mod + cx * fb);
buffがバッファ変数、modがモジュレーション深度(0.7)、cxはフィードバック用のhistoryでfbがフィードバックレート(0.5)
------------------------------------------------------------------------------------
その2. genオブジェクト完結、sin()関数を2つ使用。同じく10個複製
sin(TWOPI * phasor(freq) + sin(TWOPI * phasor(freq)) * TWOPI * mod + cx * fb * TWOPI);
TWOPIだらけですが定数なのでたぶん大丈夫。
フィードバック量などは上と一緒。
------------------------------------------------------------------------------------
という感じで
音質は聞いた感じはほぼ変わらないんですがwave()の方はモジュレーションしていないサイン波の時点で余計な倍音が結構出ているので4opぐらいでちゃんと作ったら影響出て来てしまうかもしれない感じでした。(3opで変な感じになったのこれかも)
(上がwave()、下がsin()。peekとかつかうとさらに山が追加されます)
とにかくたいしてCPU負荷減らないっぽいのが残念でした。ポインタ参照とかに出来てないとかそういう理由なんでしょうか。そろそろexternal作ろうかと思います...
------------------------------------------------------------------------------------
cycle(freq + cycle(freq) * freq * TWOPI * mod + cx * fb * 100 );
cycleオブジェクトだけでやる時のfeedbackがなかなか意味わからないので全然いい具合にならないんですが割とこういう状態のFMサンプルパッチ見かけてる。