Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2011-10-22

[]Pythonインタプリタを楽器にしてしまう簡単な方法。 22:23

 

 そういえば、以前にHaskellで作られた楽器や、1行のコードからアルゴリズム交響曲 - どのように、そしてなぜ? - 閉村観光などを見て、コンソール+コード、というのは楽器を作るインターフェイスとしてはとても優秀なのではないか、という気がしてきたので、せっかくだからPythonで同じような実装をしてみました。音を出力するアイデア(PyAudioの使い方)に関しては、以下のサイトを参考にさせて頂きました。ありがとうございます。

  PyAudioでドレミファソラシド - つまみ食う

使い方

>>> import pynoise
>>> th = pynoise.System(1)
>>> th.start()
>>> th.soundset(100)
>>> th.soundset(100,1)

作り方

 動画を見れば分かるように、単純にスレッドを作って、そのスレッドを操作してあげればいいだけの話。モジュール自体は、Pythonのthreadingを使用。threadingを使うと、バックグラウンドで動作し続けるプロセスが生成される。参考としては下のエントリが参考になる。

 no title

 ポイントは、threadingを継承して作る点にあって、実際の動作は"def run()"で定義してあげるのだけれども、実際にスレッドとして起動するときはstart()を使うという点かと。

 内部は配列でデータを埋め込んでいるので、些細な修正は、配列操作でなんとかなっちゃう点かなと。スレッドが動いていても、割り当てられた名前から操作してあげれば、スレッドのほうに反映されるので、そのあたりは便利かなという感じです。

 また、Pythonインタプリタで単純に動かすと、標準入力が出来なくなるので、スレッドにしてあげることによって、インタプリタが使えるようになるというところもポイントかな、と。

 スレッドの概念が理解できれば、あとはPyAudioで音を出力させる機構をつけてあげれば、もう完成。

 正直、システム自体はあんまりいいものじゃないですけど、これをヒントに、「スレッドインタプリタで操作できるシステム」みたいなのを作ってみると面白いんじゃないかと思います。

 ソースコードは下のとおりです。

 Pynoise ? GitHub

 |