Pentanium Reactor Blog

ゲーム、アニメ、CG、プログラミング

歯ブラシ

2012年05月11日 04時14分06秒 | プログラミング

5/5日にあった歯ブラシ解読会 ~Dive into farbrausch's source code~に行ってきた。
なんと会場はGWをときめく渋谷ヒカリエ。
1階の入り口は行列になっているので、2階の渋谷駅直通口や地下から来て下さいというメールが来るほどの人の多さ。
いまいちセンスの判らない外観とは裏腹に中はとってもオサレな上に、集合場所の11階のオフィスフロアの入り口には未来っぽいデザインの自動改札のようなものが。
さらにそこからエレベーターで上って、東京を一望できる21階の会場のDeNAの会議室へ。
すごいところにオフィスを構えたもんだDeNA。
会場は電源もWiFiも机もあって、プロジェクタが2面もある豪華仕様。
しかもここで開かれるはじめての勉強会だったそうだ。

というわけで以下そのメモ的なものと感想をつらつらと。
なおスライドがそのうち上がるという話なので詳しい話はそちらで。

関連リンク
今回の酒肴
farbrausch
pouet.net
pouetのfarbrauschの作品一覧
当日のtogetter 1号
当日のtogetter 2号

● デモシーンとは & Revision2012レポート (kioku)
- デモシーンについての簡単な解説と、最新で最大級のデモパーティRevision2012に関しての報告を行います。
デモパーティーは堅苦しい技術発表会じゃなくてパーティーだよ!というお話。
ドイツでは梅酒が好評だったそうだ。

● OldSkool Scenes (T_S=RTX1911=)
- fr-081 frozenにも登場しているC64やAMIGAの簡単な説明、そしてTrackerを使ったchiptuneの作り方
実はfarbrauschはC64にもAmigaにもデモを作ってない!という衝撃の開幕(笑)
Commodoreの歴史の解説とフロッピーの読み取り音まで流れるエミュレーターAmiga foreverC64 foreverの紹介。
最後にMilkyTrackerを少し。
MilkyTrackerの実演はもうちょっと見たかった。

● glew4k最小伝説 (tomohiro)
- glew4kの紹介、使い方の説明、仕組みの解説など。
GLEWを4kのデモで使うために小さくしましょうというお話。
マクロをいじって使ったものだけを抽出して、最小のGLEWを作る。
実験したものでは10数個くらいになったとか。

● (゜∀゜)アヒャ!っとwerkkzeug3フル版 (mwsss)
- ニコニコ動画にアップロードした動画を見ながら解説
『ヴェァグツォィク』3の使い方。
縦方向にノード(?)を積み上げてシーンを構築していくという変態的な独特のUIのツール。
どうやら上から下方向に、選択されているところまでが画面に反映されているようす。
実行不能な部分は赤く表示されるなどなかなかユーザーフレンドリー。
メッシュにはディスプレイスなんかも適用できるそうな。
そしてこまかい動きなどは専用のスクリプトで制御するらしい。
いわばデモエンジン。なんとも恐ろしいツールを使っているものだ。
ちなみに最新版のwerkkzeug4はGitHubのリポジトリにexeが入っている。

● werkkzeug3のGUI実装 (perim)
- 独自実装でカッコイイGUI実装部分について話します。
ではその変態個性的なUIはどうやってできてるの、というお話。
既存のライブラリは使わずに全て独自に実装しているそうな。
アプリ本体がルートになっていて、いわゆるイベントハンドラのメソッドが定義してある拡張クラスがぶらさがっていくという木構造。
イベントはcommandと呼ばれて、一度Bufferにためられてメインループのタイミングでターゲットから親へと伝搬していく。
いわゆるイベント駆動型のUIフレームワーク。
独特のUIとはいえわざわざ全部作らなくても...と思わなくもないけどそのほうがKoolだからいいのだろう(本当か?)

