ファイルの読み込み
何通りかの方法が考えられるんですが、PySndObjにはSndObjクラスの下にSndReadがあり、SndIOクラスの下にはSndWaveなどがあって、多くの入出力がSndObjをあつかうので、SndWaveは1度SndInに突っ込んでからになってします。ちょっと面倒くさいのでSndReadから。loop.wavを読み込んで1度再生します。
from sndobj import * import time input = SndRead("loop.wav") rtout = SndRTIO(1, SND_OUTPUT) rtout.SetOutput(1, input) thread = SndThread() thread.AddObj(input) thread.AddObj(rtout, SNDIO_OUT) thread.ProcOn() time.sleep(10) thread.ProcOff()
特に問題無いでしょう。それではSndIOも混ぜてみましょう。SndIOクラスの下にあるSndWaveを使います。でもナゼSndReadでできることの代替を考えるのかというとSndReadとSndWaveでは機能が異なるからです。再生位置を指定できたり、再生速度を変えられたり、またはピッチを変えられたりとかね。
from sndobj import * import time wave = SndWave("loop.wav",READ) #ファイルを読み込む input = SndIn(wave, 1) #SndIOからSndObjへ rtout = SndRTIO(1, SND_OUTPUT) rtout.SetOutput(1, input) thread = SndThread() thread.AddObj(wave, SNDIO_IN) #AddObjの第2引数。 thread.AddObj(input) thread.AddObj(rtout, SNDIO_OUT) thread.ProcOn() time.sleep(10) thread.ProcOff()
コメントやマニュアル見るとわかるけど、SndWaveの第2引数が読み込みモードです、上書きなど指定できるのね。また、うっかり忘れるのがAddObjの第2引数です、これはSNDIO_INとSNDIO_OUTしかないようですが。