火曜日, 2月 13, 2007

pysndobj osx

やっとpysndobj動かす。osxの情報が皆無だったのでメモ。
自分用でしかも僕は開発素人なので普遍性はないかも知れません。YMMVってやつだね。

sourceforgeのsndobjプロジェクトページへ。
http://sourceforge.net/projects/sndobj

Download The Sound Object Libraryをクリックして移動。
PySndObjをダウンロード。

既に僕の環境ではpython2.5なのでPySndObjを使うには2.3に落とさなければならない。
terminalから

/usr/bin/python2.3

とすればpython 2.3.5が起動する。

PySndObjフォルダ内の
_sndobj.soとsndobj.pyを
ライブラリ/site-packagesフォルダの中にコピー。

terminalから

open /usr/local/lib/

としてフォルダを開き、同じくPySndObjフォルダ内のlibsndobj.dylibをコピー。

それからJack OSXをダウンロードしてインストール。OSXならCore Audioでいけるはず(?)なんだけどJackがないよ的なエラーが出たのでよくわからずとりあえず。
http://www.jackosx.com/

おそらくこれでいけると思います。動かすまでに色々とエラーが出て、メッセージに言われるがまま操作してたら動くようになりました。ちゃんとエラーログをとっておくべきだったな。こうやって勉強していくのでしょう。漏れがないことを祈る。

pythonインタラクティブモードでSndObjのマニュアル見ながらコードを打ち込むもスレッドを使うところでエラー。
>>> thread = SndThread()
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'SndThread' is not defined

import sndobj

では駄目で、

from sndobj import *

とすればいける。

>>> from sndobj import *
>>> thread = SndThread()
>>>

が、今度は

>>> tab = sndobj.HarmTable()
Traceback (most recent call last):
File "", line 1, in ?
NameError: name 'sndobj' is not defined

となる。

なんでだーと思ってたらpythonモジュールのインポートの仕組みの違い。
http://python.matrix.jp/tips/import.html
まぁ、何となく他のソースと見比べればわかる。マニュアルが間違ってるんだね(追記:2.6.4のマニュアルでは修正されてました)。

なので、

import sndobj

でいく場合は

thread = sndobj.SndThread()

としてあげる。

from sndobj import *

だったら

tab = HarmTable()

でいい。

超簡単に440Hzサイン波を出すには

from sndobj import *
t = SndRTThread()
harm = HarmTable(10000, 1, 1)
osc = Oscili(harm, 440, 10000)
t.AddOutput(1, osc)
t.ProcOn()

で音が出ます。

t.ProcOff()

で音を止める。

exampleのtest.pyからマイク入力とsleep抜いただけ。

あーすげーやる気出て来た。

0 件のコメント: