木曜日, 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();
}