2009年10月31日

地デジ視聴成功しました

前回、視聴ソフトをハックして動かしたeMachinesのテレビチューナーPIX-DA021ですが、ついに地デジの視聴に成功しました。

以前、姉妹品のPIX-DA020がジャンク品で580円で売られていた時期があり、それを動作させたという先人の情報が参考になりました。

まず視聴ソフトですが、わざわざeMachines用のソフトをハックせずとも、ピクセラのサイトで配布しているStationTVが使えました。PIX-DA022等のダウンロードページに、アップデータという名目でファイルが置いてありますが、これが既存ソフトを更新するものではなく、新規にインストールするフルセットのソフトウェアでした。

ただし、現在配布されているStationTV Ver.8.4.3502は、ダビング10対応のファームウェアにしないと使えません。先にファームウェアを更新する必要があります。

ファームウェアの更新には、eMachinesまたはGateway用に配布されている、ダビング10アップデータを使用します。実際には他の機種用(地デジ専用モデル)ですが、PIX-DA021にもそのまま使用できます。

ファームウェアを更新するには、まずダビング10アップデータに入っているStationTVを先にインストールします。次にMenu.exeを実行するとファームウェアが更新されます。付属のStationTVをインストールせずに(ピクセラのサイトから落としてきた最新版を入れた状態で)Menu.exeを実行すると拒否されてしまいました。

ファームウェアの更新が完了したら、このStationTVは少し古いのでさっさとアンインストールします。

最後にピクセラのサイトにある最新版のStationTVをインストールして終了です。

PIX-DA021で地デジ視聴成功

これで実質的にPIX-DA022と同等になったので、しばらく使えそうです。あとはWindows7対応ドライバが出ればいいのですが。

Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年10月30日

PCにテレビチューナーを付けてみた

Windows7を購入した知人と7のメディアセンターは地デジに対応しているという話をしていたら、家にもPC用地デジチューナーがあることを思い出しました。

数年前に故障したノートPCの代替として緊急購入したeMachinesのデスクトップ機(展示処分品)に、デジタル/アナログ両対応のWチューナーが搭載されていました。当時はまだ我が家で地デジの視聴はできず、そのマシンの設置場所もテレビを見るような環境ではなかったので、せっかくのWチューナーも全く使用することなく眠っていました。

現在は我が家でも地デジが(一部チャンネルのみ)視聴可能で、加入しているケーブルテレビ局がアナログでは見れない局をデジタルで配信しているので、せっかくなので自分のPC(Vista)にeMachinesのチューナーを移植することにしました。

搭載されていたテレビチューナーは、ピクセラ社のPIX-DA021というモデルで、現在ピクセラから単体発売されているPIX-DA022の姉妹品のようです。

ドライバと視聴ソフトは、eMachinesのサイトからダウンロードすることができます。

さっそくPCにカードを装着し、ドライバと視聴ソフトをインストールし、視聴ソフトであるStationTV for eMachinesを起動してみると…

stationtv

どうやら、プリインストールの視聴ソフトは起動環境が制限されているようです。

当時はPC向けの地デジチューナーの単体販売が認められておらず、メーカー製PCへ最初から組み込んでの販売しか許可されていなかったので、予想はしていましたが。

この程度の起動プロテクトくらいプログラマを名乗るなら解除できて当然だよねーというわけで数年ぶりにOllyDbgを起動・・・何か変だと思ったら、これ.NETアプリケーションですねorz

.NETアプリケーションのハックなんてしたことないよーと泣きを入れつつも、Silverlightの経験でマネージコードは高度なリバースエンジニアリングツールがあることを知っていたので、さっそく.NET Reflectorにかけてみると・・・しっかりと難読化されてます。まぁ、当然だよね。

私にとっては専門外の.NETアプリケーションと難読化という障害はありましたが、このようにエラーメッセージをDialogやMessageBoxで表示するアプリケーションは、私に言わせれば「問題の場所を自分から教えている」状態なので、1時間程度でハック終了。無事に起動できました。

