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

木曜日, 9月 03, 2009

openFrameworksでSndObjを使う

Programming Interactivityに載ってた。著者のJoshua NobleさんがofxSndObjを作ってるのですね。

前回ofxMSAPhysicsでものすごく面倒なやり方をしてましたが、これは僕がXcodeの使い方をわかってなかった。
XcodeのProjectメニューからAdd to Project...して追加したいaddonのsrcフォルダとlibフォルダを選べばいいだけのことでした。それでXcodeの画面で追加したsrcとlibsをaddonsというグループにまとめておくという流れ。XcodeのGroups & Filesは実際のフォルダ構成とは別物。合わせておくとわかりやすい場合もあるというだけ。

僕のopenFrameworks関係のフォルダ構成は
+of
-addons_contributed
+of_preRelease_v0.06_xcode_FAT
-addons
+apps
-addonsExamples
-examples
-sketch
-libs
-other
-samples

という風にしていて、標準で入っているaddonとそうでないものを分けています。ofxSndObjはaddons_contributedに入れてる。samplesはネットとかで拾ってきたコードを入れておくフォルダ。

以上を踏まえて新しいemptyExampleをsketch以下にコピーして名前を変えた後、ofxSndObjのsrcとlibsを追加し、testApp.hとtestApp.cppを以下のようにすればお約束の440Hzのサイン波が鳴るはず。

testApp.h
#ifndef _TEST_APP
#define _TEST_APP


#include "ofMain.h"
#include "ofxSndObj.h"
#include "AudioDefs.h"

class testApp : public ofBaseApp{

public:
void setup();
ofxSOTable t;
ofxSOOscillator o;
ofxSndObj sndobj;
};

#endif

testApp.cpp
#include "testApp.h"

void testApp::setup(){
sndobj.startOut(true, 1);
t.init(sndobj, 2500l, SINE, 1.f);
o.init(sndobj, t, 440.f, 10000.f);
sndobj.setOutput(o, OFXSNDOBJOSCILLATOR, 1);
sndobj.startProcessing();
}

日曜日, 7月 26, 2009

openframeworksでaddonを試す

FATで入ってるaddonはいいとして、他のaddonを使う時はどういう方法がいいのかなと思って試してみました。かなり愚直なやり方です。

ofxMSAPhysicsを使ってみる。
processingのtraer physics(いつの間にかソースが公開されている!)に似たAPI。

1.ダウンロード
svnがわかる人は
svn checkout http://ofxmsaof.googlecode.com/svn/trunk/ ofxmsaof-read-only

わからない人はミラーからダウンロードできます。
ofxPhysics以外にも色々入ってます。

2.プロジェクトを作る

apps/examples/emptyexamplesフォルダをコピーしてペースト。フォルダの名前をPhysicsTestとする。その中にaddonsというフォルダを作り、ダウンロードしたフォルダの中からofxMSAPhysicsとofxObjcPointerをコピーしてaddonsフォルダの中にペースト。srcフォルダ以外を消しておく。
ofxObjcPointerはメモリ管理に使っているらしい。

xcodeprojファイルを開いて、Finderからaddonsフォルダをドラッグして「Groups & Files」にドロップ。日本語環境だと「グループとファイル」。僕は調子こいて英語にしています。

ダイアログが出てくるので多分そのままOKすればいい。上の方にフォルダをコピーするかどうかチェックする項目があるけど、今回はプロジェクト内に既にコピーしてあるのでチェックは外しておく。ラジオボタンは「Recursively Create Groups for any added folders(追加したフォルダに再帰的にグループを作成する)」方で。src以外を消したのはここで変なことにならないため。

これで準備完了。

3.コードを書く
examplesの中身をコピーしてもいいですが、複雑なので使い方を覚える意味でも必要そうなところを抜き出して改変しました。マウスをクリックしたらボールが落ちてくるサンプルです。キーボードを押すと消えます。

ofxMSAPhysics physics;
でofxMSAPhysicsクラス型を宣言して、physics.makeParticle(x,y,z)でパーティクルの生成。
p->xとかが何なのかわからない場合はSBAW09の第11回目とかOF for Processing usersとかOoops!を参照。

ソースコードがうまく貼付けられなかったのでプロジェクトごとアップしました。
physicsTest.zip
---
*2.についてもう少しましなやり方を後日知った。

金曜日, 7月 17, 2009

openframeworksの始め方

去年YCAMでのワークショップに参加したopenframeworksですが、その後iPhone版(ofxiphone, mobileframeworks)が出たり、多摩美の授業SBAW09が公開されてたしているので、再び勉強してみようと考えています。Mac OS10.5.7 Xcode3.1.3です。買ったばっかりのMacBook Proです。

