カレンダー

03 | 2007/04 | 05
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -

カテゴリー

プロフィール

drednote(Mr.Ty)

Author:drednote(Mr.Ty)
既にいい年しているにも関わらずエロゲをプレイしているヤバイおっさんです。きっと還暦になってもプレイしてそうな気がする。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

この人とブロともになる

主にエロゲのプレイ日記。他レビューっぽい事とか色々
エロゲプレイ記
  当サイト内記事にはゲームのネタバレが含まれる場合があります。
  ネタバレをみたくない方は、当サイトの閲覧をご遠慮願いますようお願い致します。
  また、当サイトの記事自体は全年齢対象ですが、
  扱っている評価物は基本的に18歳未満プレイ禁止の物が殆どですのでご注意願います。
[------]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--------(--) --:-- スポンサー広告 | 編集 |
[20070426]
なんか最近エロゲプレイ記じゃなくなってきてるがまぁいいだろう。
DirectSoundのストリーミング再生で、ソースにOggVorbisファイルを使おうと思って色々やってみたんだけど何故かov_openでFILEポインタを渡す方法だとどうやっても上手く行かない。どこかのページだとlibvorbisfileの構築時にマルチスレッドで作ると良くないというような事が書いてあったけど、VisualStudio2005だとシングルスレッドのオプションが無いんだよなw。仕方が無いのでVisualStudio.NET 2003を入れてやってみたけどやっぱりなんか変だ。という事で、一番面倒くさい方法ov_open_callbackでやってみました。まぁ関数4つ実装すれば良いだけなんで実際にはそこまで面倒でも無いし、classのstaticメンバで実装すればclassのprivateメンバ変数にもアクセス出来るんでOggVorbis複数同時再生も問題無い。実際には、ov_open_callbackにclassのthisを渡してやれば、callback関数の引数でdatasourceってなってる奴が丁度thisになってるんでそれで自前classにキャストして使えば良い。だけど、なんかov_pcm_totalが失敗するんだよな~。仕方が無いので終了検知だけov_readの戻り値でチェックして、現在どの辺を再生中かのチェック機能はあきらめてるけどなんでov_pcm_total失敗するんだろう……ov_test_callbackの実装が必要だったりするのだろうか?

