金曜日, 12月 28, 2007

20071228

卒展のwebがローンチしました。第一弾。今後トピックとか作品情報とか充実していきます。わざわざwordpressで作ったので利点を最大限活かしたいところ。
IAMAS 2008 » 情報科学芸術大学院大学第6期生修了研究発表会岐阜県立国際情報科学芸術アカデミー第11期生卒業制作展

情けないことにブラウザごとで変わる見た目に2日ほど泣かされてました。ブラウザのせいっていうか、自分のコードが間違ってたんだけど。毎回本番に一番勉強してしまうのは何とかしたい。春から社会人なのに...。firebugとか、自作のbookmarkletが意外と役立った。デバッグ重要。ガチのプロがガイド作ってくれてたのでスムーズにコーディングできた。

次は印刷物。これもひとひねり効かせてるので、大変だけど、いいものになると思う。

バイト先のwebのこともあって、jquery調べてたんだけど、面白い。というか、javascriptもっと使わなきゃと思う。locationオブジェクトとか駆使すれば、かなりクライアント側でも頑張れる。

で、ユーザビリティ(アクセシビリティ?)とかweb標準的にはどうかわかんないけど、自分のページで色々試してみた。
hysysk

linkのとこで、liタグの中にリンクがある場合、css側でcursor:pointer;になるようなclassを用意しておいて、クリックしたらaタグ内のリンク先を解析して飛ぶようにしてある。クリッカブルな領域が広くとれるので使いやすいのでは、と思う。かなり視覚的な作り。workでの画像の見せ方も、dtタグにタイトルと拡張子入れといて、クリックしたらcss書き換えて背景画像にしてる。まぁ、見にくいのはわかってるけど、楽しんでやってる。

木曜日, 12月 20, 2007

Reading newsfeeds

GainerでおなじみアカデミーDSPの小林さんがnodeboxワークショップやってる。
DSP

天気情報のrssを取得して表示。webライブラリを使う。
NodeBox | Web

text()メソッドに渡す際にstr()メソッドを使うんだけど、utf-8にdecodeしないとエラーになる。デフォルトのエンコーディングがutf-8になってないから?
3. 形式ばらない Python の紹介

文字コードは常に悩みの種。いつも何となく解決してるので、ちゃんと理解せねばと思う。


web = ximport("web")
fontsize(10)
news = web.newsfeed.parse("http://weather.livedoor.com/forecast/rss/21/40.xml")
y=0
xoff=10
yoff=10
for i in news.items:
s = str(i.description).decode('utf-8')
text(s, xoff, y*30+yoff)
y+=1


同じことをprocessngでやるとこうかな。もっと泥臭い感じ。
関係ないけど文字表示する場合PFont.list()で一覧とって配列の一番最初のを指定してあげればいちいちメニューからCreate Font...しなくて済む。


import processing.xml.*;
XMLElement xml;
XMLElement[] siteData;
xml = new XMLElement(this, "http://weather.livedoor.com/forecast/rss/21/40.xml");
XMLElement site = xml.getChild(0);
siteData = site.getChildren();
PFont font;
String[] fontlist = PFont.list();
font = createFont(fontlist[0], 10);
textFont(font);
size(400, 400);
int y = 0;
for(int i=0;i<siteData.length;i++) {
if(siteData[i].getName().equals("item")) {
XMLElement[] items = siteData[i].getChildren();
for(int j=0;j<items.length;j++) {
if(items[j].getName().equals("description")) {
text(items[j].getContent(), 10, y*30);
println(items[j].getContent());
y++;
}
}
}
}

土曜日, 12月 15, 2007

20071215

14日
プレゼン終了。2日目は他の人のも見て回れてよかった。
皆ちゃんとできてるし、今日的な問題意識持ってやってる。

昼ご飯食べてる時にカメラの機能の話になって、笑顔検出だとか、eye-fiだとか。
笑顔検出機能使って写真撮ったらすごくきもいのができそうで、やってみたい。しっかり照明当てて、高解像度で。やってる人いそうだけど。
【レポート】SEDテレビで見る写真、笑顔を逃さないカメラ - キヤノンの新技術 | 家電 | マイコミジャーナル

カメラって変な機能がついては結構消えてる印象があるんだけど、あんましそういうこと言ってる人いないんじゃないかな。「つかわねー」っていうエフェクトとか、録音機能とか。ポジティブに使ってみたい訳なんだけど。

15日
テクノロジーとは何か、みたいな話で、以前聞いて面白かったのは、川に橋をかけるのはテクノロジーではないが、ダムを造るのはテクノロジーである、という話。ダムは「川」を「水源」に変えてしまう、という点でテクノロジーだそう。正しい正しくないはおいといて、ひとつの世界の切り取り方。

こういうアクロバットには惹かれるものがあって、藤幡さんはデジカメについてる液晶ディスプレイによって、カメラがポインティングデバイスとして機能してる点をあげてた。最近論文執筆態勢を整えるにあたって寝袋をリサーチしてるのだけど、-20度まで耐えられるやつが1万3000円以下とか、足が分かれてて動けるやつとかあって、そういうの考えれば、建築とか家のあり方も変わって良さそう。

多分だけど自分が求めてるものってのはそういうものの本質を変えてしまうような何かで、単なる概念じゃなくて実際に動くもの。

LOGO A LOT
注文した。collect.apply載ってる。opnsdoのロゴも載ってるらしいので嬉しい。クリスマスギフトにどうぞ。

木曜日, 12月 13, 2007

sonicode1212


プレゼンは14日。

木曜日, 11月 22, 2007

AudioIn with MacBook built-in-microphone

MacBook Proに移行して、SuperCollider3も3.1にして、processingと連携させて遊んだりしたんだけど、
ある時マイクを使おうとしたら入力ができなかった。
解決法をwebで発見したので記録しておく。

アプリケーション>ユーティリティ>Audio MIDI設定を起動して、メニューから機器セットエディタを開く
+ボタンで機器セット追加。名前をsupercolliderとでもつけておく
内蔵マイク、内蔵出力にチェックして、完了
デフォルトの入力と出力をsupercolliderにしておく

で、SC3起動(既に起動してる場合は再起動)。
Serverをbootするとこんなメッセージが出るはず。
Number of Devices: 4
0 : "Built-in Microphone"
1 : "Built-in Input"
2 : "Built-in notification is on


"supercollider" Input Device
Streams: 1
0 channels 2

"supercollider" Output Device
Streams: 1
0 channels 2

新規ファイルを開いて、

{Out.ar(0,AudioIn.ar(1))}.play;

で無事左チャンネルから音が聞こえて録音もできましたとさ。

月曜日, 11月 19, 2007

today's glitch 3


この間、youpyさんに教えてもらったOSXで超簡単にglitchする方法で、

cat ファイル名 | sed 's/9/1/g' > ファイル名

てのがある。
sedコマンドで

s/検索文字列/置換文字列/g

って感じで数値を置換してる。数値を変えると結果も変わる。ファイルはmp3とかもいける。

同じようにprocessingでも単純にバイナリ形式で開いて、if文で置換。
数値は色々試さないとできたファイルがうまく開けなかったりする。finderのプレビューで見るのと、アプリケーションのプレビューで見るのと、photoshopで見るので結果が違ってたりする。

byte[] b = loadBytes("hysysk.jpg");
for(int i=0;i<b.length;i++) {
//println(b[i]);
if(b[i]==18) {
b[i]=1;
} else {
b[i]=b[i];
}
}
saveBytes("glitch.jpg", b);

土曜日, 11月 17, 2007

jython + p5#2

後半。本当にやりたかったのはここから。
irbでやってるみたいに、インタラクティブにコードを書き換える。
Processing by Ruby #2 - Quietstar

コードはrubyとほとんど同じ。下のコードをSketchTest2.pyとか名前付けて、保存。
jythonを起動して、

>>> from SketchTest2 import *

これでjrubyのloadと同じなのかな。

>>> applet = Sketch()

で、Sketchクラスのインスタンスを作る。

>>> run(applet)

とするとアプレットが動きます。ランダムな位置に四角が描かれては消される。
jrubyでの例と同じように

applet.stop()

とかすれば止まるし、

applet.strokeWeight(5)

とかすれば線が太くなる。これは楽しい。
GUIもCUIもPhysical Computingも全部組み込みたいものだ。

from javax.swing import JFrame
from processing.core import PApplet

class Sketch(PApplet):
def __init__(self):
pass
def setup(self):
self.size(200, 200)
self.rect(0, 0, 100, 100)
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)
def draw(self):
self.background(255);
self.rect(self.random(self.width), self.random(self.height), 10, 10)

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())

jython + p5#1

jrbでprocessingっていうこの記事読んで同じことがjythonでもできないかと思った。
Processing by Ruby - Quietstar

jythonのインストール
Installation

ここからリンク先をクリックしてjarファイルをダウンロード
Downloads

jarファイルをダブルクリックするか、terminalで

java -jar jython_installer-2.2.1.jar

と打ち込む。
GUIが出てきて色々聞いてくるので、色々答える。Installation typeはStanderdにした。
あとはひたすら光ってるとこをクリックしてくと、jython2.2.1というフォルダが作られる。

PATHを通す(コマンドサーチパスに加える、というのか)。terminalで

open .bash_profile

して、bash profileを開く。jython2.2.1フォルダ内にjython実行ファイルがあって、ホーム(hysysk)のすぐ下に置いたので、

export PATH="/Users/hysysk/jython2.2.1:${PATH}"

とすればよい。他に色々ある場合は:でつないでいく。${PATH}は忘れずに。
これでterminalから

jython

と打ち込むだけで起動するようになる。

Processingの方。
.bash_profileにprocessingのCLASSPATHを書いておくと実行する時に楽。
ここを参考に。
JRuby上のirbでインタラクティブにProce55ingを動かす:TKMR.blog.show

export P5_HOME=/Applications/Processing¥ 0133
export CLASSPATH=$CLASSPATH:$P5_HOME/lib/core.jar

こんな感じで。exportってのは変数の宣言みたいなものか。
Processing 0133じゃなくてProcessing¥ 0133。\か¥を入れる。フォルダ名変えればいいのか?試さない。

jythonでの書き方はここを参考に(via koyachiさん。いつもありがとうございます!)。
Backspaces: Processing: .. with Jython

ただ四角を描くだけのコード。SketchTest.pyとか名前付けて保存して、

jyhton SketchTest.py

で実行される、はず。上のサイトの人もあんましいいコードじゃないけどとりあえず動くからいいよね的なこと言ってるけど、僕もそんな感じです(僕の場合、どこがどう悪いかもわからない)。ご了承下さい。後半へ続く

from javax.swing import JFrame
from processing.core import PApplet

class Sketch(PApplet):
def __init__(self):
pass
def setup(self):
self.size(200, 200)
self.rect(0, 0, 100, 100)
def getField(self, name):
return self.class.superclass.getDeclaredField(name).get(self)

