Top

あちゃぴーの自転車通勤
u-he UHM言語 学習04 Envelope

エンベロープの用途は広く、時間軸に沿って、波形のレベルを調整することができる。

T1~T8:0~2048 ポイントとの距離(時間)indexに対応
L0~L8:-1.0~0.0~1.0 レベル

T1とL1のようにセットとなっている。T0がないのはスタート位置で固定だから。L0のみで設定する。

上記の点と点を結ぶCurveは以下の4タイプが選べる。

Waveでエンベロープを使って波形生成

分かりやすいところとして、エンベロープを使ってノコギリ波を書いてみる。 最初はレベル1で、最後(T1=2048)はレベル-1というエンベロープになる。 カーブは直線。

Envelope Curve=linear L0=1 T1=2048 L1=-1
Wave "env(index)"
u-he uhm

カーブをexponentialにしてみる。

Envelope Curve=exponential L0=1 T1=2048 L1=-1
Wave "env(index)"
u-he uhm

カーブをlogarithmicにしてみる。

Envelope Curve=logarithmic L0=1 T1=2048 L1=-1
Wave "env(index)"
u-he uhm

カーブをquadricにしてみる。

Envelope Curve=quadric L0=1 T1=2048 L1=-1
Wave "env(index)"
u-he uhm

同じように矩形波を作ってみる。注意点としてはTは前のポイントからの距離(時間)ということ。 下スクリプトではT1とT2の時間距離は0となっている。

Envelope Curve=linear L0=1 T1=1024 L1=1  T2=0 L2=-1 T3=1024 L3=-1
Wave "env(index)"
u-he uhm

ひとつのフレームにサイン波が15周期分あり、徐々に音量が下がっていく波形。

Envelope Curve=exponential L0=1 T1=10 L1=1 T2=2048 L2=0
Wave "sin(30*pi*phase)*env(index)"
u-he uhm

Spectrumにもエンベロープを適用できる

まず周波数領域に頭を切り替える必要がある。 まずはサイン波の生成スクリプト。 Spectrumなので、indexは最大1024。 それ以上の大きな数値は無視されるようなので、あまり気にする必要はないが、倍音との関係は把握しておかないとコントロールできないので注意。 エンベロープは時間軸の0~1がレベル1となっていて、2以降はすべてレベル0となっている。 結果DCは無視されるので、基本だけがレベル1となり、2倍音以降はレベル0となり、サイン波が生成される。

Envelope L0=1 T1=2 L1=0 T2=1022 L2=0
Spectrum "env(index)"
u-he uhm

frameにエンベロープを適用してみる

同じサイン波の入ったフレームを用意し、エンベロープで音量を下げていく試み。

NumFrames = 101
Envelope Curve=linear L0=1 T1=100 L1=0
Wave start=0 end=100 "sin(2*pi*(phase))" 
Wave "x * env(frame)"
u-he uhm
uhm言語