映像はオーバーレイなのでキャプチャできず

これで私のPCでも地デジが見れる…と期待したのもつかの間、アナログ放送は問題ないのだけれども、デジタル放送はチャンネルスキャンをすると視聴ソフトが何も言わずに落ちてしまいます。PC本体とセットで販売されていたソフトなので、元のPC以外での動作テストが不十分でしょうか。

今のところ、この問題の解決はできていません。せっかく地デジチューナーが付いているのに、アナログで見ています。

結局この視聴ソフトはVistaではあまりにも使いにく過ぎるので、視聴には主にメディアセンターを使用しています。

メディアセンターで使えるなら、OSをWindows7にすれば地デジチューナーが使えるかもしれない…と期待しましたが、姉妹品のPIX-DA022もWindows7では使えないようなので断念。

うちはどうせ区域外再送信の問題で、地デジにすると視聴できるチャンネルが減ってしまうから、2011年までアナログでいいけどね!(負け惜しみ)

普通の人はこんな悪あがきをせずに、素直にWindows7と対応チューナーの購入をお勧めします。

Posted by 新坂 | Comment(0) | TrackBack(1) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年10月20日

SilverlightとFlashの動画再生負荷を比べてみた

YouTubeでは、URLにfmt=18やfmt=22を追加すると、mp4フォーマットでH.264+AAC形式の動画を取得することができます。fmt=18はiPod用、fmt=22はHD画質となっています。

Silverlight3はこの形式に対応しているので、実はYouTubeの動画をSilverlightで再生することも可能です。

ただし、現在YouTubeはcrossdomain.xmlによって、外部サイトからのFlash/Silverlightのアクセスを拒否しているので、Silverlightから直接YouTubeのファイルは再生できません。いったん動画ファイルをダウンロードするか、crossdomain.xmlを無視してファイルを取ってくるプロキシ的な物を用意する必要があります。

そこで今回は、同じ動画をSilverlightとFlashで再生して、CPU負荷を比較してみました。

Silverlightでの再生にはExpression EncoderについてきたMediaPlayer.dllを、Flashでの再生にはYouTubeをそのまま使っています。動画の表示されるサイズが全く同じになるように調整し、再生中のCPU使用率を調べます。

今回テストに使用した動画は「Where the Hell is Matt? (2008)」です。Matt Hardingさんが世界中で様々な人種の人達と楽しそうにヘンテコなダンスをする動画です。

http://www.youtube.com/watch?v=zlfKdbWwruY&fmt=22 (HD画質)

http://www.youtube.com/watch?v=zlfKdbWwruY&fmt=18 (iPod用)

テスト環境はCPUがCore2Duo E8400、OSがVista SP2、ブラウザがIE8です。CPUのクロックは最高値で固定になるように設定してあります。

Silverlightで再生

Silverlightで動画再生

Flashで再生

Flashで動画再生

正確に集計をしたわけではなく、値の変動を見ながら私の感覚で平均を取った感じだと、Silverlightでは28%程度、Flashでは26%程度といったところでした。

僅かですがSilverlightの方がCPU負荷が高い印象でしたが、タスクマネージャのグラフからも分かるように、Flashでは1つのコアしか使われていないのに対して、Silverlightでは2つのコアが平均的に使われています。

実は最初に実験したときはCPUのクロックを可変にしたままやってしまい、SilverlightでのテストではCPUのクロックが低い状態で見かけ上の負荷がもう少し高くなってしまいました。

現時点ではSilverlightの方がマルチコアを上手く使っている感じです。

ただし、同じテストをAtom N270のネットブックでiPod用動画を使用して行ったところ、Flashでも2つのコア(HTですが)を使っていました。CPUによってコードを変えているのかもしれませんね。

ちなみにネットブックでのCPU使用率は、HD動画とは逆にSilverlightの方が少し低かったです。

