というわけで、再びアップデート。
新しいフォームを一枚作って、そっちにRSSを読み込んだ番組表を追加した。
が、最後の最後で追加したフォームから、呼び出し元のフォームのコントロールを操作する方法がわからずに結構な時間がかかってしまった。
他にもファイルの排他制御で苦しんだり、mutexが上手く張れなかったり。
しかし、苦労した分随分使いやすくなった気がする。見栄えも悪くないと自画自賛。
.NetFrameworkで複雑な事をする敷居は確かに下がったのだけれど、その分ヘルプを見る時間が増大した。
やりたい事をやるためのメソッド探しも一苦労だ。
ひとしきり出来た後も、日付フォーマットがおかしかったり、考慮漏れが出てきたりと結構な難産っぷり。
.NetFrameworkをしっかり把握しているわけでもないのでソースもあまり綺麗ではなかったりする。
その分コメントはきっちり書いたけど。
コレはもう、数作って覚えるしかないなぁ……
とりあえず安定動作してくれそうな感じなのでしばらくは様子見する事にする。
ツールのダウンロードはこちら
元になったクラスは古いクラスで実装も一応クラスではあるものの、
実装元のウィンドウのコールバックにメッセージ処理を依存していたのでえらく使い勝手が悪かった。
そこを、ここの記事を参考に作り直し、クラス側で見えないウィンドウを持たせて再生関連のメッセージはそっちで処理させるように変更した。
それはよかったのだけれど。
今回問題になったのはDivXのファイルを再生させようと思ったとき。
MCIを利用するときに設定するデバイス種別は以下のレジストリキーに拡張子毎に設定されている。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionMCI Extensions]
DivXの場合、”*.avi”なので、”avi”のキーを見るのだけれど、そこに書かれているのは”avivideo”。だが、MCIを利用する際の構造体のlpstrDeviceType メンバに、”avivideo” を指定すると、音声のみが再生されて画像が出力されないという事象が発生した。
その後、試行錯誤した結果 ”MPEGvideo” を指定すれば再生出来ることが判明。
ただ、これはその名のとおり、MPEG関係の動画用の指定文字列。
DivXの元はMPEG系だからこんな動作をしているんだと思う。
レジストリから拡張子を元にキーを引っ張ってきて、MCIで使おうと思ったのだけれど、
どうもすっきりとは行かせてくれなさそう……
試してないけれど、普通の無圧縮aviなんかだと”avivideo”にしないとエラーが出そうだし……
いつぞやのノベルゲー用のシステムを考えた続き。
ライセンスのゆるいzlibを使って、適当に圧縮かましてファイルをパックするプログラムは完成。
とりあえず、見た目から入る主義なので、素材は固めておきたい。
トライ&エラーを繰り返す開発にはかなり不便なのだけれど。
次、音楽及び効果音の再生を考える。
やはりここ最近の傾向としてはOggVorbisがメジャーだろう。
とは言っても、ゼロからデコーダを書こうって程酔狂ではない。
Xiph.org Foundation がBSDライセンスで出しているのを使うことにする。
出典を書いておけばよいので制限もさして気にならないし。
どうやら、いったんWaveをメモリに書き出してそれをWindowsのAPIに食わせる形になるようだ。
とりあえず、ここから、liboggとlibvorbisを持ってきてmakeする。
win32配下にVS2008でも使えるプロジェクトがあるのでmakeは難しくない。
最近、再びプログラムを書き始めている。
で、Doxygen。前に使った時はなかったGUIフロントエンドが付属してくるようになっていた。
しかもインストーラー付き。
心なしか、出力されるhtmlも精練されているように思う。
いつの間にこんなに進歩したんだろう。
つい最近のこと。
部屋掃除をしていると、8年前に作っていたゲームシステムの設計図が出てきた。
それはよいのだけれど。。。。。
当時の自分はUML使ってクラス図を描いていた。
そして、今の自分はその記号をさっぱり理解できていなかったこと。
薄々気がついてはいたけれど、目に見える形で現実を突きつけられるとちょっと凹む。
さて、自分は何をすべきなんだろうか?