なぜかまた急に無性に Key の「 Air 」を ubuntu で遊びたくなり、やってみた件の続き。
xkanon と wine の2つの方法のうち、 xkanon ( xair ) を使った場合は音が鳴らないので、 wine を使う方法を選んだと前回書いたが、 wine と _inmm で実行した場合、小さなプチプチ音のノイズが乗るので、やっぱり xkanon を使えないかやってみた。
xkanon に実装済みの oss, alsa では正常動作しないので、ソースを眺めながらあれこれいじってみたが、よく分からなかった。そこで、 alsa を使うのはあきらめて、 GStreamer というライブラリを使って音を鳴らすことにして、コードを書き始めた。
GStreamer 用のサンプルコードを試しながら使い方を学習し、 wav ファイルの鳴らし方を理解したので xkanon のソースにコードを組み込み、何度か試して完成させた。 BGM は wav ファイルから鳴らせばよいので CD-DA の実装は行わず、 wav ファイルのみを再生するクラスを作成した。 gst_pipeline_new() でパイプラインを作成し、 filesrc, wavparse, volume, audioconvert, autoaudiosink のエレメントを作成しリンクした。再生中に音量を変化させる方法だけは分からなかったので、 fade out の動作は未実装だ。
今回の作業では GStreamer のもつ柔軟性が感じられた。様々な形式の音源の音をならせられるし、ファイルを読み込んで再生するだけでなく、ネットごしにストリーミング再生もできる。また、音だけでなく動画なども再生する能力を持っている。