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