投稿日: May 30, 2018 9:38:3 AM
Yの変化を取るだけなら0~180度の値を使えばひととおり用意できるのでは。
値の変化が少ない方から変化の多い方へ。なら 0~90度
値の変化が多い方から少ない方へなら 90~180度
変化が多いではじまって少ない、多いという値を使いたければ 45度~135度
変化が少なくはじまって、多い、少ないという値を使いたければ 0~180度。
値の範囲とか、ステップ数が0~-1だったり、90だったり180だったりするのはそれぞれ補正してやる必要があるけど。
これでライナーではない値の変化をひととおり網羅出来るはず。
あとは時間変化を前回のポストではライナーで扱っていたのだけども、時間変化自体にもこのカーブを使ってやることで急激に変化するとか緩やかに変化するとかをコントロール出来るはず。
とりあえず 0~90度の いわゆるスロースタートファーストエンドについて考えてみよう。
Y = cos(r) これで取得できる値が r=0 : Y=1、r=90:Y=0なんだけども、r=0のときY=0の方が都合が良いので
Y = 1 + cos(r) * -1 これでどうだ。 しかしこんなことをするくらいなら sinをつかえばもっとシンプル。
Y = sin(r) これで r=0のときY=0、r=90のときY=1の値が取れます。
音を弄っているときにいちいちステップ数を考えるのは面倒なので90を100%として0~1の倍率で値を取れるようにしてみます。たとえば1000ステップで角度 r を取り出したい場合はこんな感じになります。
で、実際にYを取り出したいならこれにさっきの sin をつけてやればいいのでこうなります。
step = 1000 s = 90 / 1 for i in range(step + 1): r = 90 * i / step
import math as m step = 1000 s = 90 / 1 for i in range(step + 1): Y= m.sin( m.radians( 90 * i / step ) )
これを冒頭で上げた4つのパターン毎に作ってやれば使い方を共通化できるわけですね。
つぎは時間変化にカーブを適用する方法についても考えましょう。