Audaciousのmodplugでzippedなファイルが読めない

最近の流れからあらゆる環境で音楽を鳴らしたくなったので、普段使っている CentOS 5 なマシンに xmms からの流れを組む Audacious というプレイヤー(Audacious 1.4.0 rc1)を入れてみた(CentOS 向けパッケージは無いようなので、ソースからコンパイル)。

MP3を含めた様々フォーマットを再生するにはいろいろ追加インストールなど必要だったが、それはまた別の機会に譲るとして、MOD系を再生する modplug プラグインが、仕様上対応しているっぽい zipped なファイル(.xmz/.s3z/.itzなど)を再生してくれなくて困ったので調査。

zippedなファイルが渡されたら unzip コマンドを呼んで解凍するロジックは組まれているのだが、なぜかそこまで到達せずに失敗している模様。展開するクラス(arch_Zip)を眺めていても特に問題は無いな…と思ってたら、このコンストラクタに渡されるファイル名がいわゆるファイルパスではなく URI 形式(file:///hoge/fuga.xmz みたいな)であることが判明。それをそのまま open しようとしているが、そんな形式はパスとして認識しないので open に失敗しまっている。

では他はどう処理しているのか、と zipped ではないファイルの場合に呼ばれる arch_Raw クラスを見てみたところ、aud_vfs_fopen というメソッドを利用しているようだ。

対処に迷ったが、arch_Zip は fopen ではなくて open なので、余計なことを考えない様 glib の g_filename_from_uri 関数を使ってファイル名を変換することにした。修正して、今のところちゃんと動いている。パッチはこちら

ひさしぶりに C++ やら glib やら触ったよ。最近 LL ばかり触っているので、いろんな意味で緊張する :) 最近の glib リファレンスとか見てみたが、基本は意外と変わってないようで安心した。gstfとかやってた頃だから、6,7年位前?私自身も進化しとらんな…。

Powered by ScribeFire.