スレッドを使わない

昨日の日記の修正に時間を使ったので今日はサクッと。基本的にPythonで対話的に音を作れるのが嬉しいPySndObjなのでSndThreadというスレッドを使うのが1番ですが、使わない方法もあります。

from sndobj import *
import time

tab = HarmTable(256, 3, 4)
osc = Oscili(tab, 440, 3000)
outp = SndRTIO(1, SND_OUTPUT)
outp.SetOutput(1, osc)

for n in range(1722):
    osc.DoProcess()
    outp.Write()

音が鳴るのはおよそ10秒です。なぜならSndObj標準で1度に計算するサンプル数は256ですのでサンプリングレート44100を256で割ると、1秒に172回、10秒なら1722回DoProcess()しているから。スレッドを使わないので多少コードは短くなりますが、対話でプログラミングしている場合for文が終了するまで手持ち無沙汰ということも。