2015年1月18日日曜日

ShaderJockey on Pure Data

GLSLで書かれたフラグメントシェーダーを読み込んで
VJ的にコントロールするツール "ShaderJockey" をPdで作ってみました.
一応GLSL sandbox互換です.


2014年12月16日火曜日

PdのGEMでGLSL

GEMでプログラマブルシェーダーを使う方法を,Pdパッチングサークルで紹介しました.
GLSLで絵を描く理屈についての基礎的な説明を作ったので貼っておきます.

2014年6月2日月曜日

libpdの紹介スライド

Pure Data Japanさんの第5回パッチングサークルでlibpdの紹介をしまして,その時に使ったスライドを公開しました.

細かいセットアップ方法とかは省略して,簡単さと旨みが伝わりやすいような内容にしてます.

2014年5月22日木曜日

Processingでお手軽Kinectプログラミング

KinectとPure Dataを連携させるための方法はいくつか考えられますが、まず正攻法としては、openFrameworksでアドオンをつけたC++のコードを走らせるというものがあると思います。

しかし、Pdはまぁ別として、JavaやObjective-Cをがんばって覚えている所にC++まで頭に詰め込む必要があるというのは、そろそろしんどいというか面倒になってきました。

そこでコイツが浮上。
Simple OpenNI
Processing上でOpenNIを使うラッパーです。

2014年5月16日金曜日

Kinect on OpenNI

いろいろあって,6月末までにモーションセンサーを使った音楽インスタレーションを仕込むことになりました.
しばらくゲーム制作のほうはストップして,そっちを仕上げることに時間を使おうと思います.

2014年4月18日金曜日

Pdのノブ型オブジェクトを作った

2017/08/14 Update:
Pd ver.0.46以降で動かなくなったので対応版に更新しました.
Pd自体のGUIの仕様が変わったので互換性はありません.

Pd-extendedの中には,実は数式評価[expr]の他にもGPLやLGPL適用のソフトが結構あって,普通のツマミ[knob](flatgui/knob)も何気にその1つです.

AndroidやiOSアプリは,上記のような感染性ライセンスとの相性が悪く,Pdを使う場合に留意する必要があることはたびたび強調されています.
公式メーリングリストでもトピックになっています:
[PD] Legal restrictions for apps

2014年4月8日火曜日

PdでReverbを作る(スクラッチビルド)

アルゴリズミック(もしくはパラメトリック)なReverbには,代表的な理論がいくつかあります.
その中でも、"diffusion" "decay" "dump" と呼ばれるような係数で記述される「コムフィルタ式」Reverbは,デジタルミュージックの世界では特に有名.DTMに触れたことがある人ならご存知かと思います.

今回,そのコムフィルタ式Reverbの代表的なモデルとして以下の3つを勉強してみました.

2014年3月14日金曜日

Pd-extendedの現行バージョンをPPC Macintoshで使う


Pd-extended 0.43.4 ubuntu ppc package apt repository

iBook G4の延命策としてSSDを入れたのに伴い,試験的にUbuntu 12.04を導入してました.

Ubuntuはaptのフロントエンドであるsoftware-centerやsynapticを完備しているので,基本的には欲しいアプリケーションは簡単にインストールできます.
(サウンドAPIは相も変わらずPulseAudio周りの癌っぷりが発揮されてますが…)

ただ,PowerPCという動作環境の都合から,aptの恩恵にはあずかり切れてません.
というのも,PowerPCコンピュータ向けに用意されているパッケージは今となっては限定的.Pure Dataもプレーンなvanillaバージョンしか供給されておらず,各種拡張機能がセットになったPd-extendedは入手できませんでした.Pdの公式リポジトリでも同様.

仕方がないので自前でBuildしました.


以下,やったことメモ

2014年2月26日水曜日

GPUと仮想化

近頃のパソコンは仮想化関係の機能がとても進んでいて驚いてます.
Parallels Desktopの現行バージョンでは,FireWireデバイスを仮想マシンに直接接続できるので,オーディオI/FをASIOで直接鳴らすことまでできてしまいました.

