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