2013/02/03(日)部屋にある本(2013年2月3日現在)
部屋にある本(2013年2月3日現在)
前回引っ越し時にも同様のリストを作っているので、増えた本リストなど調べられる(意味はない)
前回引っ越し時にも同様のリストを作っているので、増えた本リストなど調べられる(意味はない)
本日(じゃないけど)のアウトプット。
動画プレーヤーつくりました。
今更DirectShowのSampleGrabberを使えるようになってみたり。
再生するというよりは、ビットマップのポインタを得てぐりぐり加工する向けですな。
////// DirectShowのSampleGrabberGraph を使ってメディアファイルを再生するサンプル。 /// SampleGrabberを使うメリットは、ビデオもオーディオもデコード後のデータのポインタが得られることで、 /// Marshal.Copyなどでbyte[]にコピーするなり、unsafeコンテキストを使うなりで手軽に加工することができる。 /// ゲームアプリなどではDynamicTextureに転送することで簡単にムービーテクスチャを作ることもできる。 /// VMR9を使った方がパフォーマンスが出るが、Device LostがOSのバージョンごとに挙動が違ったりで対応しきれない。 /// カスタムレンダラを作るのが最良の方法なのだろうけれど、C#のみでカスタムレンダラを作るのは至難の業。 /// Enter:開く, Space:再生/一時停止, Escape:停止 ←/→:5秒シーク ///
例によってソースをNYSLで公開してます。
https://github.com/ttsuki/ttsuki-csmix/tree/master/WindowsUtil/DirectShow/
例によって、このコードをあなたのプログラムにコピペすると、
特にアセンブリを追加することなくEXE単体で動画再生ができます。
DirectShow.net とか使ってない。
C#の動画再生あれこれと言えば……。
たとえば、Managed DirectXには AudioVideoPlayback というクラスがあって、
実はManaged Direct3Dのテクスチャに転送する機能もついていることにはいるんですが、
強制的に、画面のFPSが動画のFPSに合わせられてしまったりするので、
(ただ再生するならそれでいいですが、ゲーム中のテクスチャとして使うには)非常に扱いが難しいです。
VMR9を使うと動画のフレームを描画したテクスチャを直接受け取ることができなくもないんですが、
これまた動画のレンダリング中(テクスチャを投入してから、次のフレーム時刻になって、テクスチャ描画されて戻ってくるまで)は、
描画スレッド側でDirect3DのAPIが呼べないため、60FPSを維持しながら動画再生するのはなかなか至難の業っぽく。
動画に1FPSの区間があったりすると、ゲームアプリ側も巻き込まれて1FPSになるんですよね、はい。
また、VMR9はDevice Lostしたとき、Pinを切ってDirect3DをResetしてPinをつなぐとWinXPでは動いていたんですが、
Win8にしたらそのコードではCOMExceptionが出るようなので、結局Graphをいったん破棄してとか。
当時はDirectShowに対する知識も浅かったので(未だに浅いですが)使い方間違ってたかもなぁ……。
という感じで一周してきて、結局頼れるのはSampleGrabberですね!
Media Foundation API とか使うとmp4とかも開けるようになるみたいで、そっちも使えてみたいなぁ。
APIのネーミングとかをさらっと見た感じでは、
DirectShowで言うグラフのようにトポロジを構成してデータを流すっぽいんですが。
今日のアウトプット。
C#でいろんな時計をつくってみる。
片田舎のちょっとした森で迷子の少女と出会う。
少女はなんか鋭利な王冠のようなものを被っていたのだが、
なんか尖っていて、この辺で着けてるのは危ないなと思ったので、
没収することにした。
帰る場所もなく帰る方法もなく、
正体を隠したまま僕と一緒に暮らすことになる少女。
どれくらい時が流れたかわからないが、
僕も、夕食の時に知らない男の話をされて不機嫌になるくらいに
少女のことを気に入り始めていた。むむーっ。
死んだ父の友人だといって寂しげに笑うので、
死んだ父に免じて許してやることにする。
村の暮らしにも慣れた頃に、帰らなければいけない理由ができる。
詳細は知らんけど、なんか帰らなければいけないらしい。
なんかこの子との生活もいいなぁと思っていたからちょっと残念。
いざ、旅立ちの朝、
本当はお前を殺しに来たのだと正体を明かして涙する少女。
きょうがくのじじつ!
実はラスボスであるところの魔王様(少女)が
勇者(僕)の寝首をかきに来ているのだが、
それを僕は知るよしもなかった。
魔王様は相手を魅了して自分の思いのままに操る能力を持っていて、
勇者のことを殺すチャンスはいくらもあったのに、
一緒に暮らすうちに逆に僕に惹かれ始めてしまったらしい。
魔力の大部分が僕が取り上げた王冠にあったことも教えてくれる。
いつか私を倒しにくることがあれば、と自分の住んでいる城に張り巡らされている罠の詳細を事細かに教えてくれる。
??? これは会いに来てと言ってるのか?
住んでいたところに帰るには、空高く上る必要があるというので、
見晴らしのよい緑の丘から、ちゅーいんぐばるーん を使う。
# 実は僕は駄菓子を使って戦う勇者だったのだ!
が、実際2メートルぐらい上がったところで急に彼女の姿は消えた。
見えなくなるまで高く上っていくことを想像していた僕は、
思わず「そんな高さでいいのかよ!」と声に出して突っ込んでしまう。
ばるーんだけが飛んでいく。 ※ ばるーんは非常に高価だ……!
そこで目が覚めた。 なんだこの初夢。
今日から仕事です……。
おおみそかだよどらえもん
2013.01.01 本記事の取り消し線部分は誤り。追記を参照してください
今日はPCにまつわる時計の話。時計と言うよりはタイマの話。
時間が正確に測れないパソコンがある。
というか、僕のメインマシンであるデスクトップがそう。
(2013.01.01 訂正)PCの時計の進みが遅くなるという現象に遭遇したので記録しておく
症状は VSyncな60fpsゲームでFPSを表示させると61.8fpsと出るというもの。
オーバークロックによってベースクロックを103%にしているが、60*1.03=61.8 である。
音ゲーしててもBGMとキー音がずれる。
時計の進み方が遅い。考えたこともなかったが、それは本当か?
実際、DateTime.Now の値を画面に表示して手元の腕時計と比較してみると、
なんと1分に2秒ずつ遅れていくことに、今回初めて気がついた。
進みが遅い時計もひどいが、今まで気づかなかった自分もなかなかひどいなぁ……。
# このままだと、システム時計が1日48分遅れる計算になるが、それはさすがに気づくはずだし、
# 今まで気がつかなかったのは、裏で時刻がよしなに同期されてるんだろうなぁ。
(2013.01.01 追記ここから)
PCのベースクロックを変更した後、Windowsを"再起動"していなかったのが原因。
と、書くとあほかと思われるので事情も弁明しておく。
上で挙げた時計の進みが現実時間に合わなくなる問題は、
シャットダウン → 電源ON → クロック変更 → そのまま起動 した場合に発症し、
再起動 → クロック変更 → そのまま起動 すると 発症しないようだ。
追検証として、発症後の再起動も試してみた。
シャットダウン → 電源ON → クロック変更 → そのまま起動 → 発症 → 再起動 → 解消
そう、もうおわかりですね!
Windows8では高速スタートアップ機能が新しく搭載された。
「再起動」コマンドを選ばない限りはずっと休止状態のような状態になるのだ。
シャットダウンだけでは、Windowsは変更されたベースクロックに気づかないようだ。
ちなみに、筆者は(再インストールがめんどくさくて)Windows 8のRPを未だに使い続けているので、
もしかするとRTMではこの問題は起こらないかもしれない、起こるかもしれない。
ちょうど期限も切れるので、入れ替えてみて追検証をしたいと思う。
また、「クロックを上げたのに時計が遅くなっている」というのは完全に勘違い。
今回の症状は103%に設定していたクロックを一時的に100%に戻したことが原因。
正しくは「クロックを103→100に落としたから、進みが100/103に遅くなった」だった。
FPSが61.8になる理にかなっている。訂正してお詫びする。
(2013.01.01 追記ここまで)
チップセットの仕様なのかマザーの仕様なのかわからないが、
さしあたっての問題は、音楽ゲームを遊ぶときBGMとキー音がじゃんじゃかずれていくことである。
ドラムが120bpmで演奏してるのにギターが126bpmで進んでいけば、それはもちろん聴くに堪えない。
さて、どこかに正確な時計はないものかー
(2013.01.02 追記)解決したのでここより下は完全に冗長な情報になってしまった
煽り気味のタイトルつけたった
世の中便利になった。それはもう超便利。
ことに情報端末に関しては「スマートフォン」とか言うものがここまで一般化するなんて、
僕が初めて「スマートフォン」と呼ばれるものを5年前に手にした頃には想像もしていなかった。
スマートフォンの世界には超たくさん、超便利なアプリがいっぱいある。
それらをほいほい入れることに何のためらいもない子たちが増えてきたと思う。
彼らは、ソフトを作った人を信じすぎてると思う。
そこに、信じるという行為を行わなくてはいけないことにすら無自覚無頓着なのではないかと思う。
大人でも少ないかも知れない。こういう教育、必要なのでは?
僕が恐がりなだけだろうか。
テスト中なのでGoogle Chromeのみで動作確認。
いずれもブログトップページで
続きを読む javascript:$('a.seemore').click(function(e) { e.preventDefault(); var more = $('<div></div>').load($(this).attr('href').replace(/\\//,'/ax/').replace(/#.*$/,"m?more")).hide(); var target = $(this).parent(); target.fadeOut("slow", function(){ target.replaceWith(more); more.slideDown(); }); });
これを実行すると、各記事の「続きを読む」リンクが変わる。
次のページ javascript:$('div.autopagerize_page_element').append($('<div></div>').load('/&/p1 div.autopagerize_page_element').fadeIn("slow"));
これを実行すると実行したとたんに、autopagerizeみたいに、p1がページ末尾に読み込まれる。