もう少し有意な差があれば「動画共有サイトはSilverlight(またはFlash)で作るべき」みたいな結論も出たのですが、今回は微妙な結果となりました。

ところで先日、Flash Player 10.1でGPUを使用した動画再生支援にも対応することが発表されました。現在はAtomでYouTubeのHD動画を見ると紙芝居になってしまいますが、今後は改善されそうです。今までは嫌われていたUS15Wチップセットを搭載したネットブックが、強力な動画再生支援機能のおかげで945GSE搭載機よりも優位になるかもしれませんね。私のネットブックは945GSEなので、そうなったら悲しいですがw

タグ:Silverlight
Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年09月19日

自由度の高い全方位シューティングゲーム Hexcelle

Hexcelle』は、自由度の高い全方位シューティングゲームです。

hexcelle1

自機も敵機も六角形の細胞(以下Hex)の集まりで、その組み合わせで能力が変化します。障害物や敵機を倒すことで出てくるパワーアップアイテムを集めて、Hexを増やして成長していきます。

操作方法はWASDで移動、マウスで弾を撃つ方向を狙って左クリックで弾を撃ちます。青いHexがあるときはスペースで機雷を設置します。パワーアップアイテムを集めて1.0以上溜めたら、[E]を押すとEvolve(進化)できます。

EvolveではSpawnの数だけ新規Hexを増やすことができ、Mutationの数だけ既存Hexの色を変えることができます。新規Hexは隣接するHexと同じ色に変更できますが、新規Hexに対してMutationは使用できません。しかし、隣接するHexにMutationを使用すれば、新規Hexも自由に色を変えられるようになります。

続きを読む
タグ:ゲーム紹介
Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年09月17日

おすすめPC用小型スピーカー

PCのパーツの中で、交換して一番変化を感じるのは何かというと、私はスピーカーではないかと思います。

スピーカーはいまだにアナログ的なデバイスで、製品ごとの差も非常に大きいです。特に低価格スピーカーの品質は酷く、2000円以下で売られているスピーカーや、多くのPCの付属スピーカーなどは、かなり酷い状態です。

大雑把な目安として、スピーカーを持ち上げてみて軽かったら音質には期待できないと思っていいでしょう。2.1chでサブウーファーがついているなら別ですが、2chのスピーカーでまともな製品は間違いなく重いです。小型のタイプでも片方のスピーカーだけで1kg近い重量があります。

PC用のスピーカーはできれば10cm以上の径のものが理想的ですが、PC周りにあまり大きなスピーカーを置きたくないという人も多いと思います。今回は小型で評判の良いスピーカーを紹介します。

続きを読む
Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年09月04日

東方星蓮船不具合修正ツール

ここ数日、一部の環境で東方星蓮船の1面の船の影が白くなるという話題がホットなようなので、私もネットブックにインストールしてみたら確かに白くなりました。

ぱっと見た感じでは、巨大ポリゴンに頂点フォグをかけているのが原因のように見えたので、試しにピクセルフォグに切り替えてみたら直りました。

1面でしか確認していませんが、特に副作用もなさそうなので不具合修正ツールとして公開しておきます。

th12fix-090904.zip Version 1.0 (2009/09/04公開)

使い方は縦画面化ツール等と同じで、同梱のd3d9.dllを東方星蓮船のインストールフォルダにコピーするだけです。縦画面化ツール等と共存はできません。

2009年08月21日

高精度CM検出アルゴリズムを思いついた

私が使用しているHDDレコーダーのRD-H1EXにはCMを検出して自動的にチャプター区切りを設定する機能があります。再生中に次のチャプターまでジャンプする機能と組み合わせることで、半自動でCMをスキップすることができます。

無印のRD-H1では、CMは必ずステレオ放送であることを利用してモノラル/ステレオの切り替えでCMを検出していました。この方法は精度が高い半面、ステレオ放送の番組では使用できないという欠点があります。

