2013年11月27日水曜日

Pdのdata structures

プログラミング言語としてPdを理解するにあたり,上級編…というかある種の真髄みたいなものを感じられると目されている概念が「data structures」です.
弄りはじめたばっかりなので全くさっぱり使いこなせてないですが,とりあえず現状での自分の理解をメモしときます.


Pdはパーツとパーツを線で繋いでアルゴリズムを組めますが,そのようなデータフロー的な処理だけでは,Object-oriented的な意味での「ダイナミックさ」みたいなものに欠けるとも言えます.
例えばデータフロー処理では,音を鳴らした時に「音を鳴らすよ〜」というメッセージを起点にして処理が進んでいくものの,音楽を構成する「音」一つ一つの機能やパラメータを抽象化する概念がそこには足りない,ということです.

そこでPdでは,data structuresという構造体に似た概念が導入されています.
コードの実行時にコード自身によってダイナミックに生成できるインスタンスは,このdata structuresに集約されていると思います.

Processing + Pure Data

メディアプログラミングの海は広大だわ(深淵)

Pure Dataを弄ってると,次から次へとインスピレーションというかアイデアが沸いてきて時間を忘れるほど楽しい.
学生の時に妄想してた「ぼくのかんがえたさいきょうのシーケンサ」とか,いくらでも作れるよなあ…

今,Processing + Pure Data の組み合わせでいろいろと遊んでます.
ProcessingのデザインセンスがPdのインターフェースにも欲しいところですねぇ…

動画の書き出しをするとフレームレートが安定せず,音と映像の同期が取れてないですが一応こんなのを作ってみてます.イマイチ面白くないですがとりあえずってことで.


2013年10月31日木曜日

"random" に関する理解

Processingでグラフィックを描きはじめてすぐに気がついたのですが,random()を呼ぶと毎回違う値を出力してきます.
他の言語ではいわゆる乱数シードをいじってやらないと毎回同じ値が出てくるのとは対照的です.

これ,グラフィックやアートを強く意識した言語であるProcessingのインタラクティブ志向っぷりがシンプルに垣間見えるポイントの一つであるような気がします.


もう10年ぐらい前になってしまうんですが,高専時代の話.
高専って,大学のように最終学年で研究室に入って卒業研究をやるんですが,自分がやらせてもらったテーマはニューラルネットワークの数理的解析みたいなものでした.

最初に先生から以下のような指示を受けました.

「この関数1と関数2にそれぞれループで乱数を与えて,出力を並べてグラフにしてみて.」

Processingでグラフィックのスケッチ

以前,スケッチ用途に良いね〜と紹介したGLSL Sandboxは,本来は既に用意されたポリゴンに絵を貼ったり,影や反射を計算したりするのに使う「ピクセルシェーダ」そのものだけで画像を生成するレンダリング手法.
そのため,頂点の組み合わせ(点,線,面…)で図形を表現する,いわゆる「お絵描き」的なグラフィックは苦手です.典型的には,適当な四角形を描くだけで一苦労&高負荷.

ゲームの開発環境(Eclipse,libGDX)で試作を重ねていくのも可能なんですが,もう少しコンパクトにコードベースの「お絵描き」スケッチができる環境はないかな〜と思っていました.

MP3再生ソフトにあるようなビジュアライザなんかの方面にいい解決策があるんじゃないかと思っていろいろ漁ってたら,Processingというプログラミング言語に辿り着き.

2013年10月18日金曜日

How to embed pd-for-android in your libGDX project

libGDX supports cross-platform game development.
It is very convenient in the case of using your PC as a test environment of a mobile game application.

When you set up cross-platform project using gdx-setup-ui.jar,
following project folders will be made.
  • my-gdx-project : core project, includes main sources, common libraries and interfaces
    • your sources are connected to libGDX
  • my-gdx-project-android : Android project, includes only Android specific implementations and native libraries
    • libGDX is connected to Android: OpenGL ES, touch input, etc
  • my-gdx-project-desktop : Desktop project, includes only Win/Mac specific implementations and native libraries 
    • libGDX is connected to Win/Mac: DirectX, OpenGL, mouse input, etc
libpd is a library to embed the Data-Flow programming language Pd(Pure Data) in our application programs. Additionally, in Android systems, libpd supports OpenSL ES audio API expected to reduce audio latency after Jelly Bean.

libpd needs platform-specific implementations. So if you want to use libpd in the cross-platform projects, it would be better to trace the same way as above libGDX connection.