ラベル idea の投稿を表示しています。 すべての投稿を表示
ラベル idea の投稿を表示しています。 すべての投稿を表示

火曜日, 8月 11, 2009

Processing IDEからEcho Nest APIを使う

Echo NestのJavaクライアントが出ていたのでProcessingで動かしてみた。
Echo Nestが何なのかよくわかってないけど、とりあえずネットと音という大好きな要素が混ざっている。
曲やレビュー、記事のリコメンドからテンポ、ビート等の音響解析にも使えるらしい。

まずはdeveloper用のサイトでEcho NestのAPI Accountを取得してAPI Keyを発行してもらう。
サイトも綺麗だしブラウザから実行例を見られるので勉強しやすい。APIキーとか入れといてくれてる。

Echo NestのJava APIをダウンロードする。

Javaのライブラリなので、OSXの場合"ユーザ名/Library/Java/Extensions"以下にEchoNestAPI.jarを置いて.bash_profileにCLASSPATHを書くのでもいいけど、Documents/Processing/librariesの中にEchoNestAPIというフォルダを作り、さらにlibraryフォルダを作って、その中にEchoNestAPI.jarを入れても動く。ProcessingのIDEから簡単にimportできる。

JavaのサンプルそのままだとProcessingのIDEの場合for文のところでエラーになってしまうので書き換えた。
import com.echonest.api.v3.artist.Artist;
import com.echonest.api.v3.artist.ArtistAPI;
import com.echonest.api.v3.artist.Audio;
import com.echonest.api.v3.EchoNestException;
import com.echonest.api.v3.artist.Scored;
import java.util.List;

String API_KEY = "自分のAPI KEY";
String ARTISTNAME = "weezer";

ArtistAPI artistAPI;

try {
artistAPI = new ArtistAPI(API_KEY);
List<Artist> artists = artistAPI.searchArtist(ARTISTNAME, false);
if(artists.size()>0) {
for(int i=0; i<artists.size(); i++) {
Artist artist = artists.get(i);
List<Scored<Artist>> similars = artistAPI.getSimilarArtists(artists, 0, 10);
println(" === Similar artists for " + artist.getName() + " ===");
for(int j=0;j<similars.size(); j++) {
Scored<Artist> simArtist = similars.get(j);
println(simArtist.getItem());
}
}
}
}
catch(EchoNestException e) {
System.err.println("Trouble: " + e);
}


実行結果

=== Similar artists for Weezer ===
The Smashing Pumpkins
Ozma
Biffy Clyro
The Breeders
Rivers Cuomo
Nerf Herder
Jimmy Eat World
Foo Fighters
Veruca Salt
The Flaming Lips
=== Similar artists for Weezer Tribute ===
The Smashing Pumpkins
Ozma
Biffy Clyro
The Breeders
Rivers Cuomo
Nerf Herder
Jimmy Eat World
Foo Fighters
Veruca Salt
The Flaming Lips
=== Similar artists for Matt Sharp (of Weezer, The Rentals) ===
The Smashing Pumpkins
Ozma
Biffy Clyro
The Breeders
Rivers Cuomo
Nerf Herder
Jimmy Eat World
Foo Fighters
Veruca Salt
The Flaming Lips



開発者の人のデモがここにある。eclipseで開発してる。

*2009年11月11日追記
EchoNestAPIを使用する場合はJavaのバージョンを1.6にする必要があります。
Applications/Utilities/Java Preferencesを起動して、GeneralタブのJava ApplicationsのJava SE 6を一番上にする。

で、いつの間にかechonestp5というものができてた。

土曜日, 2月 07, 2009

mousine

前にjavaでこんなの書いた気がするけど、actionscriptでマウスの動きに合わせて
周波数と振幅変えるコードをwonderflに書いた。
mousine

普通にマウス位置を取得して周波数や音量に入れると波形が急激に変化してブツブツノイズが入ってしまうので、アニメーションを滑らかに動かすのと同じ要領で、波形を書き込む前にfreqとampの値を滑らかに変化させている。onEnterFrame()はsampleData()が実行された後で実行されるので、2048サンプル分ごとにマウスから値を取得し、新しい周波数と音量を設定していることになる。8192サンプルだと反応が遅いと感じる。この辺りは悩ましいところ。
Adobe - デベロッパーセンター : Flash Player 10で広がるFlashの音の世界
SampleDataEvent - ActionScript 3.0 言語およびコンポーネントリファレンス

滑らかな数値の変化のさせ方は結構面白くて、アニメーションで使われている手法を音にも適用してみたい。
CBCNET - 土日 Flash のススメ(4):動きをつけるということ(イージングについて考える)

日曜日, 11月 02, 2008

non-formatize

六本木のTSUTAYAでお洒落なデザイン本などを眺めていたら発見したnon-formatの作品集。
これの左上。
で大体やりたいことはわかると思うけど、やってみました。

輝度が低い、暗いとこは振幅を大きくして、線が重なることで濃くしてある。だけ。
オリジナルに近づけるにはもうちょっと詰める必要あるな。元画像の作り方にも左右されると思うけど。

モナリザの画像探してる時に見つけたこんなんもある。錯視とかもっと勉強したい。