アナログ放送の頃はほとんどの番組がモノラルで、音楽番組などの一部の番組だけがステレオ放送だったので、この方法でほとんどの番組が対応できました。しかし、テレビ局が番組を地デジ対応にする際にほとんどの番組がステレオ放送化してしまい、いまだにモノラル放送をしているのはタモリ倶楽部のような一部の番組だけとなってしまいました。

このような状況を受けてか、RD-H1に有償のアップグレードを適用したRD-H1EXでは異なるアルゴリズムが採用され、ステレオ放送でもCMを検出することが可能になりました。RD-H1EXがどのような方法でCMを検出しているのかは分かりませんが、確かにステレオ放送でもCM検出ができています。しかし、番組によっては全く検出されていなかったり、一部のCMの検出に失敗していたりと、完璧とは程遠い状態です。

CM検出の別の方法として、音声が無音状態で映像がシーンチェンジするタイミングを検出するという方法があります。音声が流れている最中に突然切り替えてしまうとブチッというノイズが発生してしまうので、テレビの映像は必ず切り替わる直前と直後は無音になっています。無音状態で映像が切り替わったら、そこをCM切り替えの候補とします。また、1本のCMは30秒等と時間が正確に決まっているので、候補の中からピッタリ30秒の部分を探し出せばCMを見つけることができます。

実際にこの方法でかなりの精度で検出できるようです。しかし、番組中に演出で無声部分が続いた場合の誤検出が怖いです。検出失敗でCMが残ってしまうのは後から修正が効きますが、誤検出で本編がカットされるのは非常に困ります。そこで、もっと良い方法が無いかと考えていました。

続きを読む
Posted by 新坂 | Comment(1) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年08月14日

B-Splineフィルタが軽い理由

真・東方縦画面化ツールに搭載したフィルタの中で、(3次の)B-Splineフィルタがもっとも軽くなっています。

しかし、実際に3次のB-Splineとバイキュービックを書いたことがある人なら分かると思いますが、この2つは各項にかかる係数が違うだけで、それ以外は全く同じ式です。では、なぜB-Splineフィルタが軽いのか…というのが今回の話。

各フィルタの補間関数をグラフ化すると次のようになります。

plot

Bi-Cubic1はシャープネス0、Bi-Cubic2はシャープネス1に設定したときのバイキュービックフィルタです。(シャープネスの値は一般的なものではなく、私が実用的と判断した範囲に設定した値です)

この補間関数は、フィルタのインパルス応答に相当し、入力信号が出力にどのように影響するかを表しています。例えばバイキュービックフィルタでは、入力画素値と同じ位置では1.0(元の値と全く同じ)で、そこから離れるにしたがって影響力が減っていき、ちょうど1画素分離れた位置では影響が0になります。更にそこから2画素分離れた位置まではマイナスの影響をします。

※ここでの説明は全て1次元ですが、今回使用しているフィルタは全て「分離型フィルタ」というもので、2次元のフィルタをX方向とY方向の1次元フィルタに分けることができます。このようなフィルタでは、X方向に1次元フィルタをかけた後に、Y方向に1次元フィルタをかけることで、2次元のフィルタと同じ結果を得ることができます。

ただし、この概念は入力信号中心の考え方ですが、実際のプログラムでは出力信号中心の考え方が必要になります。そのためには、「畳み込み」という計算を行います。

畳み込みは、フィルタ関数の定義域の全ての値を取得し、フィルタ関数を掛けて足し合わせるという処理になります。今回のフィルタは全て定義域が-2〜2で幅が4なので、入力画像から4つのピクセルをサンプリングすることになります。連続する4点をサンプリングし、補間関数のちょうど1ずつ離れた位置の値を掛けて足し合わせます。

さて、この4つの曲線のうち、B-Splineだけがマイナスの領域がないことが分かると思います。B-Splineの軽さの秘密は、ここにあります。