● ChaosなScript (hole)
- Script言語内臓してる上にオリジナルVM向けにコンパイルまでしてて面白かっこいいscript.cppを読みました
farbrauschの一連のデモフレームワークとそれに使われているオリジナルスクリプトの解説。
歴史的には GenThree -> RauschGenerator 2 -> Werkkzeug3 -> Werkkzeug4 の順だそうだ。(全部GitHubに上がってる)
GenThreeのころはこれからは全部スクリプトで制御の時代だッ!とがんばっていたのだが、64k introでは容量的に不利なので控えめになっていったとか。
しかしWerkkzeug3からは容量無制限のPC Demoをターゲットにして目下スクリプト成分増量中という感じ。なのかな。
スクリプトはベクトル構文やsmoothstep命令などを備えたデモに特化した設計で、バイトコンパイルされてスタックマシーンのVMで実行されるそう。
GUI{}というブロックを書けば前出のWZ4の編集画面で数値入力フォームが表示されたりするらしい。
ますますもって恐ろしいツールだ。

● 未定。(ronan.cppの話) (301)
- Candytronの歌姫Ronan(Speech Synthesizer)で遊ぶ
v2 synthesizer systemに含まれるSpeech Synthesizer "Ronan"の解説。
これはライブスライド(?)でスライドは無いかもしれない、とのことでまずはメモ。
-----
Ronanという素敵な名前はアイルランド系。
しかしDr. RonanというSpeech Synthesisの研究をしているおっさん博士がいるので元ネタはそっちかも。(この人?)

Speech Synthesizerといううたい文句だが実態はエフェクターのようなもの。Vocalizer。
つまり音声を合成する機能はなく、外部から元になる波形を送り込む必要がある。
その波形を複雑なフィルタ(レゾネーターが8個とか言っていた)で加工して声のようなものにしている。
したがって肝はフィルタの制御。
そのためにまずテキストを「Phoneme:音素」「Syllable:音節」「Lyrics:歌詞」に分解する。
Phonemeは発音記号のようなもので、a,e,i,o,u,k,s,tなど。ユーザーが実際に入力するデータはこれ。
SyllableはPhonemeを組み合わせたもので、それぞれのPhonemeが繋がって聞こえるように再生される。
そしてLyricsは一連のSyllableで、順番に再生される。

Candytronより例:
!kah_m !fao_r !miy_ //come for me
!tah_tsh !m3ay_ !skih_3n //touch my skin

!はノートオン、_はノートオフに連動していて、数字は音の長さの指定。
「!skih_3n」なら、まずノートオンで「スキー」と音が鳴り、そのまま鳴り続ける。
そしてノートオフで「ンー」が鳴って少しのびて止まる。
従って音程はシンセが制御して、Ronanはシンセに連動して歌詞に合わせて次々にフィルタをかけていくような仕掛け。

Ronanはv2に含まれるといってもronan.cppに全てまとまっているので使い回しは十分可能。
というわけでJavascriptに移植してWebで遊べるようにしときました。
Ronan Toy (Chrome専用)
-----
以上メモ。
途中でRonanを通す前と後の音を流してくれたのだけど、ただのホワイトノイズがウィスパーボイスの歌のように変換されるさまは鳥肌もの。
声質はどんな波形を鳴らすかで決まるようなので、使い道があったら面白そう。
こんなものが64kBの片隅に組み込まれているというのがにわかには信じがたい。

● 解読kkrunchy (q)
- 圧倒的圧縮率を誇るintro用ExecutablePacker "kkrunchy"のシクミについて語ります
4kや64kのデモといっても実行ファイルを圧縮したものなので、そのためのツールの解説。
4kにはCrinkler、64kにはkkrunchyというのが定番だそうだ。
まずDisFilterというもので圧縮が効きやすいようにデータを変換。
PAQ7というとにかく圧縮率を追求したアルゴリズムで圧縮、というものらしい。
PAQ7はRangeCoderという符号化を使うものだそうで、詳しい解説はスライドをどうぞ。
RangeCoderというのははじめて聞いたのだけれど、よくこんなこと考えつくものだなあと。
特許とかいろいろあるらしいですが。

以上です。
全体的にはとても充実していて楽しかった。
特にRonanとkkrunchyの話は、普段あまり自分にはなじみのない分野だったのでとても面白かった。
また、準備や休憩の時間にBGVとしてデモが流されていたのも雰囲気があって良かったと思う。
1月のTokyo Demo Festが楽しみですね!

お前も何かやれって?
できたらね...