しかし,一番驚いたのがDirectX 10のサポート.
DirectXは,バージョン10でハード/ソフトの両レベルにプリエンプティブマルチタスクみたいな機構を取り入れたようで,「決め打ち一本処理ぶんまわし器」のようなDSP的な処理機構だったGPUも,なにやら抽象化されたタスクやメモリ空間を扱うような時代に.
仮想化界隈もこの技術の恩恵を受けて,劇的な実効性能の改善が図られているようです,

当初,最新のOSを仮想マシンで動かしても処理のオーバーヘッドが大きくなるだけで速くならないだろうと思ってたんですが,そんなこんなで話はもうすこし複雑でした

Windows XPがサポートしているのはDirectX 9まで.
最新のWindows 8.1を導入して,DirectX 10アクセラレーションを効かせてみると…

Parallels Desktop 9 on OS X Mavericks 10.9.1 
Xeon X5650 2.66GHz 6コア中2コア割り当て
Radeon HD7850 1GB中512MB割り当て
「ファイナルファンタジーXIV: 新生エオルゼア ベンチマーク キャラクター編」でテスト

Windows XP SP3


Windows 8.1


凄い!
最新のモバイル&ミニデスクトップ向け内蔵GPUであるIntel Iris Pro 5200を上回る性能.
MacBook Proのトップモデルでネイティブ起動したWindowsと同等以上のパフォーマンスが,仮想マシン上で手に入っていることになります.

(ちなみにネイティブ動作では,フルHDの最高品質設定でスコアは7400らへんでした)


2014年2月20日木曜日

x86のAndroidエミュレータでlibGDXを走らせてみた

Androidでのテストは「Nexus 7」の実機で行っているので,仮想環境は今のところ不要.
とはいえ,前のマシンで話にならなかったのがどの程度改善したかなと思い,仮想環境での動作を試してみました.

Atom仮想マシンを使ってAndoidを起動.ホーム画面やブラウザは結構スムーズに動く!

これはちょっと期待できるかもと思い,制作中のプロジェクトをx86向けにビルド.
libpdのpd-for-androidはx86向けのコンパイルオプションが最初から入っているので何も考えなくてOK.
libGDXは現在の安定板ではx86非対応ですが,タイミングの良いことに開発中のnightly buildがサポートを始めているので,ライブラリを最新のものに差し替え.ビットマップフォント表示の関数でバグが出ましたが,そこだけコメントアウトしてあっさり起動しました.



描画はせいぜい30fps.マシンパワーにはまだ余裕があるのでAVD側で間引いている気がします.音も一緒に間引かれたような感じで潰れた音になってますが,一応は止まらずに動いてます.取り急ぎのテストということで.

MacのGPU事情に関する疑問

Eclipseが重すぎるので、制作環境をMac Pro(アルミメッシュ筐体の旧式)にアップグレードしました。
DAWでゴリゴリ曲作るよりもテキストベースのコーディングのほうがマシンパワーを食うというのは,なんかすごい時代だなぁとつくづく思いますが…

旧式とはいえ久々のニューマシン.EclipseとLogicとPdを立ち上げて音楽プログラミングをしながら、ブラウザのタブを何十個も出してヘルプサイトを参照しつつ、ニコ動巡回しながらParallelsでエロゲやっててもまだまだ余裕があります!!すごい!!(集中しろよ


さて,Mac ProはCPUやビデオカードの換装が可能なので、中古相場が落ちついてきた2009年モデルをベースに色々とカスタムしたのですが、ビデオカード選びで少々悩みました.

2014年1月17日金曜日

libGDX framerate drops problem

libGDX projectをAndroidで走らせると,一部の機種でフレームレートが落ちる問題.
AppのActivityスタート時は 30〜45fpsなんですが,
・端末をスリープ→スリープ解除する
・ホーム画面や別のAppに切り替えてから戻す
・音量を変更するなどしてDialogを出す
等の操作をすると,60fpsで安定する状態になります.

以前の動画↓で最初に音量を変更しているのも,実は上記の理由があったんですが(笑)



2013年11月30日土曜日

Data structures 覚え書き(1)



PdのData structuresを使ったオブジェクト操作は,
・scalar(data structuresのインスタンス)自体を見れないこと
・何もワイヤーがつながっていないオブジェクトが動作しはじめること
というPdの基本的な処理フローと違う2要素の合わせ技が,まずワカリニクイところだと思う.

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.