GPUには基本機能としてバイリニアフィルタが搭載されています。バイリニアフィルタはX方向とY方向にそれぞれ2点ずつ合計4つのピクセルを、距離に応じた比例配分で混合します。比例配分は、p1*a+p2*(1.0-a) のような計算で、必ず係数の合計が1.0になります。この処理はよく使うので、テクスチャユニットに組み込まれていて、非常に少ないコストで利用することができます。(ちなみにバイリニアフィルタも分離型フィルタ)

畳み込み処理で2つのピクセルに注目したとき、例えばそれぞれに掛ける係数が0.1と0.4だったとすると、次のように変形できます。

p1*0.1+p2*0.4

= (p1*0.2+p2*0.8)*0.5

= (p1*0.2+p2*(1.0-0.2))*0.5

= (p1*a+p2*(1.0-a))*0.5 [a=0.2]

これはバイリニアフィルタでサンプリングした結果に、係数の合計値を掛ければ畳み込み処理の2点分を処理できることを表します。

現在のGPUは、計算は速いがテクスチャの読み込みは遅いという性質があります。そのため、多少計算が複雑になっても、テクスチャ読み込み回数を減らした方が速くなります。B-Splineフィルタはこのテクニックを使って、16点フィルタを4回のテクスチャフェッチで処理しています。

ただし、バイリニアフィルタの係数は0.0〜1.0に限定されるので、負の係数が混ざっているとこの方法は使えません。

3次のB-SplineフィルタのX/Yフィルタの符号を表にすると次のようになります。

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

+ / +

全ての領域で符号が同じなので、この手法が使えることが分かると思います。

一方、バイキュービックフィルタやLanczos2は次のようになります。

- / -

+ / -

+ / -

- / -

- / +

+ / +

+ / +

- / +

- / +

+ / +

+ / +

- / +

- / -

+ / -

+ / -

- / -

正負の符号が混ざっているために、この手法が使えません。

2点に掛ける係数がどちらも負の値の場合は、係数の符号を反転してバイリニアフィルタで読み込み、その結果を再び反転することで同じ結果が得られます。四隅を省略して12点補間とした簡易版バイキュービックフィルタではこの方法を使い、符号が揃っている中央の4点、上下左右の2点ずつをそれぞれバイリニアフィルタで読み込み、計5回のテクスチャフェッチで処理しています。

簡易版バイキュービックフィルタがこの方法で軽量化に成功してしまったために、軽いフィルタが作れると思って実装したB-Splineとの差がほとんど無くなってしまいました。

ちなみに、修正版バイキュービックフィルタではこのような最適化は行っておらず、16回テクスチャを読み込んでいます。

ところで、上のグラフでBi-Cubic1とLanzos2がほとんど同じ曲線ですよね。もう少しパラメータを変えるともっと近くなります。出力画像を見てこの2つのフィルタの違いがよく分からないと思っていたのですが、グラフを描いてみて納得しました。

Lanzosを使うなら2ではなく3以上を使わないと意味がなさそうです。Lanczos3になると36点補間となり、一気に倍以上の処理量になるので、私のツールで採用する気はありません。(費用対効果が悪過ぎる)

Posted by 新坂 | Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする
2009年08月09日

半固定ドライブ用に超小型USBメモリがお勧め

最近まで母が使っているPCのデータのバックアップにはMOを使用していたのですが、最近MOドライブの調子が悪いのと各メーカーがMOの生産中止を発表したのを受けて、バックアップメディアをUSBメモリに変えました。

バックアップ用のUSBメモリは常に接続したまま半固定ドライブとして使うので、通常のスティック型では物をぶつけて破損する心配がありました。そこで、超小型のUSBメモリ(4GB)を導入してみました。

USBコネクタには逆挿し防止機構がありますが、超小型USBメモリではその部分にメモリチップが搭載されています。このような構造のため、USBメモリの大きさがほぼUSBコネクタのサイズに収まっています。