openframeworksはここからダウンロードできます。FATというのはOpenCVなどがaddonとして組み込まれているバージョンです。通常はこちらをダウンロードして使えばいいと思います。

一番最初にopenframeworksに触れた時は、Xcodeの使い方がわからないこともあり、何からどうすればいいのか全くわかりませんでした。

普通のプログラム開発は、ライブラリなどを必要に応じて追加していくことが多いと思うのですが、openframeworksの場合は逆です。必要となる環境が予め用意されていて、高度なc++の知識なしにアプリケーションを作ることができます。

zipファイルを展開してできたof_preRelease_v0.06_xcode_FATフォルダ内に、appsというフォルダがあります。その中にexamplesフォルダとaddonsExamplesというフォルダがあり、名前の通りそれぞれのサンプルコードになっています。openFrameworks.xcodeprojというファイルを開き、Build and Go(ビルドして進行)でアプリケーションができ上がるはずです。

of_preRelease_v0.06_xcode_FATフォルダはどこにあってもいいですが、僕の場合はホーム以下にdevというフォルダを作り、言語毎に分けているので、ofというフォルダを作ってそこに入れてあります。
このようなファイルの管理方法も今後よく考えていく必要があります。

新しく自分でプログラムを書く時は、通常のものならばemptyExample、addonを使う場合はalladdonsExampleを複製して使います。apps以下に新しくフォルダを作り(僕はsketchというフォルダ名にしています)、複製したフォルダを格納します。apps以下のフォルダも、複製してできたフォルダも名前は何でもいいですが、libsフォルダやaddonsフォルダを読み込むため、階層構造はexamplesなどと同じにしておきます。.xcodeprojという拡張子のついたプロジェクトファイル名を変更する場合は.plistファイル名も変更し、中身の編集も必要です。方法はSBAW09の第五回に書いてあり、テンプレートも作って下さっています。僕は変更しないで作ってます。

よくネット上でサンプルコードが配られていたりしますが、これらの仕組みを知らなかったので動かし方がわかりませんでした。Xcodeのドキュメントなども読む必要がありますね。

processingなどに比べていいことは、速いのは勿論、ソースコードを辿りやすいということです。例えばofRectという四角を描画する関数は、libsフォルダの中のopenframeworks/graphics/ofGraphics.cppに書いてあります。これを読めばどのような処理を行っているかがわかります。なので勉強にもいいです(あまり良い書き方がされていないという声も聞きますが僕にはまだわかりません)。

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

火曜日, 3月 06, 2007

openframeworks pre release

遂にpre releaseとなったopenframeworks。ダウンロードしたファイルを解凍して、__Instructions.txtに書かれている通り_G5 G4 CLICKと_G5 G4 CLICK TOOというファイルをクリックするも何も起こらず。これが原因でサンプルがコンパイルできないらしくmixi経由でトビに質問。of_preRelease_v0.01_xcode/libs/freeimage/内のppcFreeImage.zip、of_preRelease_v0.01_xcode/libs/freetype_osx_local/lib/内のppcFreeType.zipをそのまま解凍すればいいだけだった(丁寧にありがとう!)。

で、exampleをいくつか試してみたところ、audioOutputExampleなんかは描画も速いし音のキレもいいなーという印象。forumに載ってたofGetFrameRate()使ってfps表示してみました。こういう時にどういう情報載せるのがいいのかよくわかってませんが、プロセッサ 1.25GHz PoworPC G4 メモリ 512MB DDR SDRAM グラフィックス ATI Mobility Radeon 9600ってな環境で実行しました。Xcodeは2.4.1。


最大で350fpsくらいは出てたかな。計測の仕方が正しいのか不安...。修士制作で使うメインの言語を何にしようかってので色々試してるんだけど、時と場合に応じて色々使い分けられるようになりたい。徐々に開発サイドにも回っていきたいし。openframeworksのSet up GuidesはMacユーザ用のXcode、Windowsユーザ用のdev C++、VC++ 2005の使い方についても丁寧に書かれているので、僕のように開発経験の少ない人でも読み易くなってます。

とにかく、正式版が待ち遠しいです。
http://www.openframeworks.cc/

openframeworks開発者
zachary lieberman
theodore watson

zacharyのmaking things moveはprocessing(p5)のいい勉強になります。
theodoreはデザインもサイバー過ぎず素敵。audio spaceとかマジで悔しい。

他、openframeworks関連の記事
ことぶ記
create digital motion
software over the rainbow
Michael Ang
abstract machine

日曜日, 2月 04, 2007

creative code

processingの本が出るみたい。
Processing:Creative Coding and Computational Art

p5のc++版みたいなopenframeworksも気になるところ。