if __name__ == '__main__':
frame = JFrame(title="Processing",
resizable = 0,
defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
panel = Sketch()
frame.add(panel)
panel.init()
while panel.defaultSize and not panel.finished:
pass
frame.pack()
frame.visible = 1

金曜日, 11月 16, 2007

dial

本審査まであと1ヶ月を切った。泣いても笑ってもと言う感じ。数年前に比べれば情報も増えたし、環境も良くなってる分、求められるレベルは上がっている。

音楽機材のインターフェースと、テキストエディタのインターフェースを組み合わせたものを作るのに、ダイアル必要でしょ、ということでDialクラス自作。controlP5あるけど、基本的にSpringGUI使ってるので最終的な見た目を調整する際にもう少しフレキシブルにする必要があると思ったので。casey&benのp5本を参考に。基本的にはスクロールバーと同じ。まだまだ最適化できると思うけど、とりあえず。
ダイアルの中心部から離れれば離れるほど分解能が下がるのは、仕様ってことで。。。
dial : Built with Processing

使い方は、
Dial d = new Dial(x位置, y位置, 大きさ, 最小値, 最大値)
でインスタンス作って、

d.update(mouseX, mouseY)
でマウスオーバー検出、

d.press(mouseX, mouseY)
でロックして、

d.getVal()で値を取得。

日曜日, 11月 11, 2007

20071111

today's glitch 2


今日もglitch。

最初のものはグリッチを起こすタイミングをランダムに設定していたんだけど、周期的にずれ具合を変えるという風に変えてみた。koyachiさんが参考にしてたmikrosophtみたいに。
Flickr: Photos from mikrosopht

マウスのx位置とって何ピクセル目にグリッチさせるかってのを設定してる。どれくらいずらすかは毎回変わるので、同じ位置で何回かクリックしてみてもいい。preタグだと<があれなのでインデントこんなんですが、OSXだとprocessingIDEでコマンドキー+T(Toolsメニュー>Auto Format)で自動でインデントつけてくれるので、コピー&ペーストして試してみてください。

/*
inspired by HSYNC Glitch t.koyachi
http://d.hatena.ne.jp/koyachi/20071107
hysysk
*/
int interval= 1;
void setup() {
size(500, 375);
PImage imgsrc;
background(255);
noStroke();
int slideX = 0;
int slideY = 0;
int randSlideX = int(random(15));
int randSlideY = int(random(5));
imgsrc = loadImage("cXHwYYMtm1he27ib375S4A0e_500.jpg");
int glit=0;

loadPixels();
for(int j=0; j<height; j++) {
if(glit%interval==0) {
randSlideX = int(random(10));
randSlideY = int(random(5));
}
else {
slideX += randSlideX;
slideY += randSlideY;
}
for(int i=0; i<width; i++) {
int current = j * width + i;
int src = current + slideY * height + slideX;
if(src>=height*width) {
src = current - width;
}
pixels[current] = imgsrc.pixels[src];
glit++;
}

}
updatePixels();
}

void draw() {
interval = max(1,mouseX);
}

void keyPressed() {
saveFrame("glitch.jpg");
}

void mousePressed() {
setup();
}

土曜日, 11月 10, 2007

today's glitch


koyachiさんが作ってたglichを元に僕もやってみた。
きょうのglitch - koyachiの日記

jrubyでの書き方がよくわかってないのでところどころ書き換えてます。
hysncglitch : Built with Processing

マウスクリックで描画し直します。
コメントアウトしてるけど、キーを押すと画像の保存。

ポイントとしては外側のfor文の中の変数glitに入る乱数の値(1行読むごとに再設定される)が、

0の場合 
x軸方向にrandSlideX分、y軸方向にrandSlideY分ずれたところをソースにする

1の場合 
randSlideX、randSlideYの値を再設定

それ以外の場合 変化なし

という風に分岐してるとこかな。画像変える場合はsize()の大きさを画像の大きさに合わせてね。
色々試す。

(追記:試した結果、縦の方が長いの画像の場合、配列のエラーが出ます。原因究明中。眠い。)
(さらに追記:直しました。int current = j * width + i;としなければならないところ、widthがheightになってました。koyachiさんありがとうございます!)

金曜日, 11月 09, 2007

pre presentation


修士制作予備審査終了。前日に受けたアドバイス(とにかくでかくプロジェクションしろ、でかい音を出せ、今何やってるかわかるようにしろ)が効いて何とか乗り切った感じ。素早い変更ができるのはprocessingとかmax/mspの最大の利点。

複数行の入力を可能にして、回転を加えたところ、波形は面白くなった。
テキスト操作の結果、音響合成の理論ではどういう効果に位置づけられるのかというところを丁寧に調べていく必要がある。文字の幅を調整して周波数を変えるとか、90度回転させて打ち込むと普通の波形テーブルの編集みたいになるとか。

今回はキーボードでテキスト編集、マウスで形状変化、という風にしたけど、tex/tspでやってたみたいにコマンドっぽい機能をつければまた変わると思う。マウスじゃなくてフェーダーとかツマミで操作もしたい。最初はグリッチだったりエラーを利用して楽しむ感じだったけど、次の段階はそれをオーガナイズすること。耳を頼りに操作してかっこいいグラフィックができてるとか夢。

アカデミーの高桑教授が本気でプログラム書く時はモニタ見ないでうなだれた状態で目を閉じてキーボードをタイプするそうだ。大度君も本気で演奏する時は目を閉じるとか言ってたし、触覚的なインターフェースについてももっと考察してもいい。視覚的にいくらリッチにしたところで越えられない壁ってのはやっぱりある。

去年思い描いていた通りGUIもCUIもフィジカルコンピューティングもデザインも音響もグリッチも全部広く浅く盛り込んだ作品になりそう。

解放感というよりは、上記のようなブラフをどれくらい実現できるのかってとこの重圧。
とはいえ進むべき方向が見えつつあるのはいい。

日曜日, 11月 04, 2007

gnu.io.PortInUseException: Unknown Application

gainer使うのに一苦労してしまった。
まずファームウェアとライブラリのバージョンが合ってなかったのと、シリアルを使う際のこのエラー。

答えはfaqにあった。
Serial \ Libraries \ Processing 1.0 (BETA) \ Processing 1.0 (BETA)

Processing/libraries/serialフォルダ内のmacosx_setup.commandをダブルクリックすると、terminalが起動する。シリアルを使えるようにするプロンプトが出て、Do you want to continue?と聞かれるので、yを入力してエンター。アカウントのパスワードを入力して、そのままOSを再起動。無事使えるようになった。

さらによく見てみると、Gainer公式サイトにしっかり載ってました。
GAINER.cc | Tutorial / Processingで使う

慣れたつもりでやってると痛い目見るので注意が必要ですね。

20071104

まだ何もないけど(正確にはあるが、リンクを貼ってない)、webちょっとずつ作り直してる。自分の作品を見せるというよりは今後のため。

jquery使ってみたら非常に便利だった。最初メニューを定義リストで作ってて、dtをクリックしたらddの中身が表示されるようにしてたんだけど、コンテンツが増えると最初の読み込みが重くなりそうな予感がしたので書き換えた。innerHTMLにhtmlを動的に読み込む形式。何かでもこれもパーマリンク力弱そう。うまいやり方ないかなー。この人のページのこの画像(とか文章)っていうのにすぐアクセスできるようにしたいんだけど。栞とかポストイットみたいな感じで、そのページにいくと自分が気に入ってるところをすぐ見られる仕組み。

見た目も、構造も、ちょっと変わっててかっこよくて便利な物を作りたい。

でもまずは修士制作だろ。8日予備審査。

木曜日, 10月 18, 2007

build sndobj app

ありがとうございます!
Xヶ所村: すでにsndobjをインストールしていて、てっとりばやく自分アプリを作りたい場合。

sconsはmakeみたいなもので、ソースから実行可能ファイルを生成するのに使うコマンド。SConstructファイルがmakefileにあたる。

sconsの解説
sh1.2 pyblosxom : SConsについてちょっと調べてみた。Part.1

makeの解説
Make と Makefile の説明
MAKEの第一歩(入門)

miujunさんがおっしゃる通り、既にSndObjフォルダのsrcフォルダ内にexamplesというフォルダがあり、ソースファイルが置かれている。srcフォルダと同じ階層にはbinフォルダがあって、実行可能なファイルがいくつかできている。試しにsinusというのを実行する。

d242204:~/SndObj/bin hysysk$ ./sinus

とエラーが出る。

./sinus infile.wav outfile.wav timestr pitch thresh intracks outracks

このエラーとソースを読めば、実行ファイルに加えて引数を7つ指定する必要があることがわかる。サウンドファイルを読み込んで、タイムストレッチとかピッチチェンジするのかな。その時に綺麗に補完するアルゴリズムって感じ?

色々試す。

miujunさんのここのソースをビルドしてみる。
Xヶ所村: CygwinでSndObjなど

インクルード部分を

#include <SndObj/AudioDefs.h>

に書き直す(blogに貼る際にhtmlが書き換えられてる?)。あと、30秒は長い気がするので

int dur = 5;

にした。

で、example以下にsin.cppとか名前つけて保存。

次、Sconstructファイルの編集。

493行目の

# realtime IO examples
if rtio:

以下に他の既にあるexampleと同じような形式で書く。その上480行目で定義されてるBuildExampleメソッドに渡す処理を書けばいいのかな。何となくやってることは分かる。

sin = BuildExample('./bin/sin', './obj/sin.o', 'src/examples/sin.cpp')
Depends(sin, deplibs)

Sconstructファイルはpythonスクリプトなので、インデントなどちゃんと合わせておくこと。

terminalで/SndObjに移動して、sconsコマンド実行。こんな感じ。

d246112:~/SndObj hysysk$ scons
scons: Reading SConscript files ...
Building the Sound Object Library
Checking for Realtime IO support...
OS is MacOSX
Checking for C header file jack/jack.h... (cached) no
Host is little endian
swig doesn't exist
Python version is 2.3
Checking for C header file m_pd.h... (cached) no
Checking for C header file ladspa.h... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
g++ -o obj/sin.o -c -O3 -DMACOSX -Iinclude -Iinclude/rfftw -I/system/library/Frameworks/CoreAudio.framework/Headers src/examples/sin.cpp
g++ -o bin/sin -framework coreaudio obj/sin.o -Llib -lsndobj
scons: done building targets.

確かにgccでコンパイルする時のオプションはここからわかりそう。makeもsconsもコンパイルの詳しい仕組みもよくわかってないのでまだうまくいってないけど。要勉強。とりあえずはこれで。

ワークショップ形式で適宜説明受けながらのこういう授業があれば。。。てかIAMASの場合は直接先生のとこに行って聞くのが主体なんだから、もっと積極的になれよ僕、という話なんだけど。

miujunさん本当にありがとうございます!

20071017

画像から波形をpysndobjでできるようにした。

画像を扱うためのライブラリであるPython Image Libraryを導入するのに手間取ってしまった。OSXの場合、ソースからビルドしなければならない。諸悪の根源はPILというか、デコーダのlibjpegなんだけど。
PIL(Python Image Library)の導入 — JZUG
libjpeg.dylib のコンパイル方法 - Cube の日記
PIL のエラー解決編 - mitszoの日記
【コラム】OS X ハッキング! (42) OS XでGIMPを使おう! part4 | パソコン | マイコミジャーナル
あと海外でインストーラ作ってくれてた人もいたな。

この辺全部試して、
jpeg-6bフォルダ内で./configureとかmake installとかひたすら打ち込み、文字列をずらーっと眺める。

Imaging-1.1.6フォルダ内でsetup.py buildしたらちゃんと
--- JPEG support ok
が出るにも関わらず、pythonを起動してImageをインポート、jpegファイルを読み込もうとすると、
IOError: decoder jpeg not available
となる。

で、エラーログで検索したら、setup.pyを2回以上行う場合はbuildフォルダを消しておく必要があることが判明。無事解決。とは言え、どれが決め手だったのかは不明...。
decoder jpeg not available - あるシステム管理者の日常

sudo setup.py install

PILさえ入れてしまえば画像表示は超簡単で、

import Image
Image.open("kaho001.jpg").show()

だもんね。
P型フーリエ記述子とかいうのを試してみたいんだけど、できるかしら。僕に。

本当、こんなにわかってないものをよく毎日使ってるなぁと思った。ちょっと普段と違うことしようとすると途端に困ったことになる。

水曜日, 10月 17, 2007

20071016

OSXでc++でSndObj使ってみようとか思った。
SndObj Library Homepage

sconsが必要なのでインストール。
SCons: A software construction tool
scons-0.97フォルダへ移動しsetup.py install
permission deniedが出たのでsudo python setup.py install

sconsのインストール先は
/System/Library/Frameworks/Python.framework/Versions/2.3/bin/scons

.bash_profileのPATH編集。
export PATH="/System/...(略).../2.3/bin/:${PATH}"

:${PATH}つけとかないとosxのコマンド読まなくなるので注意。

sndobjインストール。
SndObjフォルダへ移動しscons

多分入った。SWIGがないとか出るけど、これはpythonとかrubyとかのスクリプトから使いたい時に必要みたいなので、問題ないだろう。

で、あとはコード書くだけのはずなんだけど、こっから先、わからず!

何でコンパイルの仕方とかってあんましwebにないのかな。本は本でwindowsだったりそもそもコンパイルの方法は載ってなかったり。。。g++に渡すオプションだとか、Xcodeで外部ライブラリ使ってビルドする方法とか。。。

とりあえずはpysndobjで様子見。todoとしてはfftしてifftした音を作ること。
教授陣とガチで向き合ってみるべきか。

開発の始め方、調べ方、コンピュータの仕組み、まだまだわかってない。

木曜日, 10月 11, 2007

sonic typeface interactive


processingでは、例えばPImage型の変数imgを作って、
img = get();
とすればスクリーンをキャプチャできるので、テキスト入力しながら音を出すことは簡単にできた。
画像はHello worからHello worlになるところ。波形エディタでこれくらいにまで拡大して、再生するとアニメーションみたいなものにもなる。再生ポイントに合わせて動いてくれないと駄目だけど。
hello world.wav

波形エディタはaudacityってソフト使ってます。
フォント変えると音も違う。Helvetica Neue UltraLightとか音も細いよ。

最初気づかなかったけど、波形エディタでみると音の始めにずっと1.0が入ってた(ヘッドフォンしてるとバツッときてあと無音で圧迫感)。なんだろうと思ってたんだけど、setup()メソッドの中でbackgroundを明示的に初期化してなかったせいで、デフォルトの値がマッピングされちゃってた。processingのwindowを目で見ただけではわかんなかったけど、耳ではバツッてのがわかって、波形エディタで確認するとよくわかるのが面白い。

スポイルされちゃう部分もあるから絶対最強最高って訳じゃないし、方向性もぶれちゃったりするけど、とにかくものができると色々発見もあるし考えられる。

applet

テキストエディタ感覚で文字打てる。文字数多いとピッチも上がる。deleteで消せる。領域内をクリックしないと動かないかも。アルファベットのみ。

水曜日, 10月 10, 2007

trash0003


pegは楽しかったまたやりたい。

trash0002


僕は絵が描きたかったのだった。これも2年前くらい。

trash0001


2年前くらいに作ったやつ。

月曜日, 10月 08, 2007

sonic typeface src



minimで任意の波形テーブルを作るのはすごく簡単で、AudioSignalインターフェースを実装すればいい。exampleにあるので、参考に。

generate()メソッドに渡されるsamp[]の中に-1から1の値を突っ込む。
512サンプルの波形テーブルにするため、512ピクセルの画像を用意して、上から下、左から右にスキャン。

解説というか、自分でちゃんとわかってるか確認のためメモ(下のリンク先にあるソース参照)。
まずピクセル全てに番号を振る。

色が閾値以下の値を持っている場合(元画像を黒で作ってあるので、適当に赤成分が50以下、としました)、その番号。それ以外は0にして、sndArrayに入れる。

sndArrayの中で最大値と最小値を出す。最小値は0が最初に0でない数値を受け取ったときの値になるはず。boolean型の変数startで判別。

0の数はoffsetという変数に入れて最終的に振幅をそんだけ分持ち上げる。

次のif文でまずsndArray内に0でない値が入っているか(描画すべきピクセルがあるか)を判別し、
x%2==1が真のときに下のエッジ(highとlowの差+offset)、偽のときに上のエッジ(offset)をプロット。
(10/10訂正:上下が逆だったので直しました。)

あとはmap関数に任せれば、0から1の間で適当に補完してくれる。lowを1に、highを0にすることで、元画像と書き出された波形を一致させることができた。

タイポグラフィの専門用語で言うところのカウンター(counter)、文字の中の閉じられて中空になっている部分とか、入り組んだ部分、つまりhighとlowの間に0が入ってるところは潰されてしまう。描画の密度に差を持たせれば擬似的に空間を見せることは可能かもしれない。miujunさんのは多分そういう感じ。

今のところ画像読み込んでるだけだけど、テキスト編集する感じで音に直結できればいいなと。カーニングとか、長体とか、フォントを変えることによって音が変化する。それでプログラミングができて、さらにその音の解析からまたコードが生成されて、フィードバックする。

sourceの方はprocessingで実行してクリックすると画像と音を書き出します。色々試してみて下さい。minimライブラリが必要です。
applet
source(zip file)

土曜日, 10月 06, 2007

20071006

今月号のstudio voiceにcollect.applyの作品載ってます。55ページ。
2000年代に発売された200枚のディスクガイドで、アルバムの長さを線の長さに変換して、円形に並べた。僕はそのためのコード書いた。もらったリストからxmlファイル作って、processingでグラフィックにして、svg形式で書き出したやつを渡した。データビジュアライズものなんだけど、手作業が加わってて、あんまし硬質な感じじゃなくてピタゴラスとか、ダヴィンチとか、そういう人らの物理とか数学の図っぽい感じに仕上がってて、結構いいんじゃないかと思う。

studio voiceを知ったのは東京で浪人してた時で、初めて買ったのが2001年9月号のwhole earth catalog 2001 in japanてやつ。今も持ってる。本当に高校卒業するまでは現代美術もデザインもクラブカルチャーも全く知らなかったし、多分そのまま一般大学に進んでたら一生知らずにいたんじゃないかと思う。とにかく書かれてることのほとんどが意味わからず、語り口もそれまでの自分が知ってるものとは明らかに違ってた。冒頭の宇川直宏とヤマタカEYEとYUKIの対談なんて、この人達一体何者でどこの世界の話してるんだって感じだった。そっから一気にわかりやすい文系サブカル少年みたいになっていく訳だけど、多分一般的にはかなりそういうのに目覚めるのにしては遅かったと思う。予備校ではその辺はリテラシーとして当然になってるから、やべーってなってどっぷりそっち浸かっちゃって、皆が普通に空気みたいに触れてるものを知識ベースで入れ込みすぎたせいで逆にださくなる現象に陥ってまた悩む訳だけど。

そんなことをバイトの後に本屋寄った帰り道で思ってたんだけど、今日見つけた道がすごくよかった。揖斐川はドナウ側説をより強固にした。夏にスイス村ってとこ行って来て、スイス的な要素はゼロだと思うんだけど、何かそこをスイスだと呼びたくなる気持ちはすごくわかったのと同じ。

何年か前の卒展で、森岡って先生が大垣のブラジル人向けスーパーの色とか造りとか、店員のお姉さんが無駄に美人だとか、商店街に売ってる変な生活用品とかの雰囲気を指して「グランドゥール」って言ってたのが結構気に入ってて、小手先で真似できない本物(必ずしも良いとは限らない)から滲み出る質感っていうか、蓄積された時間とか文化とか圧倒的な力の働きによって作り上げられたもの、どうしてもそうなってしまうものみたいなのを僕はそう呼ぶようになったんだけど、そんな感じ。いつかこれうまく説明できるようになるかなー。

sonic typeface

先日衝撃を受けたオシロスコープに猫及びポルノ画像。

これはtex/tspの音響生成エンジンに使えるのではと思い試してみた。とりあえず文字の画像データを用意して、そいつを2値化して振幅に変換。とりあえず読めるレベルにはなってるのではないだろうか。詳しい解説はまた後で公開します。このアルゴリズムは多分最終成果物にはしない感じなので...。
Helvetica Neue 75 Boldを240ptで使用。



オシロスコープで出したいなー。

元画像。コード書き換えて反転なしでできるようにしよう。



processingではこんな画像ができる。



音はこんな感じ。ご家庭の波形エディタなどで読めるかどうか試してみて下さい。
ktkr.wav

水曜日, 9月 26, 2007

sketch20070926



itunesのlibraryの一部を視覚化。綺麗に見せる方法はもっと考える必要あり。
この辺参考に。
Yahoo! Design Innovation Team
QQ!'s photosets on Flickr

20070925

深夜、ひと仕事終えて就寝。

朝起きてアルバイト。給料日で皆ちょっと明るい気がする。
職場の人達は皆本当に優しい。だから僕も皆に優しい。

帰りの日差しがかなりきてて、ヨーロッパみたいだった。揖斐川がドナウ川みたいだった。カリッとした描写。
空がでかい分、気分への影響もでかい。今日はいい。

住んでる環境の影響は大きくて、ツルツルのフューチャリスティックなイメージを
追い求めるのが辛くなったのもボーボーの草むらと野焼きの煙とジャージ姿の若者のせいだろう。
ここから21エモンみたいな未来...はないな。と。

未来は来ないから未来だ、って話もある。未だ来ざるもの。
予想通りになるってことは、未来は来なかったということ。

夜は夜で名月だし、夕方から夜へのつなぎは完璧。
深夜自販機までのつもりがコンビニまで歩いてしまった。少し寒かった。
多分同じような人もいることだろう。経済効果。

明日あたり近い将来について話す。

金曜日, 9月 21, 2007

sketch20070921

図書館で借りた奥村晴彦著『C言語による最新アルゴリズム辞典』読みながらprocessingでsketch。

最新っても8年前のだけど。

lorenzアトラクタを描くアルゴリズムに、色々変な値突っ込んで遊んだ。繰り返しをめちゃめちゃに増やしたり、xとy入れ替えたり。

ドラゴンカーブとかも試したんだけど、どっか間違ってるらしくちゃんと描けてなくておもろい。
いかにもカオス系っぽい感じをなくしつつ、調整すればそれはそれでありなんじゃないかと思いました。視覚効果的には。アルゴリズムグリッチ。

...真面目に勉強します。

python版とかやってる人もいます。
Pythonでアルゴリズム - Konnichiwa, A doumo



これは割と素直な描画のコード。元になってるCのコードみたいに表示位置をうまく指定する関数とか書けなかったので結果見ながら調整してます...。

float a = 10.0;
float b = 28.0;
float c = (8.0/3.0);
float d = 0.01;

float xpen = 0;
float ypen = 0;

int h = 0;
int alp = 0;
int dir = 1;

void setup() {
size(400, 400);
background(255);
smooth();
strokeWeight(0.05);
int k;
float x, y, z, dx, dy, dz;

x = y = z = 1;

scale(14);
translate(14, -20);

for(k = 0; k < 3000; k++) {
dx = a * (y - x);
dy = x * (b - z) -y;
dz = x * y - c * z;
x += d * dx;
y += d * dy;
z += d * dz;
if(k > 100) {
plot(x, z);
}
else {
move(x, z);
}
}
saveFrame("lorenz.tif");
}
void move(float x, float y) {
xpen = x;
ypen = y;
}

void plot(float x, float y) {
if(alp<0 || alp>100) {
dir = -dir;
}
alp = alp + dir;
println(alp);
stroke(0,alp);
//point(x, y);
line(xpen, ypen, x, y);
xpen = x;
ypen = y;
}

土曜日, 9月 15, 2007

20070914

久しぶりにprocessingで作業してた。XMLを解析してグラフィックに。まだ途中なので公開しないけど、いずれ。

ちょっとjavascriptに行ってる間(やっと「初めてのJavascript」終わった)に、色々動きがあったようだ。
個人的に興味深いのが徳井さん。

Music 2.* Lab

タイミングのためにスレッドのとこきっちりやったり、processingのライブラリを使わないでjavaで実装したりできるあたり、さすが。本当に音系のプログラミング(で、ちょっと今までにないものを作ろうという志向)の話題はほとんどないので心強い。

ほとんどないっていうか、あったらあったでド変態。

Xヶ所村: オシロスコープに猫を

最高過ぎる。

で、processing本もまた出てます。開発者のben flyとcasey reasが書いたもの。

Books \ Processing 1.0 (BETA)

サンプルも落とせます。ちょっと動かしただけだけどオプアートっぽいのからゲームから物理シミュレーション(昔のsodaplayのソースコードもある!)から、グラフィック的にも洗練されてて、かなりいいんじゃないかなー。まずグラフィックとかから入って、それがどういう規則で作られてるかってのを、ちゃんと興味持って勉強できる気がする。ソースコードちょっと変えるだけでも面白そうなもの作れると思うし。こんなのとか。本当にパラメータちょっと変えてアニメーションにして適当にキャプチャしただけ。


max/msp night schoolとかもあるんだよねー。
2007 CNMAT MaxMSP Night School, taught by Ali Momeni | Ali Momeni

ここに来て宿題どっさりって感じだ。

金曜日, 9月 07, 2007

月曜日, 9月 03, 2007

ppm

画像研究入門してみた。色々入門ばっかりしてる。入門のプロになりたい。
画像研究入門

portable pixelmapて名前がいい。

とりあえずCでppm形式の画像を作ってみたはいいが、開けないのでImageMagickを入れる。
Happy KARATE Mac OSX Tiger へのImage::Magick インストール

相変わらず不安になる文字がずらーっと。
unixにも慣れていきたい。

convert filename.ppm filename.gif

でgifに変換。

ToyViewerでいい気もする。
ToyViewer for Mac OS X

cのソースを元にpythonでsketch。200*200ピクセルの画像で、1ピクセルにそれぞれr g bの値が入るので3をかけてる。最後に改行入れないとfile errorになるってとこにはまった。多次元リストでうまいことやればもっと色々描けるはず。要勉強。


size = 200*200*3
try:
f = open('test.ppm', 'wb')
f.write('P6\n200 200\n255\n')
for i in range(0, size):
f.write(chr(i%255))
f.write('\n')
f.close()
print "Done."
except:
print "file error"

日曜日, 9月 02, 2007

Electrical Tape Sign Art

修悦体、騒ぎ過ぎじゃないかと思う。
修悦体で新宿駅が便利に(佐藤修悦さんのガムテープフォントドキュメント) トリオフォー[34]

独特な形に洗練された文字がガムテープで作られていたこと、それが特に専門的なデザインを学んだ訳でもない駅員の手によるものであったこと、何より好意からであったこと、は確かに驚きだったし、心温まる話であった。

けど、展覧会が開かれたり、皆が駅で写真撮るようになったり、装飾が過剰になってきたり、グッズが作られていったりすると、違うんじゃないかと思う。

サインとしてアイキャッチと可読性は重要だと思うし、見ていて楽しくなったりその場の雰囲気を演出してたりすれば尚いいと思う。話のインパクトとしてはそりゃあ素人が誰に頼まれた訳でもなくあんなものを作り出した方が強いとは思うんだけど、「デザイン」という観点からすれば、今の持ち上げられ方は偏ってると思う訳です。

そもそもテープでサインを作ること自体は他でもやってる人はいる。勿論これらは職業デザイナーが費用対効果を考えた上で作ってるものではあるのだけど。
Vier5
Fulguro

『情報デザイン 分かりやすさの設計』という本の中に、「公共情報デザインの落とし穴」というタイトルで興味深いコラムがある。

"汎用のデザインは、地域固有の習慣に足下をすくわれる。しかも周囲の環境の変化に合わせて成長する余地も想定されていない。"

"デザイン上の課題に直面している人々、能力のあるなしにかかわらず、維持管理の必要と欲求に突き動かされて手を下した人々から学ぶべきなのである。"
情報デザイン

普段使っている駅の過剰な貼紙やアナウンスは、本当に不快で排除すべきだと僕は思う。が、おそらく必要だからやっている訳で、つまりは元々のデザインが成功していないということ。それは見直されるべき問題なんじゃないか。修悦体も、公共空間におけるデザインの、ひとつの批評として受け取りたいと思う。

こんな凄い人がいる、とか調べてみるとこんな面白いことがある、というのを伝えたいとか、広めることは悪いことではないと思うし、興奮を抑えるのは大変だし、受け取る側のリアクションにまではなかなか責任もとれないとは思うけど、単なる面白看板発見みたいな感じで終わるのは勿体無いと思う。マスメディアじゃないところから発信、というところも良かったのに、結局マスメディアによる報道と同じようにツーリズム的な消費がされてしまうのは残念だ(沢山見たい気持ちはわかる。Tシャツとか欲しくなるのもわかるけど、そこは大人になりましょうという話)。

土曜日, 9月 01, 2007

a digital remake

» A Digital Remake

装飾イニシャル文字をプログラムで生成。洒落た論文だな。
これぐらいやってみたい。

で、装飾に使われてるのがCornuってライブラリ。それっぽいのが簡単に作れそう。
NodeBoxのライブラリの使い方は

~/Library/Application Support/NodeBox/

にフォルダごと入れてしまえばいい。もしくはスケッチと同じ階層。

Core Imageライブラリとか使ったら結構簡単に面白おかしいことができるんじゃないだろうか?
今何となくjavaでフィルタとかやってる(完全に趣味)んだけど、こっちにしようかな。python覚えたいし。
Java Image Processing - Blurring for Beginners

cornuをほんの少し触ってみた。リストを入れ子にして位置指定すれば簡単。
あとは一発でjpgなりgifに書き出せたらなー。

cornu = ximport("cornu")

size(400, 400)

path = [[(0.1,0.1),(0.15,0.3),(0.4,0.2),(0.6,0.6),(0.4,0.4),(0.5,0.4)],
[(0.1,0.1),(0.15,0.25),(0.4,0.2),(0.8,0.6),(0.35,0.2),(0.5,0.4)],
[(0.1,0.1),(0.15,0.35),(0.4,0.2),(0.8,0.6),(0.2,0.4),(0.5,0.4)]]
nofill()
stroke(0)
for i in range(0, 3):
cornu.drawpath(path[i], tweaks=20, points=False)

水曜日, 8月 29, 2007

note20070829

eclipse + flex 2(actionscript 3)
Aaron Spjut » Blog Archive » Continuous Integration with Flex 2 (Actionscript 3), FlexUnit, CruiseControl, Apollo and subversion on OS X

build.xmlのfailonerror="true"をなくしたらビルド通った。

eclipse + CDT(C/C++)
HelpからSoftware UpdatesのFind and Install...
Search for new features to ins...をチェックして、Next>
New Remote Site...でNameにCDTとか名前付ける、
URLはhttp://download.eclipse.org/tools/cdt/releases/europa

OpenGL
ProjectのPropertiesでTool settingsのMacOSX C++ LinkerからMiscellaneousを選び、Linker Flagsに
-framework OpenGL -framework GLUT
と追加。
あとはこの辺で遊ぶ。
OpenGL Video Tutorial - Home

OpenALもこんな感じでやってこう。

月曜日, 8月 20, 2007

pink noise

最近全く音沙汰無しとなってるopenframeworksを動かしてみる。
色々面倒なことを先に設定しといてくれてて、Xcodeなど統合開発環境の使い方も慣れていないためフルスクラッチで書く時どうするのか全くノーアイディアなんだけど、サンプルからソースを読んで何かしら勉強するのと、使うとこだけに減らして何かやってみようと思った。

audioOutputExampleてフォルダのプロジェクトを使います。
サイン波とホワイトノイズを生成するサンプルで、これのソースを読めばサイン波の作り方とホワイトノイズの作り方はわかる。

lAudio = new float[256];
rAudio = new float[256];

ってfloat型の配列を256個作って、audioRequested関数内のfor文で全てに値を入力してる。
サンプルではboolean型の変数bNoiseがtrueならホワイトノイズ、falseならサイン波という感じで指定されているが、式の形は同じ。右辺をsample * volume * leftScale;とすればサイン波(すぐ上のところでphaseの値を変えつつsin()関数で値を取得しsampleに入れている)で、ofRandomf() * volume * leftScale;とすればホワイトノイズが鳴る。単にofRandomf()関数で乱数を作ってるだけ。

で、今回はofRandomf()でなく、自分で関数を用意して、ピンクノイズを作ってみようと。

lAudio[i] = output[i*nChannels] = pinkNoise() * volume * leftScale;
rAudio[i] = output[i*nChannels + 1] = pinkNoise() * volume * rightScale;

こんな感じでofRandomf()のように呼び出したら値を返してくれる関数を作ればいい。が、そんなものを僕が自分で作り出せる訳もないので、googleでアルゴリズムを探す。こんなん見つける。

pubs on one-over-f (1/f) noise

pink noiseが1/fの揺らぎでなんとかかんとかで作業に集中できるとかいう話は聞いていたが、色々変なノイズを研究してる人達がいる。

そっからここに飛ぶ。

DSP Generation of Pink Noise

SuperColliderの開発者であるJames McCartneyも何やらやってますね。
The Voss algorithmてやつを使ってopenframeworksでピンクノイズを鳴らす。ホワイトノイズをソースにして低いオクターヴの連続を作っていく(?)手法。

C++のクラスとかその辺のことがまだわかっておらず、processing感覚でこのままクラスを作ってインスタンス作ってpn.pinkNoise()って感じで値をとろうとしたら、errorになった。値を生成するだけのコードから移植した際に何か見落としてるのかもしれない。

という訳で、特にクラスは作らずGetNextValue()関数をpinkNoise()関数として値を返してくれるような設計にする。PinkNumberクラス内のprivate変数をopenframeworksのプロジェクト内のtestApp.hのtestAppクラスにコピー&ペースト。コンストラクタの中身はtestApp.cppのsetup()関数の中に。

で、int GetNextValue()関数を一番下にでもコピー&ペーストしてpinkNoise()って名前にしてofRandomf()をpinkNoise()にすればいけるかな。あといらないとこ消して、いるとこ残して。pinkNoise()関数はそのままだと0〜128で数値が帰ってくるので0.05fをかけてます。これは単に、音がいい感じだからってだけ。testApp.hにint pinkNoise()を宣言しておくこと。

で、ビルドしたもの(build>Release>openFrameworks)とソースをzipで圧縮してここに置きました。キーボードの+と-で音量変えられます。

noise.zip


何かインタラクション仕込みたかったらmouseMoved()関数などに書けばいいかな。ドキュメントなど参照しつつ。
openFrameworks: documentation

ビルドしたものとソースは音に関係するとこをint型からfloat型にしてあります。グラフィックもつけてるから試せばわかるし当たり前だと思いますが、縦軸の解像度が上がって音が綺麗です。int型だと小さくブツブツ鳴ってる音がある。

オーディオマニア的な世界は足を踏み入れると電源が...とか水晶が...とかこの機械で地球の磁場の歪みを補正して...みたいな世界であれですが、プログラムソースの部分でも色々言ってる人いそう...もっと深い部分でだろうけど。

「ノイズの中にクリスマスソングが聴こえるんだけど聴こえる?」とか言って単なるホワイトノイズを聴かせるとほとんどの人が「聴こえる」って答えるらしい。人間はノイズの中から何らかのパターンを見いだしてしまうとか何とか。そういう傾向が強い人は何かと何かを組み合わせたり、思いもよらぬ新しい使い道を発見したりする水平思考に向いてるんだって。ピンクノイズを聴いてると作業が捗るってのはそういう意味でもあるのかも。

細かい話は今後また勉強するとして、とりあえず何かしらのアルゴリズムを使ってopenframeworksでピンクノイズ(本当にそうなのか不安になってきたけど、音的にはそれっぽい)が鳴ってよかったなと。

これを元に次はminimのPinkNoiseクラス作る。

あと、色々な色のノイズ。
Colors of noise - Wikipedia, the free encyclopedia

日曜日, 8月 19, 2007

20070818

バイト先のwebができつつある。真のweb標準野郎からしたら大量失血しそうな感じかもしれないけど...。帰りにプリンもらった。いつもおいしい差し入れをいただけるので嬉しい。社食をちゃんと食べてればそこそこ野菜も採れるし。生活リズムを改善するにはちょうどよかったと思う。25分の自転車通勤もいい運動。今日は帰り道ハックがうまくいって、静かで安全な道を発見できた。ipodの音量を無駄に上げ過ぎることなく、しかも歌いたくなったら歌える。

学校着くと春成さんのDVDが置いてある。東京展の前にコンペとか色々諸々あれしてるらしく曲を調整する時間がなくてどーんと提供しただけになってしまったけど、今後また何かできるといいな。

早速観ようと思ったんだけど僕のマシンは壊れててDVDを読み込めないので、共有のmac miniで鑑賞しようと思ったらこんなことになってた。

マウスを動かすとこのでっかい白い四角(しかも半透明)が動く。誰かの作品かと思ったけど、何かmac本体はあれな音してるし、再起動してもまたこれがでちゃうので、一通り撮影したら仕方なく別のマシンで観ることに。

で、観た!音とアニメは付かず離れずの感じで、逆に色々しなくて良かった気もする。絵がかわいいんだー。東京展(通称いまからだもんで展)行く人は観て下さい。

ちょっと前にcollect.applyのwebがリニューアルしてる。サーバエラー出たときとか、かっこいいんだ!しかも

"Do we have to tell you not to take or use anything without asking first?
We’re reasonable people and more than likely to help and share if we can."

「事前の承諾もなしにコンテンツを持ってったり使ったりするなって僕らは君に言わなきゃなんないの?
僕らは理解ある人間だし、それよりもっと役に立ったり分け合ったり、できることならしたいと思ってるよ。」

ってね。やるー。webページ自体もナンバリングされてるし。

例えば山形浩生さんとか、hippocamp(久々に見たらv3.0になってた)とか、すげーと思うのは、売られてるものより質が高いんじゃないかっていうものを無料で配ること。単にお金節約できて嬉しいってんじゃなくて、お金で計れない価値を突きつけられてる気がする。何か、いいものを見たり、いい体験をする。それに対して、お金を払う。それはそれで良い。けど、そこでお金別にいらないよって言われた時に、どうすればいいんだって思う。

レーベルオーナーでもあるblue sky researchのSommerbokkenはオールタイムベスト。本人は消したがってるみたいだけど...。
Sommerbokken

bsrの他のお気に入り集。昔processingでsonia使って音響解析した映像作品とかもいち早く作ってたな。どうやって生活してるんだろ...。
Greenish Yellow
Northern Rainy City
Happy Samantha Live Version

さすがに時代を感じる音ではあるけど、僕は未だにほわーんて感じのシンセ、ビート、ちょっとボイスサンプルってのに弱いみたいです。Happy Samantha Live Versionはアルス行った時に調子乗ってバーで人生で初めてDJ(itunesのプレイリストかけただけ)した時にかけて盛り上がった。daito君がめっちゃ酔ってHow deep is donau? How deep is my love?とかいうラブレター書いた可愛い店員さんが踊ってたのを思い出す(確かにすげー可愛かった!)。

金曜日, 8月 10, 2007

20070810

仕事半分勉強半分。

来週、前林さんと修士作品についての面談の約束。
やっと生活がまともになりつつあるというか、ちゃんと自炊してる。掃除もしてる。

23日東京入りです。就職活動と、これ。
いまからだ - IAMAS in Tokyo
春成つむぎさんの映像作品に音つけます。という訳で久しぶりに音作り。

27日くらいまでいる予定なのでタイミング合う方は是非。マニアックな作品が集まってていい展示になると思います。空間構成は難しいらしいけど...。ショーケンの作品もある。永野さんの「またりさまBinary」とか、キレのいい音してて羨ましい。

yamakkが開発してるnajimiが面白い。地図と記憶とおすすめと色々。タイトルが自由につけられるから、店の名前も通称で登録できたりする。大垣に「LANDY SHOP」っていうブラジル人向けのスーパーがあるんだけど、確かに僕らは「ブラジルショップ」って呼んでた。何かそういう思い出みたいなものも封じ込めておけるあたり、メディア美学(yamakkが修了したスタジオ)だと思う。tzibが極めて正確に店名をタイトルにしてたりchanmaruが「ロハス」ってタグ付けてたりするの見てると「らしいなー」とも思うし。
najimi prototype

世にあるおすすめが全然あてにならない、世の中で面白いとされてるものが全然面白くない。優劣じゃなくて、多分育った環境とかそういうのも影響してるんだろう。yamakkが言うように、"同じ釜"感覚。実家の味噌汁が一番おいしい。

ってもひきこもってばっかりいられないし、飽きちゃうから適度なノイズを取り入れつつ新しいものを見つけていく。

にしても、メディアキッズも神も成長したよなーと思う。写真とか、おもしろリンクとか、学内の噂とか共有してたホットラインからwwwへ。

ここ最近色んな人と知り合って、ネットってのはこう使うんだよ!ってのを間接的に教えてもらった。不必要な画像は非表示にするし、アニメーションは止めるし、ポップアップはブロックする。読みやすいように整形する。

あの手この手で見せよう、注意を向けさせようとするのも、それをブロックするのも、どっちもデザインと呼ばれている。僕はブロックする側に進もうと思ってる。そんなんだから当然、儲からない側になる。けどやっぱ、いらないものはいらないと思う。広告デザインは、武力みたいなものだと思う。そこに惹かれちゃうところも認める。

少し前から、趣味っていうかライフワークとして、来年から英語が必須になりそうな感じでもあるので、プログラマブルなサウンドデザインの話題を取り扱ったページを作りました。もうこんなんもいい感じに涸れてきたな。目指せDSP界のrei harakami。
デザイニングサウンド

木曜日, 8月 09, 2007

ess vs minim

processingで音を扱うライブラリのessminimのどっちがどっちだって話。徹底比較した訳ではないので、自分が使った範囲で覚えておこうと思うところのメモです。

ess
メリット
FFTを使う場合、damp()メソッドで値を滑らかにできたりして、ビジュアライゼーションには便利。
envelopeクラスがあるので、オシレータを組み合わせて音を作っていくのには向いてるかも。フィルターなどエフェクトもminimよりかは充実してる。

デメリット
サウンドファイルを読み込む場合、モノラルでしか扱えない。
mp3ファイルを読み込みたい場合は下記のファイルが必要。
tritonus_share.jar
mp3spi1.9.2.jar
jl1.0.jar
スケッチのあるフォルダにcodeというフォルダを作って入れておく。

長いサウンドファイルを読み込む場合はAudioStreamクラスを使う。その際

void audioStreamWrite(AudioStream theStream) {
// read the next chunk
int samplesRead=myFile.read(myStream);
}

というようなメソッドを作ってFileクラスから読み込んだ音をチャンクに入れていく(theStreamという仮引数は何をしてるんだろう...)。

minim
メリット
サウンドファイルが使いやすい。mp3ファイルが外部ファイルなしでそのまま使える。AudioSnippetクラス、AudioSampleクラス、AudioPlayerクラスなど用途に合わせていくつかクラスが存在する。AudioPlayerクラスはステレオでファイルが扱えてleftやrightというフィールド変数を持っているので、FFTなどで左右の値を取得できる。

BeatDetectクラスもあったりして解析系は便利(精度は怪しいかも知れない)。

デメリット
envelopeなどがなく、複雑な音の加工には向いてないかも。envelope、自分で用意するのだろうか(pythonだけど、ここのSound11 Kick drumみたいに)...。

僕の場合、現状ではできることとかやりやすさに合わせて使うライブラリを変えてます。まだまだどちらも発展途上。

興味があるのは、相変わらず自分で波形を定義する方法。
ess
Processing 1.0 (BETA) - Functional example of ESS Generative Audio

minim
exampleにUserDefinedSignalってのがあります。UserDefinedEffectってのもある。面白そう。

知らなかったけど、processing公式サイトにライブラリのサンプルコードがありますね。ライブラリの配布元とは違う内容で、参考になります。今日記事書いて良かった!
Learning \ Processing 1.0 (BETA)

金曜日, 8月 03, 2007

iamas openhouse 2007

明日からopenhouseです。所属スタジオの有志展とプロジェクトの展示をします。
どちらもプロトタイプの展示となりますが、考えてることや、普段の生活などの話はできると思うので、興味のある方は是非。5日(日)はアルバイトのため夕方18時頃に顔出すと思います。遠路はるばる来て下さる方もいらっしゃるようなので、できる限りもてなしたいです。

展示作品tex/tspから1曲。画像から文字に変換して、さらに音に変換。狙い通り音の重なりからテクスチャが生まれてリズムが自然発生してる。javaのheap errorが出る時の音が最高にかっこいいんだけど、録音できない。ラインから出せばいいんだけど、何か邪道な気がするので。

mp3にしたら多分音がクリップしてるせいか変わっちゃうのでそのままwavで。
redsensation.wav (audio/x-wav Object)

あと、プロジェクトの展示の方はgainerからの入力をmax/mspでとってoscでprocessingに渡してさらにapplescriptでitunes制御するとかいう力技を使ってます。また後日まとめる予定。

木曜日, 8月 02, 2007

line-height problem

preとかblockquoteタグ使うと以後の文章の行間が詰まるんだけど、これは何故?
忙しい時に限ってこういうの、目につく。そしてちまちま直してる(場合ではないし、賢い方法ではない)。

average.js


Max/MSPで受け取る値の平均をとるjavascript書きました。Maxでのjavascriptって何か慣れなくて、すぐ忘れてしまう。できたと思ったら思いっきりgainerの公式サイトにありました。今まで何回もノイズだったり急激な数値の変化に悩まされてきたもんなー。
GAINER.cc | Cookbook / 移動平均法によるスムージング

これよりかはちょっと柔軟になってて、setメッセージで配列の長さを可変にしてあります。デフォルトは100。resetを送ると配列の中身を全て0にします。

こういうインタラクティブインスタレーションなどでよく使うメソッドはもっと共有されるべきだと思う。
averagejs.zip

土曜日, 7月 28, 2007

金曜日, 7月 27, 2007

brainf*cksp

bfsp

brainf*ckをp5に移し替えて、tex/tspと混ぜ合わせてちょっと改変。現在オシレータのみ実装。ロジックの部分はbrainf*ckそのまま。while文にあたる[]を()に変えた。+-でポインタ内の数値を上げ下げして、オシレータにはその数値を渡す。ここが迷ってるなぁって感じ。[]でループを作る場合は強制的に矩形波を鳴らしてしまう、という設計にしてもいい気がする。

書き方は
> ポインタを1進める
< ポインタを1戻す
+ ポインタの指す要素の値を1増やす(インクリメント)
- ポインタの指す要素の値を1減らす(デクリメント)
. ポインタの指す要素の値を外に出力、音を鳴らす
( ポインタの指す要素の値が0であれば対応する次の)までジャンプ
) ポインタの指す要素の値が0でなければ対応する前の(までジャンプ
~ サイン波を生成
/ ノコギリ波を生成
^ 三角波を生成
[ または ] 矩形波を生成

440Hzのサイン波を鳴らすには
++++++++++++++++++++++(>++++++++++++++++++++<-)>~.
とすればいい。簡単に説明すると(の前の+の数だけ()の中を繰り返している。
以下、詳しい説明(本当に自分がわかってるか確認用)。

ソースコードのmがポインタ、mpがポインタの要素の値。初期値は0。

左から右に処理が流れる。
m[0]の要素の値mpがどんどん+で増やされていく。
+は22個なのでm[0]=22。
(にぶつかる。m[0]の要素の値は22で0ではないので、そのまま進む。
>でポインタをインクリメントしm[1]にする。以後の+はm[1]の要素の値に対して行われる。初期値は0。
+が20個。m[1]=20になったところで
<でポインタを1戻してm[0]に。
-でm[0]の数値をデクリメント。
m[0]=21
)にぶつかる。m[0]=21で0でないので(に戻る。
>でポインタがm[1]になる。
+が20個。m[1]=40になるまでインクリメント。
<でまたポインタがm[0]に戻る。
-でm[0]の数値をデクリメント。
m[0]=20
という感じで、20足すループを22回繰り返す。m[0]=0の時は)を通り抜ける。
<でポインタをm[1]にし、その数値440を~に渡してあげて、.で出力すれば440Hzのサイン波が鳴る。ついでにクという字もコンソールに出力される。

適当なエディタに上記のコードを書いて保存(拡張子はbとかtxtとか)し、processingのコードを実行してみて下さい。ウィンドウが出るので、クリックして、ファイルを選びます。
うまくいけば実行されます。元々のbrainf*ckは,でコンソールからの入力とかもとれるのですが、processingではちょっと面倒だったので実装してません。eclipseとかで動かしてれば別ですが。

音を鳴らすにはminimライブラリが必要です。
Code Log » Minim

brainf*ck参考リンク。
彼のInterpreterをほぼそのまま使ってます。
UMMO Letters » The Java Brainfuck Compiler
brainf*ckのコーディングについて参考にしたページ。
Brainf*ck
Brainfuck - Wikipedia, the free encyclopedia

もうちょっと使いながら何ができるか考えていこう...。
こういうのも面白いかもしれない。
西尾泰和のブログ: GRINEditを使ってソースコードの可視化


インタプリタ部分のライセンスです。僕のとこに関してはpublic domainで。
Copyright (C) 2002 Petter E. Stokke

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

sketch20070727

水曜日, 7月 25, 2007

comments from miwa & maeda

こうなってくると、プログラマーじゃないと評価できないものですね。論文では、ソフトウエア・アートや現在の動向を盛り込めると思いますが、そのなかでプログラムそのものの美しさの尺度について述べるのが難しそうですね。年次では、これまでにない音体験の創出という方向でしたが、方向転換したようですね。担当教官と相談しながら、突き進んでよいかと思います。

やりたいことはわかった。挑戦する甲斐のある研究だと思う。オリジナルな作品として結果を出すのはとてもむずかしそうだが、極めてほしい。健闘を祈る。

火曜日, 7月 24, 2007

math and physics

無事vj終えて、朝電車で帰ろうとすると、もう子供やら学生やらで溢れている。
夏休み始まってますーって感じだ。僕はまだ心の準備ができてない。

自転車で学校へ向かう途中、どっかの家の窓から子供に「おーい!バイバイー!」と声をかけられる。ハローグッバイ。

「夏休み?何言ってんの。毎日夏休みのくせに。」

と桂英史に言われたのはもう4年前。永過ぎる春は大物カップルも破局させるが永過ぎる夏(予備校含めたら6年)にはそれでもまだまだ山積みの宿題がある。

『ゲーム開発のための数学・物理学入門』を読み始める。ノートが一冊、余っていたのでそこに数式だのグラフだの書いて問題を解いてみることにする。別にゲーム作る訳じゃないけど。

読み始めていきなり、2のべき乗かどうかを判断するC++のプログラムはこんなんです、と出てきた。

bool powOfTwo(int num) {
return !(num&(num-1));
}

まぁここは関数の便利さとか、数学とプログラミングの関係を説明するためだったのでさらっと読み飛ばすとこなんだけど、このアルゴリズムが気になってしまった。
何である整数から1を引いたものを&で比較したらtrueだのfalseだのがわかるんだ?そもそも&って何?

試しにprocessingで上記のコードを書いてみる。

void setup() {
println(powOfTwo(4));
}

boolean powOfTwo(int num) {
return !(num&(num-1));
}

実行すると、

Semantic Error: The type of this expression, "int", is not "boolean".

というエラー。int型で比較してそのままboolean型を返すのはできないみたい。
で、どんな値になってるか調べてみる。

void setup() {
powOfTwo(4);
}

void powOfTwo(int num) {
println(num&(num-1));
}

実行すると、0が出力される。powOfTwoに渡す数値を色々変えて試すと、2のべき乗の時に0になる。
一体これは何なんだと思って、まず&が何やってんのかを調べる。wikipedia先生ー。

「数理論理学において論理積(ろんりせき、合接(ごうせつ) 連言)とは、与えられた複数の命題のいずれもが例外なく真であることを示す論理演算である。ANDとも表す。」

ということで、trueとtrueの場合、true。trueとfalseの場合、false。falseとfalseの場合、false。
trueが1で、falseが0の掛け算。

ここまできて、受け取った整数を2進数にして、1引いた数と比較してるってことがわかった。
えーと、2の2乗である4の場合、100でそっから1引いた3は11。0をつめてやると011。なので、100と011の各桁を比べて、1と0で0、0と1で0、0と1で0。

となり、0になる。8は1000で7は0111だし、以後そんな感じ。2のべき乗から1引いて論理積求めると、必ず0になる。多分C++だとそのまま0がfalseになるので、「2のべき乗のときはtrueを返す」ということで!で反転させてreturnしているんだろう。

こういう基本的なとこわかってないから苦労する。2進数と10進数をさらっと変換できないし。

その後は割と普通に1次方程式の傾きとか求めたり、中学高校の復習って感じ。サンプルコードをp5に書き換えたりして遊んでる。それもいずれupしようと思う。

ちなみに2のべき乗を判定するのはこうかな。

void setup() {
println(powOfTwo(4));
}

boolean powOfTwo(int num) {
int x = num&(num-1);
if(x==0) return true;
else return false;
}

日曜日, 7月 22, 2007

sketch20070722


マイクの入力とりつつ動かしてみる。minimで何故かマイク入力のエラーが出るのでessで。どっちがどうとか調べてまたまとめるつもり。

金曜日, 7月 20, 2007

sketch20070719

今回はFFT使って周波数帯域毎に分けるsketch。

FFTクラスのインスタンスにgetBand()メソッドを送り、引数にインデックスを与えてその周波数帯の値を得る。
サンプリングレートが44100HzでFFTサイズ(timeSize)を512にしているので、帯域幅は44100/512≒86Hz。つまりgetBand(0)は86*0=0Hz、getBand(1)は86*1=86Hz、getBand(2)は86*2=172Hz...という風に86Hz毎に周波数のエネルギーを解析する。0から20までのインデックスをfor文で回す。さらにその中でif文を使って高域・中域・低域に分けている。やっとMax/MSPでやってたことがコードになってきた。

fftstudy : Built with Processing

マウスの位置をサイン波の周波数にマッピングしたものも作った(processingIDEで実行すると周波数がprintされてます)。

mousine : Built with Processing

水曜日, 7月 18, 2007

20070717

16日
collect.applyのvjの手伝いで東京へ。中間発表のためのスライドができたのが午前4時。そのまま家に帰ってシャワー浴びて駅。6:20の電車で名古屋。7:15出発の高速バスで新宿へ。毎度のことながら高速バスの車内にはそれなりに可愛い子がいる。三段階くらいに分けて化粧が完成されていき、到着する頃にはすっかり東京仕様になっている。大抵は気合いが入り過ぎだから途中で止めとけばいいのにと思うんだけど、東京にいる若者の何割かがそうやってできてると思うとドキドキする。

14時前に新宿に着いてhmvやtower recordを回る。collect.applyのhalが作ったInnerzone Orchestraのcdを見つけたりする。14時半頃jamesから電話。品川へ。グランドプリンスホテル高輪にいるらしい。行ってみると信じられないくらい広い。いいとこ。二人が用意した映像を取り込み、プログラムを見せながら少し修正。

15時過ぎ代官山に向かう。タクシー。便利。就職の話とかしながら。「あと半年でもう一人分雇えるくらい稼がないとなー」と気になる発言。16時前に予定通りsaloon着。reflection谷口さんcorde原さんに会う。すごくいい感じ。映像出力用の機材が調子悪かったみたいだけどsaloonスタッフの方々が頑張ってくれて無事準備完了。

18時open。jamesに操作を任せ、halと谷口さんとコンビニへ。食事を買う。クラブは当然持ち込み禁止なのでdjブースの裏でもそもそ食べる。何か面白くてお互い笑ってしまう。halがやってたclearレーベルは伝説的レーベルで、僕はあんまり知らなかったけど、調べてみると相当な人達がclearから音源出してる。僕がわかるだけでもplaidとかgescomとか。herbertとか。お客さんの中にもclearファンが結構多かった。僕はといえばtwitterのプチオフでdubstronicaさんとかkoyachiさんと会ってました。VIDEO_君も居たらしいけど会えなくて残念。koyachiさんとは技術的な話とか普段やってる事とか、youpyさんの話とか。刺激になりました。もみあげ言い過ぎ。

映像はバーカウンターとdjの後ろの2ヶ所に投影したんだけど、カウンターの方しかスクリーンがなく、当然両方で色が違ったので厳しかった。いい瞬間もあったと思うけど。谷口さんは機材のトラブルで本調子が出なかったみたいだけど、djのお二人が素晴らしく、全体としていい雰囲気だったんじゃないかと思う。

☆君、gatti、斉田君も来てくれて、近況報告など。帰りにsuzueriさんとも会った。ここでもyoupyさんの話。さすがtumblr界で最も影響力のある存在。はてなのアイドル。見事にsuzueriさんとkoyachiさんで知ってる部分が違う。お陰でやっと薄目で見るとうっすら存在が確認できるくらいになった。実は結構近いところにいた凄い人でした。多分今まで色々ニアミスしてるはず。渋谷へ移動して中華料理。安くておいしくていい感じ。センター街でドタ君に偶然会う。

毎度のことながら☆君家にお世話になって、2時過ぎ就寝。

17日
5時起き。雨。シャワー借りて出発。傘も借りる。本当にありがとう。リスペクトにはいつかペイで返します。

7時に品川で待ち合わせ。スターバックスでコーヒー。何で朝からこんなに人がいるの?とcollect.applyの二人。あと、東京は店ばっかりだね、とか。変な英語使ってる店とか笑う。iamasの学生はもっと外で遊ぶべきだとか何とか。他のコミュニティと関わって、自分の立ち位置をクリアにするとか。halの大学にはバーがあったらしい。イギリスの大学は社会勉強で、ヒューマンネットワークを作る場所だよと。日本も割とそういう志向はあると思うけど、確かにiamasはちょっと違うかな。そこに5年も通ってる僕。

新幹線で名古屋。名古屋から大垣。車内ではjamesと仕事の話とか、デザインの話、作品の話、iamasの話、大垣とか彦根とか日本とかイギリスの話...。僕の完成させられない病(予備校時代から。つまり美術志してからずっと)の話もする。jamesも同病らしいけど。

10時前に大垣着。俺様ちゃんはタクシーで登校。中間発表は既に始まってて、少し遅刻。話を聞きながら原稿作成。皆資料作りがしっかりしてた。びびり過ぎの感はあるけど。いずれにせよ何であんな雰囲気になってしまうのかわからない。

自分の出番は最後。字が小さ過ぎたが何とか乗り切った。と思う。終わった後安藤さんと話す。今のうちにもうちょっとしっかりやりたいことをはっきり考え直した方がいいとのこと。前林さんも同じような感想。確かに自分でもあまりうまく整理できてない。というか、こんな感じで記号がすらーって並んでて、こんな音が鳴ってたりしたら、どう、かっこよくない?としか言いようがなくなってしまうので困る。jamesとはフィニッシュのイメージがある程度共有できてるので、パッケージとしての作品は作れると思う。けど、それを論文にして歴史的な位置づけとか新奇性どうこうってなると他の教授に指摘されるように厳しいものがあるのもわかる。

もっと話すべきだ、とは思った。皆それぞれに正しいと思えることをやってる。それに対する批判も正しい。間違ってるものは直せばいいけど、お互いにそれなりの文脈で正しい場合、どうすればいいんだろう。

終わった後シースー。ボーリング。スコア148。プリクラ撮って、落書きして、コーヒー買って帰る。

土曜日, 7月 14, 2007

centering, fade in

webのintro用にロゴ画像をfade inさせる。
javascript + cssで画像をウィンドウ上下左右の中央にしてfade in。
flashでやれよ、て感じだけど。
intro

参考にしたのは、やっぱりbrazil社長。
戦争 - 上下左右中央の件、改善、補足

今回はたまたまcssで上下センタリングの方法探してたら見つかった。考える事が似てるのかな。元々brazilさんのblogを発見したのは、capsuleがだせーけど好きとかそう言うので検索してたんだと思う。田舎の人が考える都会的イメージとかクラブ行かない人のクラブ的イメージとか。テクノちゃんと聴いてない(どういうこと?)人のテクノ的イメージとか。

にしてもバッドノウハウかー。
僕はjavascript使ってクライアント側のウィンドウサイズ取得してるんだけど、それもよくないのかも。しかもcssを外部読み込みにしないとうまく上下センタリングされない。
javascriptでcssの表示位置を制御するのはこの本のサンプルから。
標準Webデザイン講座|サンプルファイルダウンロード

fade inで参考にした(というか不要なとこ消してそのまま使ってる)のはここ。
Cross-browser BlendTrans Filter JavaScript, Fade in/out

翻弄されちゃうよどうも。

木曜日, 7月 12, 2007

sketch20070712


minimで音響解析(といってもfftは関係なく、AudioPlayerのインスタンスからget()メソッドで音量取ってるだけです)。最終的にはこういう感じにしたい。

動いてる様子。
sketch20070712

水曜日, 7月 11, 2007

20070710

バイト先でweb作業。ブラウザ毎の解釈の違いだとか、右から左に読む言語の存在だとか。

昼食は隣のファミレス。初めて見るソファの座り方をしてる若者が多くて、客層が最悪なんだけど、一緒に食べてる会社の人達はそれなりに偉い人達なので話が面白い。中国に行ってた人の話が面白くって、向こうでの日本企業の受け取られ方とか、国の仕組みとか。

丁度インターコミュニケーションで藤幡さんの文章にあったんだけど、マクドナルドは麦当労、って感じで外来語を当て字にしなきゃならないから大変。っていう話とか。外国の有名人はいつの間にか何となく字が決まるそうなんだけど、普通の人の場合に困るらしい。

常識が違う。

レーモン・クノー『文体練習』
1つの出来事を文体を変えて99パターン。
リミックスてのは容易に連想できる。でも別にどれがオリジナルとも言われてない。
発話の主体も変わるので、現象の切り取り方も違っている。アルファベットと図形で表したやつがかっこいい。話を把握してしまえば、多少分かりにくくても補完できる、というか無理矢理そっちの方に解釈しようとしてしまう。そうじゃないと擬音だけmixとか短歌mixとか無理。

前に受けた吉岡先生の授業で面白かったのは、よく駅に「痴漢は犯罪です」っていう貼紙があるけど、あれが大阪では「チカン、あかん」になってて、「しょうがないやつやなー」というニュアンスが伝わる、という話。関西の文化圏じゃないとわからないかもしれないけど。あとこれは吉岡先生の言い方じゃないとわからないかもしれない。同じようだけど微妙に違うことってのはあって、決定的な違いだったりもする。

もう~はサイン波としか思えない。くらいになれば良い。

月曜日, 7月 09, 2007

20070708

「sync」読み終わった。同期現象には知性や生命の本能とかいうものは関係なく、「数学と物理の法則」だと。けれども人がそれに惹かれるのは何故か。

ネットワークの話とかも、面白かったのは「構造は常に機能に影響を及ぼす」とかそういう話で、最近よく考えてたことでは、色んな議論だの論争を一発で解決するアーキテクチャってのが、やっぱりあるんじゃないかということ。解決って言葉は適切じゃないかもしれないけど、「皆がお互いを思いやって行動しましょう」とか「ちゃんとやろうぜー」とかいう結論に行き着いて何にも変わらない毎日を過ごしているとそんな風に思う。研究室にソファなくしたら仮眠しなくなったよ。バイト始めたら時間の使い方が変わったよ。

良いとか悪いとかじゃなくて、単に変わった。

インターコミュニケーション60号で読んだ藤崎さんの文章、「冗長美とは何か?」がwebでアップデートされてた。
ココカラハジマル : 冗長美論・前編
ココカラハジマル : 冗長美論・後編

受験みたいに高得点の人から順にうまくやっていける訳じゃないんだよねー。だからって何もしなくていい訳じゃないし、無駄なことこそ最高とかそういうんじゃない。こないだのゼミで、前林さんが中学生の時にラジカセでレッド・ツェッペリンの曲をかけながら日の出とともに自転車で坂道を駆け下りた話とかしてくれた。何なのかわかんないけど、とにかく今のルーティンを打ち破りたくて、何かしようとする。けど、なかなか外の思考ってできないっていう。すげーよくわかった。本当にそういう時に自分が思いつくことのしょぼさにはうんざりする。ボランティアしようかなとか?けどふっと外見ると子供、真っ黒、プール帰りの、みたいな。とかなってアイス食いたくなったりする訳。そういうジャンプの方がリアリティある。そうやって就職も決まるといい。弱いつながりの強さ。

土曜日, 7月 07, 2007

note20070707

Max/MSP
ubumenuでQuickTimeMovieファイルだけを表示したい場合はInspectorでFiltered TypesにMooVと書く。

css
共通スタイル、各ページ毎のスタイルでファイルを分ける。
共通のとこで全称セレクタ使ってmarginとpaddingを0にしておくと便利。

html
見出し要素は順番を守る。文字の大きさではなく、構造。
定義リストが便利。会社概要とかはこれで書く。

javascript
MDC
メインページ - MDC
brazilさんに教えてもらったbookmarkletのわかりやすい解説
Bookmarklets - Browser Power

misc
Arkitip™ | Intelligence
複数の色んな肩書きの人達が記事や写真をアップしてる。サイトが綺麗。
Magazineのissue0032でexpelimental jetset特集。高かったけど良かった。

プロサッカー選手はスルーパスを受ける時、観客の目線が自分の目線のように感じられて、動くべき場所とタイミングがわかるらしい。

ふんわり何とかが食べたい。

sketch20070706


フライヤー作ってる。写真にハーフトーンかけるみたいなやつを作りたくって、photoshopでやればいいんだけどわざわざprocessingでやった。最初は写真の加工に使おうと思ったんだけど、最終的には装飾用の素材に使うことにした。svg書き出しして、illustratorで作ってたやつにそのままのっけたら意外と合った。mash upの気持ち良さ。微調整。

built with processngのカメラ画像をピクセレートするサンプルと同じようなもの。実行速度より使いやすさ優先でget()メソッド使ってる。彩度を半径にしたのはそれが一番いい感じだったから。あと、変数jiggleに乱数入れてちょっと揺らしてみたり。illustratorで開いた時に、見えないけどちっこい円ができてしまってて邪魔だったので、閾値以下の円は作らないようにした。

processing、ちゃんと生活に役立ってる。


import prosvg.*;

void setup() {
PImage p;

int imageWidth;
int imageHeight;
p = loadImage("web.jpg");
imageWidth = p.width;
imageHeight = p.height;
//size(p.width, p.height);
size(p.width, p.height, "prosvg.SVGOut");
noStroke();
smooth();
colorMode(HSB, 255);
ellipseMode(CENTER);
background(255);
for(int i=0; i < imageWidth; i += 8) {
for(int j = 0; j < imageHeight; j += 8) {
color c = p.get(i, j);
float rad = 30 * saturation(c)/255;
if(hue(c)<220 && rad > 2) {
fill(c, 100);
float jiggle = random(5);
ellipse(i+jiggle, j+jiggle, rad, rad);
}
}
}
//saveFrame("dots-####.jpg");
saveFrame("dots-####.svg");
saveFrame("dots-####.tiff");
}

金曜日, 7月 06, 2007

Processing:Creative Coding and Computational Art

気づけば前に言ってたProcessingの本が出てますね。アマゾンで買うと6,180円とちょっと高い感じですが。一部サンプルがダウンロードできます。オブジェクト指向プログラミングについてのチャプターもあって、家のグラフィックを作って説明してる。そっから3Dで複数の鳥をアニメーションさせるとかいうとこまでいく。3Dの話題も結構取り扱われてるので、勉強になるかも。サンプルだけで僕はお腹いっぱい。

ちなみに開発者であるCaseyとFryのやつは9月30日。

木曜日, 7月 05, 2007

get images from blogger

Bloggerのページから画像を抜き出すbookmarkletを作りました。
getbloggerimgてやつ。最近こればっかだな。
letsbookmark

そもそもはjudge a bookという最高にかっこいい本の表紙がアップされてるサイトの画像を全部ダウンロードしたいなーと思ったからで、単純にlinkのurlを取得して、拡張子がjpgになってるやつをdocument.writeでimg要素に突っ込んで表示してみたら成功したってだけです。
そのままだといくつか取れないのがあって、全部調べた訳ではないのですが、リンク先がs1600-hてなってるのが問題みたい。ってことで、if文で分岐させて、ffffound!でやったみたいに-hを取ってやって、ついでにgifの場合も表示することにした。

bibliodysseyとかmutantsoundsででっかくてレアで怪しい感じの画像がどっさりとれて嬉しい。ちょっと改変すれば色んなとこで使えそうだし。なるほどね。今まで暮らしに役立つプログラミングってしてこなかったけど、こういうことか。たれの工夫で献立10倍か。

ffffound!画像ちっこくなったけど、新着の横に関連画像が表示されるようになって、再発見の機会が増えた。面白い。

月曜日, 7月 02, 2007

bbbbig!

画像のブックマーク+おすすめサイトffffound!の画像表示がちっこくなってしまった。元画像は保存されてて、ファイル名の_mを取れば表示できるということで、bookmarkletの勉強がてらやってみた。
bbbbig!てやつです。
letsbookmark

最初はsubstring(0,ファイル名-6)で_m.jpgの部分(後ろから6文字)を取って+".jpg"でまた拡張子つけたやつを表示させてたんだけど、これだとあまりに頭が悪い。関係ないのも読まれるし他の拡張子表示できないし。
で、youpy(ぴよよぴぴよよぴ)さんのGreaseMonkeyスクリプトを参考にmatch('_m')で該当する画像だけを取得して、その後split('_m').join('')して_mを取り除いてる。なるほどー。

やっぱ画像でかいと印象が全然違う。音も然り。

日曜日, 7月 01, 2007

20070630

エントリー終了。パンチドランカー症候群で気が抜けてる。別にそんなに頑張った訳でもないけど。
もう積極的な就職活動はしない。あとはできる限り好きなことやって、声かけてもらってるとこに行く。

バイトも楽しい。25分で行けた。学力低下は社会人でも危機的状況らしい。引き算ができないとか...。勉強、今になって大好きだ。偏ってるけど。

茂木健一郎/江村哲二の「音楽を考える」を読んでいる。
ケージのチャンスオペレーションの話にすげー納得した。

「彼のやり方がインチキかというと、そうではありません。サイコロや八卦はポーズに過ぎないわけです。最初から彼の頭の中には自分の音楽が響いているのですが、それをどういう規則でやればいいのか、彼はわからない。音楽理論化のしようもないから、偶然性の音楽として、サイコロを振って音楽を作ったと言っているのです。」

「好きなように」っても何も思い浮かばないし、型にはまったものは嫌だし、型にはまらないのも気持ち悪いし、それはそれでジャンルだよなーとか思ったり。で、何もやんなかったんだけど、最近はちょっと考え方変わって、しょぼくてもやれることをやってく。でもちゃんとしょぼさに落ち込むことは忘れない。

水曜日, 6月 27, 2007

sketch20070627



tex/tspをfileから読めるようにした時に出て来た人。横山裕一みたい。

minim用に書き直したやつとか何となく考えてる方向だとDasherみたいな入力方式が面白いのかも。
Inference Group: Dasher Project: Home

20070626

バイト順調。地元の百貨店のweb作り。とりあえず与えられた仕事はきちっと時間内に消化。本部の事務所で作業してるんだけど、他に若い男子がいないからか上司に御飯おごってもらったりジュースおごってもらったりして可愛がってもらってる。もう24歳なのに。

社食がすげーおいしい。学食がないのでわいわいした感じも楽しい。

htmlとcssのちゃんとした勉強がしたい。見出し要素なんてサイズでかくしたい時は少ない数字、って教わった気がする。本当は階層化すべきでちゃんと順番に使うべきなんだそうだ。割とそういうweb標準的なやつにのっかって作ってる。従業員の服装チェック用のイラストとかもイラレで作ったりした。僕だけ私服でこんないい加減なのに変なのー。
通勤はしんどいけどmix聴きながらだとちょうどいい。

エントリが近い。曲はほぼできて、もうこれ駄目だったら僕がアホでセンスないってのでいいです。

bookmarkletまたやってた。タイトル取得して、リンクタグをpromptで出してくれる。getTitleAndLink。
letsbookmark
上のリンクもそれで貼ったよ。これからここにどんどん追加していきます。生産性あげてこ。

あと、翻訳はpdでサウンドデザイン、にしようかと。全く意外性ないね。
Puredata sound design tutorials

CCライセンスってんで、気軽に気長にやろうと思う。pdフリーだし。

月曜日, 6月 25, 2007

linkimage

javascriptの勉強のために手始めにbookmarklet。いつも通り見よう見まねでとりあえず動くものを。で、今後色々調べくうちに何となく気づいたらちゃんとできるようになってる、てのが理想。
ページ内の画像のみを表示して、クリックでその画像のURLに飛ぶ。これでどっかのディレクトリに連番で置いてある画像のURL取得して、terminalからcurlして一気に落とせる。もっとスマートな方法あるはずだけど、ひとつひとつ表示してCtrl+クリックでSave link as...から比べれば進歩。こうやって次のアイデアがどんどんでてくるんだな。ラピッドプロトタイピング重要。

document.images[index].src

で画像のURLが取れるとか、思ったより簡単。

linkimage
リンク先のページの、linkimageってやつをbookmarkするか、bookmarktoolbarにドラッグ&ドロップしたら使える。はず。firefoxでしか試してないけど。

木曜日, 6月 21, 2007

20070620

読書順調。前日アルバイトの帰りに舞城王太郎の「みんな元気。」文庫が出てたので買う。舞城が好きなのは深刻な時に人間は変なこと考えるってとこがちゃんと書かれてるから。

身近な人が突然死んだとして、勿論悲しいんだけど、それより「今日の分は作り置きがあるけど、明日から誰が御飯作るんだろう」とかそう言うことを思ってしまう。別にその人を御飯作りマシーンと思ってた訳じゃないし、他に思うべきことはありそうなものだけど。で、その言葉はどういう心の動きから生まれて来たのかわかんないくらい複雑な感情を経たものではあるはずなんだけど、もしその言葉だけをいきなしその場で口にしたら「何言ってんの」という話になる。けどそういう気持ちは確実に存在するし、「ここでこういうこと言うべきじゃない」ということも勿論考える。それは多分、他人は自分の心に起こった感情と言葉の飛躍はカウントしないで表面の意味しか受け取ってくれないと思ってるからだろう。何か舞城はその辺の気持ちとか気分の移り変わりの瞬間を丁寧に抽象化してる気がする。

対人関係で一番難しいのは、その言葉が実際に指し示しているところが違うにも関わらず、字面が一緒であったりしてしまうために誤解が起こってしまうこと。ある言葉に対して思い浮かべるイメージは人それぞれで、ディティールを詰めていけばいくほど違ってるはず。にも関わらず自分が納得できる言葉が納得できる文脈で使われてないと理解しない、あるいは自分が考えているイメージに引っ張られすぎちゃう人ってのが居て、困ったものだよなぁと思う。その人が、というよりは言葉っていう仕組みそのものが。

jamesがちょっと前に水着の女の子が載ってる漫画雑誌が転がってるのを見かけて「Pornography, everywhere...」とため息をついてたのが印象的で、やっぱ水着だったらセーフ、脱いでたらアウト、とかそういう単純な話じゃないんだよなーと改めて思ったりした。

で、そんなことを考えたりしながら録音室で作業しようと思って事務に鍵を借りに行くんだけど、リストに載ってない人は駄目、って言われる。推測するにそのリストは録音室使用説明ワークショップに参加したか否かなので、僕はそれ既に受けてるから大丈夫だと思う、と言い、事実過去のリストには僕の名前が記載されてる。過去のものが有効かどうかはわかんないから確認してもらますか、と言われ、無効だったら過去のものは捨ててしまえばいいはずで(というかややこしいから捨てるべき)、何でそれがそこにあるか考えれば答えは出そうなものだし、あなたが確認するのが筋じゃないですか(リストにない人はどうすればいいのかとか知っといた方が今後のためにもなるんじゃないですか)、とか思ったんだけどそれらを説明すると人間としての生き方とかを色々言わなきゃならなくなって面倒だし分不相応だったのと、何かしら向こうにも事情(たまたま体調が優れなくて気分が悪かったとかでもいい)があったりするかもしれないから引き下がった。

とは言え、僕が録音室を借りるのは就職に向けて納得いく音楽を作るためで、今の忙しさを考えれば早いとこ作業にとりかかれないとまずいのだ。締め切りに間に合わなくて就職できなくて負い目を感じながらその後の人生を過ごし、何かのタイミングで今日のことを思い出して、許せない気持ちになるのか笑い飛ばせるのかは知らないけど、「鍵貸して下さい」にそれだけの情報を詰め込めないし、そういう事情を説明してもいられないし、相手にそこまで汲み取れというのも無理。困ったなぁ、と。

「残念ながら、ヒトの知性はこの種の問題を解くのが苦手である。ヒトは、中央集権制をはじめ、一連の明快な命令、因果関係のようなわかりやすい思考法に慣れ切っている。ところが、大規模な相互作用系では、各構成要素が最終的に影響を及ぼすため、標準的な思考法では歯が立たない。単純な図式や言葉に頼った議論など、あまりに説得力がなさすぎるのであり、あまりに近視眼的なのだ。」
— スティーヴン・ストロガッツ「SYNC」

そういうことをグチグチ思ってるかと思えば、スッと切り替えてさっきまで考えてたことなんてなかったみたいにプログラミングとかできちゃうから便利だなぁと思う。

三輪先生と面談。次のステップが見えた。

月曜日, 6月 18, 2007

20070619

tumblrとかffffound!の反動か文章ばっかり読んでる。黒井千次「石の話」。ものに象徴的な意味を与えたり、そのもののたたずまいに心情を投影させるのがうまい。細かい描写が丁寧。スーパーの袋に入った乾電池の重さ、とかがリアルに感じられる。「夜と光」は深夜ラジオを聴いてる人達が次々に行動を起こしてく話なんだけど、ちょうどその日蛍を見に行ってて、同期についてぼんやり思いを巡らせていたところだった。そんで気になってたスティーヴン・ストロガッツの「SYNC」を図書館で借りる。

ハンス・アビングの「金と芸術ーなぜアーティストは貧乏なのか?」の輪講。政府の助成金などは芸術家に「作品を売る」という気持ちをなくさせ、またステータスも与えるのでそれを欲しがる新規参入の芸術家が増え、結果数が増えすぎて供給過剰が起こり全体の取り分が減る、とか結局助成金も生活費よりかは制作費にまわるので慢性的に貧困であるとか。

芸術家においてはプロとアマの線引きがよくわからない、というのが(経済学的に解釈する場合の)問題としてあった。確かにスポーツだとプロ契約してるかどうか、というのが明確な基準だけど、アートの場合、どっかと何かしらの契約を結んでいるからとか、作品売って食ってるからといって、必ずしもその人を「プロの芸術家」もしくは「本物」という言い方をするとは限らない。

前回の内容とも関わるんだけど、やはり芸術に関して間違った情報や神話が蔓延していて、いつ諦めたらいいのかがわからないとか、難しいなと思う。「好きを仕事にする」とかでも問題だと思うんだけど、信じていればいつか報われる、と思ってずっと過ごしてる人もいるだろう。面白いのは、何故この神話が間違っているか、というのは、そういうことが起きないからではなく、稀に起こるからという意見。

思い起こせばサッカーを小学校4年で始めて、6年になる頃には何となく自分の才能の限界みたいなものに気づいてた。それはちゃんと情報が与えられてたから。選抜システムもあったし、もっともっと強いチームと対戦したこともあった。

じゃあアートはどうかというと、コンペを否定し、「売れること」を笑い飛ばし、自分がジャッジされることを徹底的に先延ばしにすることができる。芸術に奉仕することが一番だと考える。これを内的報酬と呼ぶ。芸術家は金銭や名誉などの外的報酬よりも内的報酬を優先しているから(金銭的には)貧乏であるというテーゼに行き着く。つまりは自己満足。自己満足してるからお金はいらない、という人が多い。何でそんなことができるかというと、副業してるとか、家がお金持ちだとか。内的報酬と外的報酬っていう考え方は結構シンプルで目から鱗。

経済学的な観点から言えば、ある職業がずっと儲かってたり貧困だったりというのが続くのはあり得ないそうだ。アートでは食ってけないと皆が思えば、芸術家を目指す人は少なくなり、需要と供給のバランスがとれ、次第に芸術家は好況に向かう、と。でもそんなことが未だかつて起こってないことも作者は知っている。

という訳でかなり複雑なんだけど、経済学からアートを眺めてみるのも面白い。日本と海外での状況の違いもあるし。終わった頃にもっかいまとめるつもり。

友達に信濃川日出雄のfineって漫画読ませてもらって、面白かったけど落ち込んだ。救いがあるように思える結末だけど、実際の場合どうなんだろ。結局神話を強化する形。アビング本の方がまだ救いがあるのかな。すっきり諦められる方がいい気もする。何かもっと、ないのかな。今の人間のあり方って。

日曜日, 6月 17, 2007

realtime vjs

amachangさんの資料と、kosekiさんのmemoをマッシュアップしたら、ライブコーディングでvjができるのでは...。

javascript、やっぱ勉強すべきだ。正規表現でメールから情報抜き出したりしてもてたいし、vjでももてたい。scriptographerも使いこなしたいし。

何となく文字の並びでこれとこれが対応してんのかなーみたいな感じでやってみただけなんでもっとちゃんと調べないとな。
evalにチェックして実行間隔短くしたらグリッチー。

realtime vjs!!!

土曜日, 6月 16, 2007

program switcher

processingで例えばvjする時とか、どうやって切り換えするかなって疑問は前からあって、やっとその答えが出た。
abstractmachine >> Polymorphism
abstractmachine >> abstract classes

ポリモーフィズムね、抽象クラスね。やったやった。でも使い方全然わかってなかった。本当こういうテクニックって、できる人にとっては言うまでもないことで、僕くらいの知識だと思いつかないからなかなか共有されないんだよね。ここで駄目なやり方として紹介されてるswitch文で書いてた。

Polymorphismのはdouglasのページのをそのまま実行すればいいとして、abstract classesでのやつをやってみた。これでいいのかな。確かに変数のことで悩まなくて済むしコードも綺麗だ。Head First Javaで勉強し直そう...。


abstract class Animation {
void setup() {
background(255);
}

abstract void draw();
}

class Opening extends Animation {
int i=0;
void draw() {
background(255);
if(i>width) {
i=0;
}
line(i, 0, i, height);
i++;
}
}

class Middle extends Animation {
int i=0;
void draw() {
background(255);
if(i>height) {
i=0;
}
line(0, i, width, i);
i++;
}
}

class Ending extends Animation {
void draw() {
background(random(255));
}
}

Animation myAnimation;
void setup() {
myAnimation = new Opening();
}

void draw() {
myAnimation.draw();
}

void keyPressed() {
switch(key) {
case 'a':
myAnimation = new Opening();
break;
case 'b':
myAnimation = new Middle();
break;
case 'c':
myAnimation = new Ending();
break;
}
}

金曜日, 6月 15, 2007

textsp_minim

minim1.1が出たのでtex/tspをminimで実装してみた。
textsp_minim

essと音の作り方が違ってるので、結果出てくる音もだいぶ変わってる。essだとAudioChannel()をnewする時にdurationを設定できるので、それが一文字当たりの音の鳴る長さにしてたんだけど、
minimの場合

AudioOutput out = Minim.getLineOut(Minim.STEREO, 512);

のところでサンプル数を指定する。で、512サンプルだから、44100Hzの場合、86.1328125msec。一文字だけだと音が鳴らないのは短過ぎるからなのだろうか。
サンプリングレートを直接変える方法がすぐ分かんなかったから{}では周波数を変えることにした。

オシレータを鳴らす文字を読み込む毎にaddSignalしてるので、数が増えるとクリップする。
行末まで読み込んだら頭に戻ってclearSignals()でオシレータをクリアしてる。

こういう感じで解釈を変えると音が変わるのは当然なんだけど、解釈しやすいように解釈してるってのがポイントで、それによる影響(インターフェースによる規定)ってのを考えたい。ある箇所を緩めたり、厳しくしたら一気に何かが開けた、みたいなことが起こる気がする。

やっぱ今くらいのワイルドな状態が一番面白い。洗練させてくと普通になっちゃう。ワイルドさを保ちながら成長させるとか、とりあえず普通レベルまで持って行ってそこ超えなきゃとも思うんだけど。すげー馬鹿でシンプルか、すげー賢くてシンプル。どっちか。

ドキュメント和訳とかしようかな。これに限らず色々和訳したい。別に誰かのためとかじゃなくて、ライフワークとして。日本語を英語にするのでもいい。技術的な文献もいいけど、何か面白いやつ翻訳したい。これ翻訳すんの?っていう。何にしても僕はどこかに乗っかった状態で何かやるのがいいみたい。0から1を作るタイプじゃない。こっそり考えてはいるけどね。

20070614

GTD的にも色々と気になってることは書き出すと良いそうなんで、書く。

twitter始めて、tumblr始めて、ffffound!にも参加するようになったお陰で相当な量の画像を見たし文章も読んだし音も聴いた(midiさえも)。で、じゃあ自分は何か作ってるかと言うと、企業にapplyするための音楽を作っていて、久しぶりにmax/mspとかsupercollider3を起動させてる。しばらく離れていたんだけど前より論理的に考えられてるというか、ちゃんと処理の流れを掴めるようになってるのでプログラミングがすげー楽。そんなに複雑なことしてる訳でもないけど。やっと最近mspで納得いく音が出つつある。でもまだ2007年の音じゃない。

demo124

音圧ねーなーって思うけど、下手に加工されたやつよりかはましかなと思う。もっとその辺も勉強しなきゃと思うんだけど。思い起こせばIAMAS入って最初に作った音楽はprotoolsのデモ版にキーボードからラインで音を取り込んで作った15秒ほどのやつで、リズムパターンは録音した素材をひたすら並べてた。いつの間にやらシステム組んだり新しいこと覚えたりする方に興味がいってしまって、音楽自体も流し聴きくらいでよく聴かなくなった。量と幅は増えてるんだけど。
そう言えば映像作家にもなりたかったのだった。絵も描けるようになりたい。色々ちゃんとやめないで続けておこうと思う。

必要があってunix関連のことを調べててようやく環境変数がわかった。

修士制作と論文に関しては、言語が既にインターフェースであるってとこに注目していこうと思う。言語が楽器。前林さんとも話してたけど、まぁ普通に修士クリアできるレベルってんじゃなくて、びっくりするようなブレイクスルーが欲しいところ。単なるバリエーションのひとつ感で終わらないこと。jamesとはとにかく手を動かしながらアイディア出しとブラッシュアップ、前林さんとは小さくまとまらないような目標設定。三輪さんとは厳密な定義付け。

来週からバイトが始まる。地域に貢献。webのこともっかい勉強し直す。

1ヶ月後には東京でVJ。名古屋と京都でもやるかも。jamesが作ってる映像がすごくいい。オペレーション用のパッチを書いてる。英語が上達した。

木曜日, 6月 14, 2007

gainer digital in


gainerでdigital inからmaxに値を送るとこで一瞬はまったので書いとく。d.inからはmetroで指定した時間間隔で毎回0なり1を出力し続けてる。なのでそのままだとsfplay~がちゃんと使えない。toggleの見た目的にはずっと1になってていけてそうだが、実際は毎回頭出しされてることになる。なので、togedgeを使って0から1、もしくは1から0になった時だけメッセージを送るようにしてあげればよい。togedgeはインタラクティブ系ではすげーお世話になるので覚えておくと便利。画像はd.inからのメッセージが1の場合と0の場合で別の音源を鳴らすデモのために作ったパッチの一部。
record~オブジェクトで1の間だけ録音したい場合もこれで対応できる。これやっとかないと一瞬録音されてまた次の1が来た時にbuffer~の内容が書き換えられてしまう。append 1メッセージを送れば一応togedge使わなくても回避できるけど、挙動が違ってくるので目的に応じて変えるべき。

月曜日, 6月 11, 2007

sketch20070611_3


tutorialそのままでgoogleのhtmlをpathとって加工。Export as PDF...で普通にillustratorでpathの編集ができる。

from urllib import *
page = urlopen('http://www.google.com/')
data = page.read()
size(400, 800)

fontsize(9)
path = textpath(data, 0, 10, WIDTH)
points = []
for point in path:
if point.cmd == CURVETO:
point.ctrl2.x += 5
point.ctrl2.y -= 10
point.y += 5
points.append(point)
drawpath(points)

page.close()

sketch20070611_tsp

sketch20070611_tex

金曜日, 6月 08, 2007

liveapi

ableton liveにpythonで何やらできるみたい。
LiveAPI.org

ループを並べるっていう非常にセンスを必要とするソフトだったから使ってなかったけど、これを機にやってみようかなぁ。学校で借りられるかしら。

木曜日, 6月 07, 2007

sketch20070607

NodeBox、まだ何するかは決めてないけど何となく役に立ちそうと思ったのは、当たり前かもしれないけど普通にpythonが動くこと。「初めてのPython」読みながらちょっと試す。

urllibモジュール使ったりすれば簡単にネットからデータを取得できる。google.co.jpのトップページ。wordscountのとこで適当な言葉を指定して、使われてる回数分四角を表示する。

from urllib import *
page = urlopen('http://www.google.co.jp')
data = page.read()
size(400, 800)
wordscount = data.count('google')
for i in range(wordscount):
rect(i*15, 0, 10, 10)
fontsize(9)
text(data, 0, 10, WIDTH)
page.close()

こういうのをもっと洗練させていけば色々面白い視覚化ができそう。pythonとかネットワークの勉強にもなるし。pdfとquicktimeムービーが書き出せるのもいい。mail用のモジュールもある訳だし、スパムメールの視覚化とか。こういうの。もうちょいポップなやつ作りたい。

他パラパラとめくりながら試してたやつ。

word = 'xo'
z = eval("word*10")
text(z, 0, 13, None)

とか。便利。

import os
print os.listdir(os.getcwd())

とかでカレントディレクトリにあるディレクトリのリスト出したり。os.mkdir('filename')でディレクトリ作ったりもできる。まだコンソールに出してるだけだけど、グラフィックにすぐ反映させられるはずで、それはやっぱ面白い。

こういうのは結構無駄っぽいけど、無駄な分あんまり人がやらない感じで、それによってあんまり見たことないようなグラフィックなりサウンドが生成できたらいいなぁと思う。同時にアルゴリズムとかコンピュータのコアな部分の勉強にもなりつつ。

あと、processingだとこれは多分こんなに簡単にはできないってのは、NodeBoxのfiles()メソッド使ってマウスダウンしてる間指定したフォルダ(絶対パス)内のjpgファイルをランダム表示。結構脳にくる。

size(600, 600)
speed(30)
def setup():
global f
f = files("/Users/poki_j/Documents/downloads/clipping/*.jpg")

def draw():
global f
if mousedown:
image(choice(f), 0, 0)

processingだと基本的にはスケッチフォルダ内にdataってフォルダ作ってそこに画像ファイル入れて読み込むし、読み込むファイルも拡張子だけの指定な場合、多分javaから何かしらをimportしないといけなさそう。そういう方法も知っといた方がいいような気はするけど。

火曜日, 6月 05, 2007

tex/tsp20070604

ゼミでの発表と現状。新奇性だとか何がしたいかとか一番苦手なとこを突っ込まれる。苦手克服のためにやってるので我慢。
音響的に面白くなるだけでは厳しいようだ。テーマになり得るとすれば「どこまで人間が操作して、どこから計算機に任せるか」とかその辺らしい。もっと他の作品を分析せよとのこと。何故こんなことをする必要があるのか。作曲なのかツールなのか落としどころをはっきりさせる。
改善すべき場所は自分でも分かってるし続けてくうちにブレイクスルーはあると思ってるから別に焦ることもないんだけど。

snapshot20070604

とりあえずタイポ作ってみた。クラス化してある。ていうとことか割と新奇性につながりそうなんだけど。ちゃんと説明してなかったのが悪いのかな。あとFFTして音量出してる。

to do
アルゴリズム見直し。
制御構造。
minim(1.1出た)に乗り換え。

音響的な部分以外での面白さって何だろう。それ追求するのに色々試しやすい環境としてはやっぱprocessing素晴らしいな。

土曜日, 6月 02, 2007

glich movie


processingでquicktime movie読み込んでglich。image(xpos, ypos, width, height)の値をランダムにして背景消さないだけでもそれっぽいのはできるけど、そこからarraycopy使ってランダムな長さ分だけbufferに入れて、ランダムな位置に表示するとさらにメッタメタのギッタギタにできる。落ち着いて計算して、もうちょっと色々試す。


import processing.video.*;
Movie video;

int movieWidth = 160;
int movieHeight = 120;
int buffer[];
int moviePixels;
int srcPos;
int dstPos;
int bufferIndex;
int copyLength;
void setup() {
size(400, 200);
// also try with other video sizes
video = new Movie(this, "station.mov");
video.loop();
moviePixels = movieWidth * movieHeight;
buffer = new int[width*height];
background(0);
frameRate(24);
}

void draw() {
srcPos = int(random(moviePixels));
dstPos = int(random(width*height));

copyLength = width*height-dstPos;

video.read();
image(video, int(random(width)), int(random(height)), int(random(width)), int(random(height)));

loadPixels();
arraycopy(pixels, srcPos, buffer, 0, int(random(moviePixels)));
arraycopy(buffer, 0, pixels, dstPos, copyLength);

updatePixels();
if(keyPressed==true) {
saveFrame();
}
}

sketch20070601


引き出しをモチーフにしたインタラクションデザイン。
シーソーみたいになってて片方に重心がかかると倒れて中の物がぶちまけられる。
上下の引き出しで片方が録音、もう片方が再生。

金曜日, 6月 01, 2007

movie like effect


これみてやってみた。要は彩度下げて明るさ落としてコントラスト上げてどっかに焦点決めてそれ以外をぼかして暗くしていい感じにノイズを入れれば良い。今まで全然レタッチってやってこなかったけどこんなに質感て変わるものなのかと思った。次はミニチュアのやつマスターしよ。

元画像。ちょっと前東京行った時に何も考えないでファインダーもモニタも見ないで撮った。

火曜日, 5月 29, 2007

libJMyron.jnilib compiled for intel macs

jmyronをintel macで動かす場合はここからdownloadしたlibJMyron.jnilibに入れ替える(thanks kevin!)。

火曜日, 5月 22, 2007

nodebox

pythonで書くprocessingみたいなやつ。前から気にはなってたんだけど、久しぶりに見てみたら結構すごいことになってるっぽく、動かしてみた。コマンドキー+Rですぐ実行できるのが嬉しい。pythonのコーディングも気に入ってるので楽しい。OSXのみなのが喜びを分かち合えなくて残念。(追記:かと思いきやwindows版がここからdownloadできる。動作確認はしてないけど。てか3.0がすげー!)

NodeBox

あんましコンピュータに慣れてないけどプログラム使ってグラフィックとかやりたい人が、制御構造とか覚えるのに成績入力して合格点以上の人をリストアップするとか延々やらされても辛いんだよね。比較的僕はそれも楽しめるタイプではあったんだけど。こういうのだと楽しく勉強できて、可能性もわかってもらえるんじゃないかな。

tutorial
のadvancedとかやれば結構すごいことできそう。音も鳴らせる。

svg書き出せるライブラリもある(が、マウス操作しかないっぽい...コードで生成したPathを別のアプリケーションで扱いたいんだけどなー。何か方法あるのかしら。以前リンク先にしてたSVGライブラリは読み込みのみでした。ごめんなさい。)
sc3と連携するっていう熱いライブラリもあった(sc3のtutorial書いてるMark Polishookさん作)みたいなんだけど、今どうなってるかは不明。

6/11追記
普通にpath使った場合、Export as PDF...したらイラレで編集できました。便利ー。
sketch20070611

processingのexampleみたいなやつ。メソッド名とかも似てる。

size(200, 200)
speed(30)

def setup():
global frame
frame = 0

def draw():
global frame
if frame>200:
frame=0
stroke(0)
line(0, frame, 200, frame)
frame += 1

prosvg

tex/tspで出した音の波形を印刷したいんだけど、解像度とか編集のしやすさのことも考えるとillustratorのパスで扱えるようにしたい。てな訳でproSVGを使ってみた。

素直にここのを落としてlibrariesに入れてexample実行すればいけるかと思いきや、

Exception in thread "Thread-2" java.lang.NoClassDefFoundError:

で、forum見たら同じエラーで困ってる同じく初心者でよくわかりませーんという人がいて、どうやらエラーの内容はSVGOut.javaとSVGGraphics.javaがコンパイルされてない(.classファイルがない)ってことなんだけど、僕も彼もコンパイルの方法がわかんない。terminalから素直にjavacしただけでは駄目みたい。

で、スレッドの2ページ目florian jenettって人が代わりにコンパイルしてくれてます。日本では神と呼ばれる行為ですね。僕の環境は0124ですが、問題なく動いてます。thanks florian!

音響界のhello worldことサインウェーブ。100*100で書き出して適当にillustrator上で拡大。最高。頂点結ぶのがスマートっぽいけど、とりあえずこれで。.tifファイルも書き出しとくとプレビューできていい感じ。



import prosvg.*;
void setup(){
size(100,100,"prosvg.SVGOut");
strokeCap(ROUND);
stroke(0,100);
smooth();
background(255);
strokeWeight(0.5);
}

void draw(){
float a = 0.0;
float inc = TWO_PI/100.0;

for(int i=0; i<100; i++) {
line(i, 50, i, 50+sin(a)*40.0);
a = a + inc;
}
saveFrame("testFlowers-####.tif");
saveFrame("testFlowers-####.svg");
noLoop();
}

月曜日, 5月 21, 2007

daniel eatock

「あいつ自分ではデザイナーって言ってるけど、どう考えてもアーティストだよな」
というところを目指しなさいと言われるのですが、そういう人。別に彼自身は自分のこと何者であるとか言ってない(と思う)けど。

Daniel Eatock


alarm danceが面白いんだけど、紙の上にマジック置いて描いた絵とか、素晴らしい。これをもうちょっとドローイングマシン寄りにしたやつを作りたい。

Begin with ideas.

心に留めとく。