投稿日: May 02, 2019 7:5:53 PM
しばらく放置してました。
なかなかすごいことしてると思うんだけど。bareAudio。
それはそうと、Ampのフェードをするためのクラスなんてものを作っていたんだけどあまりにも使いづらかったりデタラメだったりしていたのでここで一旦しっかり考え直そうと思った。
まず、コサインからカーブを算出しようとした。それはよし。
Fast Slow Fastの関数。
return 1 - m.cos( m.radians( 180 * value ) ) / 2 - 0.5
xに0から1を与えるとこんな感じの数値が出てくる。
なんだしっかりやってるじゃん。
もっとデタラメに作ってたんだと思ったけどまともだったので改修はやめとこう。
じゃあなんで使いづらいのか。ってとこですが多分まとめて演算しようとしていたのでややこしいことになっていたのかな。
#!/usr/bin/python3
from bareaudio import osc,track,curve
o = osc.OSC()
t = track.Track("kick3.wav",1)
t.seek(0)
ln = 5512
for i in range(ln):
c = curve.curve( curve.FS, 1-1/ln*i ) * 180
ar = ( o.sinOsc2( c + 30 ) ) * c / 180
o.nextPhase()
t.write(ar)
t.close()
こんな感じに処理してた。周波数とAmpに対してカーブを使っているけれどもなんだこのわかりづらさは!
もともと1サンプル単位で音をいじくろうっていう趣旨のものなので素晴らしくわかりやすくはならないとは思うけれど作ってる人が困るようじゃ、吾輩たいへん困る。
一応、Fast Slowカーブで0〜180の値を作って、それをオシレータで+30しながら利用。
つまり、210Hzから30Hzになだらかに変化する音を作って・・・。
手抜きで同じカーブを利用してサイン波の抑揚を制御している。
という感じなんだけども。周波数はともかくAmpがね。
カーブFastSlowはグラフにするとこういう感じになってる。
もっと素早く減衰してしばらくの間0にはならないでほしい。
これだと減衰が遅いのでなんか違う感じ。
Y = 1 - sqrt(X)
いやー違うんだよなぁ。
Y = 1 / ( ( x + 1 ) ^ 6 )
こんな? 最後きれいにゼロにならないのがちょっとね・・・。VSTiとかこういうの多いですよね。
なんかいい式ないんですかねえぇ。