EmiClock - 美少女コスプレ時計

EmiClock - 有名な時計プログラムです. ひょんなことから不具合やバグを見つけてしまったので,修正してみました.
# 別にあら探しをしていたわけではないのですが… 運がいいのか悪いのか
テストした OS/ディストリビューションは,Vine Linux 2.1 です.

ま,しかるべき方々にパッチは送ったのでそのうち反映されるのではないか,と思います.

追加: 高音質サウンド(22.050 kHz サンプリング)に対応させてみました.

ダウンロード

む,ソースの著作権表示を見ると,改造版の再配布はまずいようだ. 解釈によってはパッチの配布もまずいように読めるので,公開はは中止.

ま,でも,「改造方法の公開」は禁止されてないので,このページ自体は問題ないかな.

日本語リソース収納場所

JG のパッケージでは /usr/X11R6/lib/X11/ja_JP.ujis 下に日本語リソースを格納するようになっています.

ところが,Vine 2.1 からは,デフォルトの日本語 locale 名が ja_JP.eucJP となってしまいました. ja_JP.ujis と ja_JP.eucJP は同義のはずなのですが,うまくリソースを参照してくれません.

というわけで,他のプログラムに習って日本語リソースファイルを /usr/X11R6/lib/X11/ja の下に格納するように SPEC ファイルを変更してみました.

SoundBlaster の不具合回避

ことの起こり

ある日,ふと

        cat myu.au > /dev/audio
と,「みゅ」ファイルを再生してみました.

「あれ?」
EmiClock 起動時や,アラームの「みゅ」より音がいいのです.

原因

いろいろ突っついて調べたところ,/dev/audio を O_RDWR で open(2) して再生すると,「みゅ」の音質が悪くなることがわかりました. O_WRONLY で open して再生した場合は cat した場合と同じ音質です.

ただ,これ以上は追ってません. サウンドドライバのバグか,SoundBlaster のバグ(仕様)かは不明です.

ええと,念のために書いておくと,悪いのは,カーネルの SoundBlaster ドライバか,SoundBlaster のハードウェアそのものです. EmiClock プログラムには罪はありません.

対応

EmiClock の linux のサウンドドライバで /dev/audio を open しているところをすべて O_RDWR から O_WRONLY に書き換えました. ただそれだけ.

「文字盤」メニューのバグ

症状

EmiClock を一度起動して,「文字盤」を「数字(赤)」に設定し,終了させます. その後,再起動すると,文字盤自体はいいのですが,「文字盤」メニューでは「ピクチャ(青)」にチェックが入っています.

対応

「文字盤」メニューの初期化のところで,設定が「数字(赤)」になっているのに「ピクチャ(青)」にチェックを入れるようになってました. というわけで,ここを直してやりました. それだけ.

高音質サウンド対応

ふと気が向いて EmiClock を起動してみると,「みゅっ」が出ない. 「む」 /dev/audio にてきとーなファイルを cat してみると,

[imai@jr0bak imai]$ cat .bashrc >/dev/audio
bash: /dev/audio: デバイスが設定されていません
ときた.

/dev/dsp でサウンドを再生するよう改造するか,と思い立つ. ついでに高品質サウンドを再生するようにしてみる.

改造点

こいつも大した改造ではない. sys/Linux/audio.c で,デバイスファイルを open したあとで SNDCTL_DSP_RESET を発行しているところがあるが,ここにサンプリングレートと PCM フォーマットの設定を追加してやる.

    int speed = 22050, fmt = AFMT_S16_LE;
    ...
    ioctl(sdev, SNDCTL_DSP_SPEED, &speed );
    ioctl(sdev, SNDCTL_DSP_SETFMT, &fmt );
サウンドファイルから読み込んで再生するところと,キャッシュしているデータを再生しているところの2箇所あるので,両方とも同じように変更してやる.

あとは,高品質版の myu.au がインストールされるように Imakefile をいじってやります.


Linux のお部屋のもくじ
いまいくんのページのもくじ
2002 年 8 月 21 日更新
imai@jr0bak.homelinux.net