08042011 processing
これの日本語訳。サイトにcode exampleや本の中身が少し出てるのでどういう内容かはわかると思う。
というわけで、予約した。
またprocessingいじり熱も再発するんだろうなぁ。
08042011 processing
24082010 processing VD
processingを使ってデータの視覚化をするための基礎的な本。なのでprocessingでアート的なことをやる本とはちょっと違うかも。
スキャッタープロットとかネットワークを題材に「より効率的にデータを表現する」ということを考えていく。僕は、データとヒトの目という中途半端なデバイスをうまくつなげるミドルウェアのようなものはどういうものが良いのかということを考えていくための教科書的なものと位置づけて読んでる。
7章はズームして掘っていけるようなTreeMapを実装する。TreeMapならMatplotlibでももちろんできるけど、インタラクテイブ性をもたすならProcessingがいいかも。 あとこの本はコードの断片の説明というかたちが多いので別途サンプルコードをダウンロードしながら読む必要がある。 僕はjavaとprocessingがまだ拙いので、単に写経していくだけでは動かず、悩むことが多かったため、なかなか読み進められていないが、良書の予感はする(びしびしと)。
24082010 Python processing
12012010 Ruby processing
12012010 Python jython processing
Built with Processing [改訂版]が到着したので、これを手本にjythonで書いていく。
を参考にして、step 04-aを。
ソース。jythonだとswing呼んだりしないといけない。
from javax.swing import JFrame
from processing.core import PApplet
class Sketch(PApplet):
def __init__(self):
pass
def setup(self):
self.size(200, 200)
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)
def draw(self):
self.rectMode(PApplet.CENTER)
self.colorMode(PApplet.HSB, 100)
self.background(99)
self.noStroke()
self.smooth()
self.fill(45, 60, 99)
self.rect(100, 100, 100, 100)
self.fill(45, 40, 99)
self.rect(100, 100, 60, 60)
self.fill(45, 20, 99)
self.rect(100, 100, 20, 20)
self.noFill()
self.strokeWeight(60)
self.stroke(80, 99, 99, 30)
self.ellipse(50, 50, 200, 200)
self.ellipse(150, 50, 200, 200)
self.ellipse(50, 150, 200, 200)
self.ellipse(150, 150, 200, 200)
def run(applet):
frame = JFrame(title="Processing",
resizable = 0,
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
frame.contentPane.add(applet)
applet.init()
frame.pack()
frame.visible = 1
if __name__ == '__main__':
run(Sketch())
video入力いじりたいからUSBカメラ買わなきゃ。
12012010 Python jython processing
processingは繰り返しがfor(i=0;i<10;i++)のCっぽい書き方だけど、jythonだったらrangeが使えるのでお手軽でいいんじゃないか。
def setup(self):
self.size(200, 200)
self.colorMode(PApplet.HSB, 100)
self.background(99)
self.noStroke()
def draw(self):
for y in range(10):
for x in range(10):
self.fill(x*10, 10 + y*10, 99)
self.rect(x*20, y*20, 10, 10)
12012010 Python jython processing
processingはpdfに出力できるらしい。同じことはjythonでも可能でしょう。
と思いつつ、三日くらいはまった。classpathにpdf.jarだけでなくitext.jarも設定しておかないといけなかったのがわからなかった。itextってのはフリーのpdfライブラリらしい。それにしても、classpathがどんどん長くなっていくのが気持ち悪いなぁ。もうちょっとスマートに記述する方法もあるんだろうな。
from javax.swing import JFrame
from processing.core import PApplet
from random import randint
import processing.pdf
class Sketch(PApplet):
def __init__(self):
pass
def setup(self):
self.size(200, 200, PApplet.PDF,"noiseline.pdf")
self.colorMode(PApplet.HSB, 100)
self.noFill()
self.fluc_color = 50
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)
def draw(self):
self.background(0)
for i in range(0, 200 ,5):
self.fluc_color += randint(-10,10)
self.stroke(self.fluc_color, 60, 90, 30)
fluc_y = 0
self.beginShape()
for j in range(0, 200, 5):
fluc_y += randint(-2, 2)
self.vertex(j, i + fluc_y)
self.endShape()
self.exit()
def run(applet):
frame = JFrame(title="Processing",
resizable = 1,
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
frame.contentPane.add(applet)
applet.init()
frame.pack()
frame.visible = 1
if __name__ == '__main__':
run(Sketch())
実際に生成されるpdfはこれです。
12012010 Python Gainer jython processing
processing使ってGainerにアクセスするjythonスクリプト。gainer.jarだけではなく、serialフォルダのRXTXcomm.jarにもclasspathを通しておく。
ボタンを押すと白黒するサンプルを書いてみた。
コード
from javax.swing import JFrame
from processing.core import PApplet
from processing.gainer import *
class Sketch(PApplet):
def __init__(self):
pass
def setup(self):
self.size(200, 200)
self.gainer = Gainer(self,'COM8')
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)
def draw(self):
self.background(0)
if(self.gainer.buttonPressed):
self.background(255)
def run(applet):
frame = JFrame(title="Processing",
resizable = 1,
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
frame.contentPane.add(applet)
applet.init()
frame.pack()
frame.visible = 1
if __name__ == '__main__':
run(Sketch())
12012010 Python jython processing
usbカメラを買ったので早速遊んでいる。ちなみに奥に見える黄色いのはjython本じゃなくて独習C++とかいう本。
drawメソッドでピクセルをいじくると色々とエフェクトがかけられるわけです。
from javax.swing import JFrame
from processing.core import PApplet
from processing.video import *
class Sketch(PApplet):
def __init__(self):
pass
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)
def setup(self):
self.size(320, 240)
self.camera = Capture(self, 320, 240, 12)
def draw(self):
self.camera.read()
self.image(self.camera, 0,0)
def run(applet):
frame = JFrame(title="Processing camera",
resizable = 1,
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
frame.contentPane.add(applet)
applet.init()
frame.pack()
frame.visible = 1
if __name__ == '__main__':
run(Sketch())
jython本が待ち遠しい。
朝からChucKで遊ぶ。
編集した結果をリアル気味に反映させたくなったのでperlで書いた(loop.pl)。
use Path::Class;
my $file = $ARGV[0] || die "filename not found";
my $t = file($file)->stat->mtime;
system "chuck", "+", $file;
while(1){
sleep 1;
unless ($t == file($file)->stat->mtime) {
system "chuck", "=", "1", $file;
$t = file($file)->stat->mtime;
}
}
あとはChuckのサンプル(test.pl)
SinOsc s => JCRev r => dac;
.5 => s.gain;
.2 => r.mix;
[ 1, 3, 5, 7 ] @=> int note[];
while( true )
{
Std.mtof(Std.rand2(1,3)*12 + 48 + note[Std.rand2(0,note.cap()-1)] ) => s.freq;
140::ms => now;
}
これで、chuckのほうをサバクラにするために
chuck --loop
で動かしておいて、別の端末から
perl loop.pl test.ck
これで、test.ckをエディタで編集して保存すると反映される。
Arduinoとかで制御すればもっと面白くなりそう。CdSセンサとかで変化するようなのをつくってみてもいいし、ChucKをネットワーク越しに制御できるので音サーバーというのも面白いかもしれませんな。