More Related Content
Similar to Coma studyroom
Similar to Coma studyroom (20)
Coma studyroom
- 7. about me
‣
cohei aoki a.k.a coa
‣
coma/ROKUROのディレクター兼エンジニア
‣
本業はフリーのプログロマー兼ディレクター
‣
CutterというFaderでMax/Mspを使った演奏を行うFader演奏家
7
- 12. coma Disco System Design
Arduino
Device
Openframeworks
osc
OSC
Sever
node.js
Gravity
app
osc
client
OpenGL
osc
12
- 15. node.jsはミニマルなやつ
Webページだすだけでこんなコード
var pages = [
{route: '', output: 'Woohoo!'},
{route: 'about', output: ' シンフルなサンフルコートてす。'},
{route: 'another page', output: function() {return ' これが '+this.route;}}
];
http.createServer(function (request, response) {
var lookup = path.basename(decodeURI(request.url));
pages.forEach(function(page) { if (page.route === lookup) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(typeof page.output === 'function' ? page.output() :
page.output); }
});
if (!response.finished) {
response.writeHead(404);
response.end(' ヘーシが見つかりません! '); }
}).listen(8080);
15
- 20. SmartPhone Browerで加速度を取得
function iosHandleOrientation(event) {
var orientData = event.accelerationIncludingGravity;
var accel_scale = 30.0;
var filter_val = 0.1;
pos_x = (orientData.x*accel_scale * filter_val) + (pos_x * (1.0 - filter_val));
pos_y = ((orientData.y*accel_scale * filter_val) + (pos_y * (1.0 - filter_val)));
pos_z = (orientData.z*accel_scale * filter_val) + (pos_z * (1.0 - filter_val));
pos_z = pos_z * -1;
socket.send(evt);
}
//リスナーに登録
window.addEventListener("devicemotion", iosHandleOrientation, true);
20
- 24. OpenframeWorks coding
oscListener
oscイベントの受信を受信し、nodeModelを追加、更新、削除していく。
void update(){
// すべてのノードのステータスをクリア
nm->allNodeStatusClear();
while( receiver.hasWaitingMessages() )
{
// get the next message
ofxOscMessage m;
receiver.getNextMessage( &m );
string address = m.getAddress();
// /accsxy/id/x/y/zで値が送られてくる。
if( address == "/accxyz" ){
nm->updateModels(m.getArgAsString(0), m.getArgAsFloat(1), m.getArgAsFloat(2), m.getArgAsFloat(3), 0);
}
if( address == "/accxyz/" ){
float scale = 0.3;
nm->updateModels( m.getArgAsString(0), m.getArgAsFloat(1)*scale, m.getArgAsFloat(2)*scale,
m.getArgAsFloat(3)*scale, 0);
}
}
//値が更新されていないノードがいないかチェックして存在していれば生存フラグを落とす
nm->ckIdleNode();
//生存フラグが落ちたノードを削除
nm->eraseNode();
}
24
- 25. OpenframeWorks coding
nodeManger
nodeの追加、更新、削除を行うためのClass
int nodeManager::addModel(string id,float x,float y,float z,int size)
{
ofColor color;
color.setHsb(ofRandom(0,255), 128, 220);
NodeModel* nodeModel = new NodeModel(id,x,y,z,size,color);
nodes.push_back(nodeModel);
}
void nodeManager::updateModels(string id,float x,float y,float z, int size){
//nodeがすでに存在しているかチェック
int myI =ckModelId(id);
//nodeが存在すればノードを更新、存在しなければ新たなノードとして追加
if (myI > -1) {
nodes[myI]->setModel(id, x, y, z, nodes.size());
}else{
addModel(id,x,y,z,nodes.size());
}
}
25
- 26. OpenframeWorks coding
nodeModel
nodeManegerから受け取った値をもとに描画
NodeModel::NodeModel(string inId,float inX,float inY,float inZ,int inSize, ofColor inColor){
id = inId;
x = inX;
y = inY;
z = inZ;
lifeTime = 0;
idelTime = 0;
status = 1;
kuma = new Kuma( 5, inColor );
rira.loadImage("rira.png");
eye.loadImage("x.png");
circle.loadImage("circle.png");
size = inSize;
}
int NodeModel::setModel(string inId,float inX,float inY,float inZ,int inSize){
id = inId;
x = inX;
y = inY;
z = inZ;
lifeTime++;
status = 1;
size = inSize;
}
void NodeModel::draw(int num){
string::size_type iFindCheck = id.find("kuma");
if(iFindCheck == string::npos){
float scale = 15.0;
kuma->update(ofVec3f(x*scale, y*scale, z*scale), size, num);
kuma->drawCircle(circle);
}else{
kuma->drawImage(rira,eye);
kuma->update(ofVec3f(x, y, z), size, num);
}
}
26
- 27. OpenframeWorks coding
nodeModel
nodeManegerから受け取った値をもとに描画
NodeModel::NodeModel(string inId,float inX,float inY,float inZ,int inSize, ofColor inColor){
id = inId;
x = inX;
y = inY;
z = inZ;
lifeTime = 0;
idelTime = 0;
status = 1;
kuma = new Kuma( 5, inColor );
rira.loadImage("rira.png");
eye.loadImage("x.png");
circle.loadImage("circle.png");
size = inSize;
}
int NodeModel::setModel(string inId,float inX,float inY,float inZ,int inSize){
id = inId;
x = inX;
y = inY;
z = inZ;
lifeTime++;
status = 1;
size = inSize;
}
void NodeModel::draw(int num){
string::size_type iFindCheck = id.find("kuma");
if(iFindCheck == string::npos){
float scale = 15.0;
kuma->update(ofVec3f(x*scale, y*scale, z*scale), size, num);
kuma->drawCircle(circle);
}else{
kuma->drawImage(rira,eye);
kuma->update(ofVec3f(x, y, z), size, num);
}
}
27
- 29. more info
• 11/24にableton LiveとJitterを組み合わせ
たAudio+Visualのレクチャーとライブし
ます。
• Openframeworks、node.js、Arduinoに
興味をもったかた、すでにやられている
方、一緒に何かつくりましょう!
29