応用編2: PythonとopenFrameworksとPuredataをOSCで接続する

応用編1: pythonとopenFrameworksをOSCで接続する はじめに どうもこんにちは。バイトの片山です。最近は暑すぎるせいか、前置きを考えるのも面倒になってきました(酒の飲み過ぎで脳みそが萎縮しているのかもしれません) 今日はこの間予告した通り、PythonとopenFrameworksとPuredataをOSCで繋いでいきたいと思います。 一応掲載しますと、今回使用するもののバージョンはそれぞれ Python : 3.5.2 openFrameworks : 0.9.8 Puredata : 0.43.4-extended となっています。OSはいつも通りですがOS Xのエルキャピタソです。 本編 今回の予定は、Pythonを始点として、openFrameworks(映像)、Puredata(音)という順番にOSCメッセージで繋いでなんか作る、という感じです。 ↓イメージとしては [Python] –> port:8002 –> [openFrameworks] –> port:5111 –> [Puredata] 「なんか作る」がとても不穏な感じですが、ひとまず始めていきます。 とりあえずPuredataのパッチを作る まずは終着点となるPuredataのプログラムから作っていきます。 今回は以前のようにサイン波の加算合成だけで終わるようなしょうもないのは避けたかったのでFMシンセを使ってみることにしました。(どちらにしろ下らない感があるのは否めませんが……) 3つほど使ってないメッセージがあるのは見逃して下さい。(上手い用途がまだ思いつきませんでした) ランダムを使っているところも手動で調整すれば十分じゃないか……というツッコミも無しで。 まずはメインパッチとなるpyosc.pdです。 pyosc.pd 構造としては、左チャンネルと右チャンネルに分けて音が出るようにして、それぞれgain等パラメータをいじれるようにしてあげた感じです。 あと、gainを調整するための垂直スライダーは2つとも[右クリック>プロパティ]から「出力範囲 上:」を最大で1にしてください。振りではないので必ずやって下さい。 次にpyosc.pdの中に入っているサブパッチの、pd fm-synthパッチとpd modパッチです。 pd fm-synth とてもシンプルなFMシンセのプログラムです。 FMシンセをそのままいくつも作るとpyosc.pdが異常に巨大化して編集し辛くなるのでサブパッチ化(部品化)しました。 pd mod こちらはpd fm-synthのハーモニシティレシオとモジュレーションインデックスにかけるモジュレーターをひとまとめにしたものです。これ無しで各個設定してあげても良いのですが、折角なら時間的な変化を付けてあげたいということで今回作ってみました。 openFrameworksのプログラムを作る 別に大したものを作るつもりはありません。Pythonから受け取ったOSCでoFで映像を作りつつ、oFからPuredataにOSCをスルーパスするコードが参考になれば幸いです。ってレベルです。いつも通り雑コードです。ゴミです。もっとキレイにまとめられそうな気はしてます(とりあえず動いてるしいじるのが面倒くさい) oFのプロジェクトをジェネレートする時にOSCのライブラリをインポートするのを忘れないようにしましょう。 ofApp.h #pragma once #include “ofMain.h” #include “ofxOsc.h” #define SERVER_PORT 8002 // 受信ポート #define CLIENT_PORT 5111 // 送信先ポート #define HOST “localhost” class ofApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseEntered(int x, int y); void mouseExited(int x, int y); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); void dumpOSC(ofxOscMessage m); void sendOSC(ofxOscMessage n); int list[10]; private: ofxOscReceiver receiver; ofxOscSender sender; }; ofApp.cpp #include “ofApp.h” //————————————————————– void ofApp::setup(){ ofBackground(0); ofSetFrameRate(30); ofSetCircleResolution(32); ofSetBackgroundAuto(false); ofEnableAlphaBlending(); receiver.setup(SERVER_PORT); sender.setup(HOST, CLIENT_PORT); for (int i = 0; i < 10; i++ ) { list[i] = … Continue reading 応用編2: PythonとopenFrameworksとPuredataをOSCで接続する