Risa (吉里吉里3コアのこと) のサウンド周りを実装しています。
OpenAL まわりで結構苦労した感じです。一年ぐらい前にはサウンド周りの骨組みはすでにできあがっていたのですが、OpenAL のバージョンもあがってるようなのでまずは OpenAL を新しい物に変える作業から始めました。
最初 本家 svn にある OpenAL-Sample (Sampleという名が付いてますがOpenALの参照実装のようです) を使おうとしました。ビルドは MinGW であっけなく終わりましたが、実際にこれで動かしてみると音が鳴らない。よく見るとデフォルトのデバイスが null デバイス (実際には何もしない擬似的なデバイス) になっていました。ソースコードを見ると Windows でコンパイルすると勝手にデフォルトのデバイスが null デバイスになる上に Windows の WaveOut デバイスがどう考えても開くことが出来なくなってる。仕方ないのでソースコードを弄って WaveOut デバイスを開けるようにしていざ再生させると OpenAL 内で SEGV して落ちました orz
なんで SEGV するのかを追ってる暇は無いと判断したので、OpenAL-Windows (Windows 用実装、標準では DirectSound をバックエンドに使うやつ。ベンダが提供する OpenAL ドライバがあればそれを使うことも出来る) をコンパイルして使うことにしました。これならば音が鳴ります。Windows 使うんだったら素直にこれをつかえってことでしょうかね。ちなみにコイツのコンパイルには VC++ が必要になるので (VS2005 expressでOK)、あらかじめコンパイルしたやつが吉里吉里のリポジトリの中には入っています。
OpenAL は少し不安。標準の DirectSound をバックエンドに使うやつを使っていますが、再生位置を読み出すと、まれに与えたバッファ長を超えた位置を再生してるかのような変な数値が帰ってきたりとか。バグっぽい臭いがします。これでまた別のベンダが提供してるドライバに変えたりすると別のバグに遭遇するんだろうなぁ orz (まぁそういうことがあるのがイヤなので、単一のソースから構築出来そうな OpenAL-Sample を最初使おうとしてたわけですが)。
いまはOggVorbis/RIFF Wave読み込み、再生や停止などの一般的な操作、再生停止時のイベント、フィルタ(いまのところPhaseVocoderとReverb)、SLI (Sound Loop Information) 読み込みとループ再生などが出来るようになってます。SLIファイル中のラベルに対するイベントの発生はタイミング制御の問題があるためかなりめんどくさい実装になりますが、それが終わって、あとしばらく調整を続ければ、サウンド再生は一段落付きそうです。そうなると次はグラフィック周りを始めるかなぁとも思いましたが、それに必要な RisaGL のこともあるし、次にやるならば Risse の強化かなと思っています。強化というのは組み込みライブラリの強化と、パフォーマンスの改善ですね。特に、まともなオプティマイザを実装するというかなり大きな作業が Risse には残っています orz
吉里吉里/KAG 掲示板がスパムまみれになっていました。
どうも掲示板のチェックアルファベット (表示された3文字を手動で入力させて自動書き込みボットを回避する物) が突破されていました。
だんだんと賢くなっていくスパムボットですが、今回は特別にあの掲示板の為のルーチンでも積んだんでしょうかね。
ここの日記も同様の手法でスパムをはじいているので、突破される日も近いかもしれません。
で、掲示板の方は reCAPTCHA を用いる事にしました。またこれでしばらくのあいだ、おそらく reCAPTCHA が突破されるまでの間は大丈夫でしょう。
参考 : 秋元@サイボウズラボ・プログラマー・ブログ - reCAPTCHA - キャプチャを利用した人力高性能OCR
reCAPTCHA に表示される英単語はやや難しいものが多く、読みづらい文字を推測するにしても、英語圏の人間でないとなかなか難しい物があるかもしれません。じゃあ日本語利用が主のあの掲示板にはふさわしくないといえばそうですが、最初に目にとまったのがこれだったのとやってることがおもしろそうだったので………
少々掲示板の書き込みが不便になりますがなにとぞご了承ください。