ファイルの読み込み

何通りかの方法が考えられるんですが、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しかないようですが。