と思っていたら解決。簡単な事だったんだが、というか当たり前の事だったんだが、ov_open_callbackが呼ばれる時には既にファイル自体は開いておく必要があったんだな。私はcallbackで呼ばれるread_func内でファイルオープンもやってしまっていたんだけど、実はov_open_callbackで一番最初に呼ばれるのはseek_funcだったりするんで、seek_funcが呼ばれた時にはまだファイルが開かれていないんで当然seek_funcは失敗。そうするとov_open_callbackは渡されたビットストリームはシーク不可能な物と判定してov_pcm_totalが失敗するという仕組みだったようだ。ov_open_callbackに渡す前にファイルを開いておく事で無事解決したw。
更にFILEポインタを使った場合に上手く行かないという件についてもなんとなく分かってきた。まぁ要するにov_openを呼ぶとlibvorbisfileの中でov_open_callbackが呼ばれるんだけどこの時datasourceにFILEポインタ、各コールバック関数にfreadだとかftellだとか、その辺の所謂標準Cライブラリが呼ばれる(fseekだけはogg_int64_tという64Bit変数を引数に持つ関係上ラッパ関数を呼んでいるが、結局その先で呼ばれるのはfseekである)。だからこの標準Cライブラリのバージョンが一致しないとFILEポインタを跨いで使うことが出来ないんだけど、実はlibvorbisとかliboggについてくる新しいVisualStudioのプロジェクトファイルも精々VisualStudio.NET2003の物で、VisualStudio2005はどうも考慮に入ってないらしい。私は.NET2003のプロジェクトを見た時点で.NET2003でライブラリを構築してしまったので普段使っているVisualStudio2005からだと上手く行かなかったんじゃないかと推測するのだがどうだろうか。試すのは正直面倒臭いw。というか、VisualStudioのバージョンが変わっただけで使えなくなるような方法は結局使い物にならないので、やはりov_open_callbackで使い続けるのが正しい道のような気がして仕方が無い。どうせov_openも中でov_open_callback呼んでいるのだからやってる事は一緒だ。
スポンサーサイト
[20070413]
実は半年くらい前からずっと悩んでいた事があったのだが、今日それが不意に解決した。
事はこうだ。とあるWeb連携系アプリを作成していた時、アプリの機能としてブラウザに表示されているリンクのドロップを受け取る機能が欲しくなった。例えばblog等では普通、RSSフィードを配信するURLがついていたりするものだが、これをRSSリーダーに登録する時に一々URLを手で打つ人はいないだろう。普通は、FC2なら最新記事のRSSとか書いてあるリンクをドラッグし、RSSリーダーのURL入力欄にドロップする筈だ。私もそれをやりたくて、リンクのドラッグを受け取る方法をずっと模索していた。IDropTargetインターフェイスを実装し、そのインターフェイスを持つクラスとHWNDをRegisterDragDropで登録すれば良いというのはインターネット上での情報ですぐにわかったのだが、何故かIEからのリンクのドロップだけはずっと受け取る事が出来なかった。FireFoxやOperaからのリンク、或いはIEからでも左上のアドレスバーからのドラッグであれば普通にDropが呼ばれていたのだが、何故かIEのコンテンツ中に含まれているリンクだけはDragEnterは呼ばれてもDropが呼ばれなかったのだ。
半年近くもそれで悩んだのだが、今日不意に解決した。実はとある掲示板にその事について投稿したのだが、自分で記事を投稿している内に、じゃあこうしたらどうなのだろうという考えが浮かび色々と実験した結果自己解決したというわけだ。私はずっと、DragEnterで渡される4番目の引数、DragOverだと3番目の引数でDROPEFFECT_COPYを設定していた。これは、ドラッグされているオブジェクトをコピーしたい、という意思表示でありサーバー側がそれを許諾すれば、ウィンドウ上でマウスが離された時にDropがやってくる仕組みである。ドラッグされているのはURLという、精々長くても4000文字程度の文字列なのだから普通にコピーで良いと思っていたのだが、IEにとってはどうやらそういうわけでは無かったらしい。結論から言うと、DROPEFFECT_COPYでは駄目で、DROPEFFECT_LINKでなければならない。これは、ドラッグされているオブジェクトへの参照が欲しい、という意思表示である。参照なので、オブジェクトそのものではないのだがIEにとってリンクのドラッグという行為はどうも飛び先ページそのもののドラッグという意味だったのではないだろうか?私は、ドラッグされているのはURLだという考えからコピーさせてくれと頼んでいたわけだが、IEからしてみればページそのものの情報は持っていない為にコピーさせたくても出来ない、だからDROPEFFECT_COPYでは駄目だったのではないだろうかと推測するのだがどうだろうか?
ともあれ、ようやく私はIEからのリンクのドラッグを受け取ることをアプリに組み込めるようになった。これでやっと前に進めるというものだ……
[20070405]
仕事が忙しいってのもあるけど、それよりやってるエロゲが正直イマイチ面白くないんで、エロゲプレイより他の事やってる方が楽しいとか思ってしまうのが原因だなw。
現在C++/CLIのお勉強及びDirectX9 DirectGraphicsのおさらい中。まぁ仕事は携帯Javaアプリの製作が多いから役に立つ場面にも疑問符が付くんだけど、この辺は趣味だしね。プログラムの趣味が高じて仕事になったケースだけど、仕事のプログラムと趣味のプログラムはやっぱ違うな、と思う。
そんな事より、もう今のエロゲやめて別の奴やろうかとも思うんだけど後一人クリアで完クリだと思うと中々w

2007-04-05(Thu) 03:32 雑記 | トラックバック(0) | コメント(0) | 編集 |
HOME
copyright © 2005 drednote(Mr.Ty) all rights reserved.

Template By innerlife02

RSS1.0 ,
RSSフィード

応援バナー

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。