mimiumのif文は選択的にブランチを実行するので、例えば
fn dsp(){
if (random()){
gen_a()
}else{
gen_b()
}
}
のようなコードを書くと、gen_a
とgen_b
はそれぞれランダムなサンプルレートで内部を更新するという形になってしまう。
Faustのselect
プリミティブが両方のブランチを常に評価する戦略を取っている理由はこれを避けるため。
ただ、そういう意味ではOndemand primitive for Faustをmimiumのif文で再現できるとも言える。
つまり、アップサンプルやダウンサンプルを組み込み関数を新たに定義することなく、ライブラリで定義できる。(サンプルレートの動的な変化とかにどう対応するんだよという問題はあるけど)