トラック毎に切り分けて音で聴けるようにしたいところだけど、それはまたいずれ。
最新版(0154)だとminim音鳴らないし。
Processing 1.0 (BETA) - Minim problem... I can't hear ANYTHING

flashでもできるな。BitmapDataクラスでgetPixel()して、値をSampleDataEventに渡す感じだろうか(地味に昨日flashでsine wave鳴らすの直した)。ファイル書き出しもできるからwaveファイルとかも作れるし(miztにソースいただきました)。

ビジュアルからインスパイアされて誰にでも説明できる方法で音作りに持っていけるようになったのはよかったよね。

scriptographerでやりたい。

PImage img;
int x = 0;
int y = 0;
int imgW;
int imgH;
float val;
float amp;

background(255);
colorMode(HSB, 255);
img = loadImage("lisa.jpg");
imgW = img.width;
imgH = img.height;
size(imgW*2, imgH);
image(img, 0, 0);

loadPixels();
for(y = 0; y < imgH; y++) {
for(x = 0; x < imgW; x+=5) {
val = brightness(pixels[y*imgW*2+x]);
amp = (255-val)*0.05;
stroke(100, amp+100);
line(imgW+x-amp, y, imgW+x+amp, y);
}
}
saveFrame("nonformatize.jpg");

月曜日, 9月 22, 2008

drawCircles

scriptographerで円を描く。Documentクラスが持ってる関数を使う。

document.createCircle(x, y, radius);

xとyを中心点とした半径radiusの円が描かれる。
他にも興味深い関数がいくつかあるのでまた試す。

ランダムに色を選びつつ透明度と線の太さを変更。
こういうのは手作業やブレンドツールでやろうとしても難しいのではないかと思う。

drawCircles.js

var radius=10;
var xOff=250;
var yOff=450;
for(var i=0; i<10; i++) {
for(var j=0; j<10; j++) {
var circle = document.createCircle(xOff+i*radius*2, yOff+j*radius*2, radius);
circle.style.fill.color = new RGBColor(Math.random(),Math.random(),Math.random());
circle.style.stroke.color = new RGBColor(Math.random(),Math.random(),Math.random());
circle.style.stroke.width = (i+j)/2;
circle.opacity = (i+j)/20;
}
}

再びscriptographerに興味を持ち出したのはjonathan puckeyのDelaunay Rasterがかっこよすぎたからで、これこのままvjできるっていうか、昔illustratorでプレゼンやって怒られたり怒られなかったりしたんだけど、illustratorで絵を描くことがそのままパフォーマンスになる。scriptographer0.5だと他のオブジェクトに跳ね返りながらパスを描いていくスクリプトがあって、それも同じような面白さがあった。Timerクラスが変わったみたいで実装方法がわからない。

今のところforumを読むのが一番勉強になりそう。
来年jonathanが授業でscriptographerやるって言ってるのが楽しみ。

情報少ないけど、その分キレキレで純度が高いアウトプットに出会える。

火曜日, 7月 22, 2008

20080721

本当はデザインに時間は関係ない。

日曜日, 6月 29, 2008

py-appscript

面白そうなのでやってみた。
py-appscriptでiTunesで再生中の曲を取得する

sh setuptools-0.6c8-py2.5.eggのとこでzlibがなくてinstallできない。ここで少しはまった。
zipimport.ZipImportError: can't decompress data; zlib not available

わざわざzlibをインストールしたけど、pythonをコンパイルし直すとかよくわからず。
もういいやと思ってpythonのバイナリ入れ直そうかと思ったけどエラーでインストールできない。

macportsでpythonを入れてあるのが原因ぽく、Python macports zlib で検索。
» ( ゚∀゚)o彡° Python! Python! easy_install! MacPorts! | ヲゾゾ wozozo blog

ということで、terminalから

sudo port install py25-zlib

すればうまくいって、

sh setuptools-0.6c8-py2.5.egg

も無事できた。

わからないことだらけ。

>>> import appscript
>>> itunes = appscript.app('iTunes')
>>> print itunes.current_track.album.get()
Baby cruising Love/マカロニ

でも安心できるの(一応動いたので)。
いまさらながらtwitter自動ポストとかもできるな。やらないけど。これとあれを組み合わせればできるなとか、別の言語でやる場合はこれに似た何かを探せば(できることなら作れば)いいんだなとかがわかれば収穫。やった気になって何もしないのは駄目だと思うけど。

これやりたい。
pachube :: connecting environments, patching the planet - Map of feeds

ipod、通勤中聴くけど、朝と夜ではあんまり意識してないけどボリュームが違ってて、朝に聴くと音量でかかったりして、前の日の夜の気分とかテンションみたいなものが音量として残ってる感じがして、何となく世界中の人々の音量を知りたいと思った。

bloggerの話だけど、preタグのline-heightとか日によって変わるの何で?

土曜日, 12月 15, 2007

20071215

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

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

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

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

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

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

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

金曜日, 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

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月 04, 2007

20071104

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

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

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

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

木曜日, 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月 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

sonic typeface

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

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



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

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



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



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

金曜日, 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.

水曜日, 6月 27, 2007

sketch20070627



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

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

月曜日, 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月 17, 2007

realtime vjs

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

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

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

realtime vjs!!!

木曜日, 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素晴らしいな。