エンベロープ
例として1つ取り上げます。残念ながらちょっと物足りない感じではありますが、そのうち、もうちょっといい方法が思いつくかもしれません。
エンベロープはADSRを使います。以下は8つ目の引数以上は省略しています。
ADSR(att, maxamp, dec, sus, rel, dur, SndObj)
アタックatt、ディケイdec、サスティーンsus、リリースrelの単位はdurにあわせた比率ではなく秒です。durはエンベロープの全体の時間です。うまく説明できないのですが、attに2秒としてdurを1秒にセットしたらこのエンベロープは1秒毎にループになります。durは音がなるタイミングを指定できる便利な機能のようにおもえますが、リストを入れたりできませんから時計のように単純なタイミング。またmaxampはSndObjの振幅に乗算する機能。
from sndobj import * import time noise = Rand(2000) #ノイズで、引数は振幅。 adsr = ADSR(0.0, 1, 0.5, 0.0, 0.0, 1, noise) write = SndWave("ad.wav", OVERWRITE) write.SetOutput(1, adsr) thread = SndThread() thread.AddObj(adsr) thread.AddObj(noise) thread.AddObj(write, SNDIO_OUT) thread.ProcOn() time.sleep(1) adsr.Release() time.sleep(1) thread.ProcOff()
ループがうざい時はRelease()が使えます。音が鳴り止みます。