Fade In / Fade Out Nyquist

LADSPAでFade In/Outは作ったのだが、Audacityのサンプル処理単位が20bitだったので、それ以上の範囲に適用すると、繰り返されてしまう問題があった。範囲を計測してから適用すればよいかもしれないが、LADSPAでどうやるかは不明。LADSPAは基本的に無限に流れてくる音を処理するためのエフェクトで、有限の範囲を処理するには向いてなさそう。

そこで簡単そうなNyquistでFadeInを作ることにした。 FadeOutはAudacity標準でNyquistのStudio Fade Outがあり、これはコサインカーブで変化する。これを改造してみるのが手っ取り早い。その中身を見ると以下のようにNyquistのosc関数を使ってエンベロープカーブを描いていることが判明。これと実信号を組み合わせて、FadeOutを実現していた。

(osc (hz-to-step (/ (* dur 2))) dur *table* 90)

またローパスフィルターも入っていた。今回はローパスは不要と思えたので、カーブの部分だけ下のように書きなおすことにした。

(osc (hz-to-step (/ (* dur 2) )) dur *table* -90)

つまり開始角度をずらしただけ。 Nyquistは、あらかじめいろいろな関数が用意されているので、Cで作るのに比べ圧倒的に簡単だが、プログラムの勉強にはなりそうもない。プログラミングするというよりは、Nyquistマニュアルから使えそうな関数を探す作業という感じだ。後は独特なLISPの構造でスクリプトを書く必要があるので、それを思い出さないと使えない・・・

出来たコードはこんな感じ。メニューから選択すると即実行するエフェクト。

Fade In ソースコード


;nyquist plug-in
;version 1
;type process
;categories " "
;name "Namagi: Fade In"
;action "Applying Fade..."

(defun r-cos (dur)
 (abs-env
 (mult 0.5
  (sum 1
   (osc (hz-to-step (/  (* dur 2) )) dur *table* -90)
   )))
)

(let ((dur (get-duration 1)))
 (cond
  ((< dur 0.2) (mult s (r-cos dur)))
  (t (mult s (r-cos dur)))
 )
)

結果は以下のようになる。30秒と長い選択範囲でもFadeInがちゃんと適用されるようになった。


ついでにフェードアウトも作成。

Fade Out ソースコード


;nyquist plug-in
;version 1
;type process
;categories " "
;name "Namagi: Fade Out"
;action "Applying Fade..."

(defun r-cos (dur)
  (abs-env
    (mult 0.5 
      (sum 1 
        (osc (hz-to-step (/ (* dur 2))) dur *table* 90)
        )))
)

(let ((dur (get-duration 1)))
  (cond
    ((< dur 0.2) (mult s (r-cos dur)))
    (t (mult s (r-cos dur)))
  )
)

sound programming 目次