BMSプレイヤ

1月の終わりあたりからLinux使っているのでかれこれLinux歴も半年になりますが、完全にLinuxに移行して発生する一番の問題は
ゲ ー ム が で き な い
に尽きます。いや、xgamesあるじゃんっていうのは一理有るけどさ。やっぱりゲーム市場はフリー、市販問わずWindowsに超絶傾倒してるわけですね。
おかげでもうBMSも東方もアレなゲームもできなくてつまらないのです。とはいいつつ最近はニコニコでVIPマリオの動画見てましたが。
しかし、ここで気づいた。
ゲ ー ム が 無 い な ら 自 分 で 作 れ ば い い じ ゃ な い !
まさにUNIX系の基本じゃないですか!自給自足の生活。


つーことでBMSプレイヤ作り始めました。ここまでが前置き。
Linuxなのでまあお手軽にSDL+SDL_mixerです。で、今日は部室でBMSをパースして再生する部分を書いてたんですが、なんかうまくいかない。どうやらファイルは完全に読み込んで正常にパースできてるのに、音がかなり抜け落ちてる。
4時間くらい悩んだ挙げ句に、BMda!(http://www.geocities.co.jp/Berkeley/2093/bm.html)はどうしてちゃんと再生できてるんだろーとか思いながらソースを眺めてて気がつきました。

/*************SDL_mixer.h(69)***************/
/* The default mixer has 8 simultaneous mixing channels */
#ifndef MIX_CHANNELS
#define MIX_CHANNELS    8
#endif

これは落としてきたSDL_mixerのデフォルトで、BMda!ではSDL_mixerをソースごと同梱して、#define MIX_CHANNELS 48にしてました。
まあそれでこの8を増やしてSDL_mixerをビルドしなおしたらうまくいきましたとさ。
要するに同時発音数の最大値が低すぎたんですね。なんて罠だ。
ライブラリ回りはエラー入りやすいので注意しましょうという話でした。