シングルチップのMLCメモリなので速度は期待できませんが、思っていたよりは速かったです。MOと比べたら遥かに速いので全く不満はありません。

この小ささと思っていた以上の速度で気に行ってしまったので、自分用にも1つ購入しました。

私が使用している無線LANルータにはNAS機能があるので、そのためにルータに8GBのUSBメモリを接続しています。今まではスティック型を使用していましたが、USBメモリの出っ張りが気になっていたので、超小型USBメモリ(8GB)と交換しました。

ルータのUSBコネクタが浅いのでPCに接続したときよりは出っ張ってしまいましたが、全然気にならない程度に収まりました。まだ接続しただけで一度も使用していませんが、どうせルータのNAS機能が遅いので速度的な不満はないでしょう。

今回のUSBメモリの交換でPCの性能が向上したわけではありませんが、PC周りがスッキリしたのは気持ちがいいです。できればReadyBoost用に接続しているUSBメモリも小型のものにしたいのですが、こちらは速くないと意味が無いのでちょっと無理でしょうね。(ReadyBoostに使用しているのは今回購入した超小型メモリよりも4倍速い製品)

Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする
2009年08月02日

プログラミングパズルゲーム The Codex of Alchemical Engineering

今回紹介するのは、錬金術とプログラミングでパズルを解くゲーム『The Codex of Alchemical Engineering』です。

The Codex of Alchemical Engineering

The Codex of Alchemical Engineering - Magnum Opus Challenge (高難度ステージ集)

codex

ロボットアームの動作をプログラミングして、供給装置から出てくる物質を組み合わせて、上の大きな円の中にあるものと同じ物を5つ作ればクリアになります。

物質は三原質(硫黄・水銀・塩)、四大元素(火・水・風・土)、七金属(銅・鉄・錫・鉛・水銀・銀・金)の3つのグループに分かれます。これらをロボットアームで運びながら、別の物質に変換したり2つの物質を結合したりして目的のものを作り、上の円の中に置けば完成です。(向きも合っていないと駄目)

遊び方は、左上の[COMPONENTS]、[MORE COMPONENTS]で装置を選び、グリッド上にドラッグ&ドロップで配置していきます。[COMPONENTS]は上から、ロボットアーム、2つの物質を結合、三原質を順番に変換。[MORE COMPONENTS]は上から、四大元素を塩に変換、四大元素+塩で塩を四大元素に変換、金属+水銀で金属を変換。

次にプログラミングしたいアームをクリックで選択してから、左上の[PROGRAMMING]をクリックしてプログラムを組んでいきます。プログラミングは、左端のアイコンをその横のアームの絵の上にドラッグ&ドロップして並べていきます。

各アイコンの意味は、アームを右回転、アームを左回転、アームを伸ばす、アームを縮める、掴んでいる物を右回転、掴んでいる物を左回転、アームを開く(離す)、アームを閉じる(掴む)、1サイクル休む、ループ開始位置の変更です。

運搬中に物質同士が衝突するとアウトになります。アーム同士が重なるのは構いません。また、ゴールの円の中に完成品以外の物質が同時に乗っていると駄目なようです。(完全な完成品が複数でも駄目)

言葉だけでは分かりにくいと思うので、13面のちょっと複雑な解法を動画にしてみました。

こんな風に大き目の物質をフィールド全体を使って組み立てる場合は、ぶつけないように動かすのが大変です。物質を取りだすペースを落としたり、下の発生装置しか使わないようにした方が簡単にクリアできたりします。

このゲームの面白いところは、各ステージのクリアの仕方が無数にあり、人によって解法が違うところです。さっとクリアした自分の解法よりも、苦労したという人の解法の方が美しい動きだったりして面白いです。また、単にクリアするだけでなく、最短ステップや最少パーツでのクリアを目指したり、逆に最長ステップを狙うのも面白いです。

タグ:ゲーム紹介
Posted by 新坂 | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする