Xkanon(1)
Xkanon を動かしてみます。
Xkanon のソースがあるので、コンパイルして動かしてみます。
オリジナルの Xkanon(xkanon-071209.tar.gz) はconfigure ができませんが、xkanon-gtk(xkanon-gtk2-090830.tar.gz) は configure ができました。
オリジナルの ayusys.ja.po を xkanon-gtk のディレクトリへ ayusys_gtk2.ja.po という名前で UTF-8 にコード変換してコピーしておきます。Xkanon-gtk のディレクトリでコンパイルします。
$ ./configure
$ make -j4
$ sudo make install
コンパイルは通ったので、ゲームデータを吸出し、CDDA を mp3 に変換します。また、このプログラムは mp3 の再生に mpg123 を使うようなので、以下のようにパッケージをインストールしました。
$ sudo apt-get install -y cdparanoia lame mpg123
ゲーム CD をセットし、データを吸い出します。
$ sudo xkannon_install <CD をマウントしたパス>
吸い出したディレクトリに移動して、音楽を mp3 で保存します。
$ cd /usr/local/share/xayusys_gtk2/xkanon
$ sudo -s
# mkdir bgm
# cd bgm
# cdparanoia -v -B
# for file in *.wav; do lame –preset insane ${file}; done
# rm -f track*.cdda.wav
# for file in *.mp3; do n=${file%.cdda.mp3}; n=${n##*k}; mv ${file} audio_${n}.mp3; done
# exit
実行してみます。
$ xkanon –cddev none
一瞬だけ window が作成されましたが終了。
$ sudo xkanon –cddev none
起動しました。が、しかし、音が出ない!テキストが表示されない!
さらに、そうでした。もともとの Kanon は音声なしでした!
oss を使っているようなので、alsa-oss を入れて動かしてみます。
$ sudo apt-get install -y alsa-oss
$ sudo aoss xkanon –cddev none
audio のエラーはなくなりましたが、mixer がエラーになり、やはり音は出ません。
root 権限でしか動かないのは、それはそうです、/usr/local/share/xayusys_gtk2/xkanon というディレクトリに書き込みの権限がないからです。xkanon ごとデータを自分のフォルダにコピーし、起動スクリプト xkanon のパスを修正しました。これで sudo をつける必要がなくなりました。
テキストに関しては、ゲーム内のデータは shift-jis で、このプログラムは euc を使っているあたりが原因だと思います。
よく見てみたらそうでもないようです。
いろいろ試してやっと原因を見つけました。
ゲームのテキストは、shift-jis ですが、内部で euc にコード変換しています。euc テキストにした後で、禁則処理等を行っています。
その後で、gtk で文字の描画を行いますが、それには UTF-8 へのコード変換が必要になります。
ところが、UTF-8 へ変換する際に、1 バイトしか渡していません。セリフの表示は 1 文字単位ですが、日本語 euc の場合 2 バイト渡す必要があります。
ということで、1 バイト目の文字の最上位ビットが立っていたら、日本語とみなし、もう 1 バイト渡すようにプログラムを修正しました。
これでテキストが表示されました。
あとは音の問題ですが、難しそうです。
xsystem35 のオリジナルのソースをコンパイルしてみました。それを OSS モードで動かしてみたら aoss で普通に音がなりました。
ということは、Xkanon でも OSS で音が鳴らせる筈です。もともと、Xkanon は xsystem35 の音部分を流用しています。
Xkanon の OSS 部分と xsystem35 の OSS の部分を比べて、音がなるかどうか調べていくことにします。
更に調べていくと、aoss を使って、効果音がなることがわかりました。つまり、wav ファイルは音がなるということです。CD の音は、mp3 に変換したので、処理が別になります。
CD を wav にしたら BGM もなりました。
どうやら mpg123 が裏ではストップしてしまうようです。古い mpg123 のソースを落としてきましたが、見つかったのは mpg123-0.59r-gpl.tar.gz (mpg123-0.59r.tar.gz はコンパイルできない) でした。
README には 0.59f で確認したとあります。
この mpg123 で試しましたが、フォーマットエラー (Cannot find RIFF file) で動きません。ソースを見ると、ファイルの先頭にシークしています。
昔の mpg123 はシークできたのでしょうか?
まあ、ファイルとパイプを同じコードで処理しているからそのせいもあるでしょう。
パイプからの読み込みをシークするとは。ちゃんと動いていたのでしょうか?
本当にシークが必要かどうか確認する必要があります。
更に調べていくと、シーク動作は再生終了時に、再度再生させるためにあるようです。
mp3 の場合、ループは望めません。
再生できないのは、ファイルサイズが取得できないためのようです。当然、mp3 から wave へ変換する時は、変換が終わるまでサイズは決まりません。
そこでサイズが決まらなければ、暫定的に 1G にするように修正したところ、mp3 で BGM が再生されました。EOF のチェックは入っているので大丈夫でしょう。
mp3 ではループできませんが、我慢します。
また、古い mpg123 を使ったためか時々再生が途切れます。代わりに lame を使うように修正しました。
なお、configer のオプションで指定できるようですが、指定しても mpg123 があると問答無用で mpg123 にされてしまいます。config.h を直接書き換えて対処しました。
lame でデコードしたところ、音の途切れはなくなりました。
効果音を mp3 にしても問題ないようです。
Air のメディアも探して動かしてみました。当然、声無しだけど。オープニングが流れるまでやってみましたが、問題なさそうです。
音に関しては、alsa でも音は出るようです。pcm device に default を指定すると、現在選択しているデバイスから音が出ました。ただし、ブツブツ音が入ります。
aoss を使ったほうがスムーズに再生してくれます。
カーネルモジュール無しで動くとは。
aoss すごいです。
ディスカッション
コメント一覧
まだ、コメントがありません