Posted at

PixilangでやるAudio Visual Programming

More than 5 years have passed since last update.


ピクセル指向プログラミング言語 Pixilang

Pixilangはロシア発のプログラミング言語で、グラフィックスとかサウンド系の簡単なアプリを作るのとかに使える感じの言語です。この間窓の杜のレビューで取り上げられていたシンセアプリPixiTrackerもPixilangで作られていて、頑張ればしっかりしたアプリも作れるみたいです。

Pixilangについては過去に僕のブログでちょっと紹介しているのでとりあえずそれを読んでみてください。ブログ内をPixilangで検索


ピクセル指向

もともとは非プログラマーだとかデモ製作者とかデザイナーだとかをターゲットにした言語だそうです。でもまあ本当のプログラミング未経験者が簡単にグラフィックスとかサウンドとか華やかな作品を手軽に作りたいって思うなら、Processingのほうが向いているんじゃないかなと思います。ドキュメントも機能も沢山あるし。

Pixilangには、円を書くみたいな命令もなくて、プリミティブな命令ばかりです。それでも、頑張れば色々な機能が実装できるし、実際に優れたアプリが開発されているので、機能が足りないわけではないと思います。pixel-orientedなので、自分でドットを打って絵を書いたり、PCM波形を書き込んで音を鳴らしてください。そういう言語なので、プチコンやHSPみたいなのものでプログラミングするのが好きな人に向いていると思います。


構文

ぱっと見Cっぽい。文末のセミコロンはあってもなくてもいい。改行は無視される。ローカル変数の頭には$が付く。for文は無いみたいだからwhile文で代用すること。などなど、詳しくはマニュアル読んだり、実際に使いながら覚えるのが早いと思う。

注意点として、

x + 1

という文があったら、これはC言語でいう

x += 1

の意味です。


コンテナ

Pixilangのデータは全部数値で、データ構造は全部コンテナ(配列)です。新しいコンテナはnewで生成し、removeで削除します。GCなんて機能は付いていないので、newし続けてremoveしないと、コンテナIDを使いきってエラーになるので、ちゃんとremoveするように頑張ってください。

「文字列」の実体はコンテナです。コンテナにはIDが振られていて、これは数値です。たとえば次のプログラム。

i = 0

while i < 10 {
x = "hello"
printf("%d %s\n", x, x)
x[0] + 1
x[1] + 1
x[2] + 1
x[3] + 1
x[4] + 1
i + 1
}

実行結果はこうなります。(実行前後にVMのメッセージが表示されますが省略しています。)

7 hello

7 ifmmp
7 jgnnq
7 khoor
7 lipps
7 mjqqt
7 nkrru
7 olssv
7 pmttw
7 qnuux

while文の中にx = "hello"という文があるのですが、コンテナがhelloという内容に初期化されるのは1回だけで、あとは同じコンテナIDがxに代入されるだけです。この性質を理解していないとはまります。printfの書式指定子の指定次第で、コンテナIDが表示されたり、コンテナの中身を文字列と解釈して表示したりしていることにも注目してください。


使ってみた

春学期の実験でPixilangを使いました。使う必要全くない実験だったんですけど、まあなんとなくOpenCV使いたくなくて、Pixilangで直接画像いじればいいや的な感じで使いました。

Kinect叩くためにVisual C++でラッパーDLLを作って、それを呼び出しています。ついでに画像処理も一部C++で実装しています。モダンな機能なんて全然ないけど、まあC言語でプログラミングできるなら使えなくはない。グローバル変数使いすぎな感じがするけど、この程度の規模のプロジェクトならまあ許容してください。ピクセル指向なんで……


移植性

PixilangはWindows, Mac OS X, Linux, Android, iOS, WinCEと、多くの環境に対応しています。Pixilangでアプリを作ったら、それにVMのバイナリを付けてそのまま配布できちゃいます。いいですね。もちろんDLL叩いている場合とかは、環境ごとにコード切り替える必要ありますけどね。


興味が出てきたら

とりあえずPixilangをダウンロードして、サンプルを動かしてみてください。そしてソースコード読む。

Soul ResonanceっていうAudio-visualアルバムも、Pixilangで実装されていて、これはソースコードが読めます。こういったプログラムを参考ににして、PixiTrackerやSunVoxで作った楽曲をビジュアライズしてみてはいかがでしょうか?