読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

C++

Native Addon を作る - NODE_MODULEマクロやDLOpen関数など

昨日のエラーの原因はまだつかめていない。しかし追求している途中でNODE_MODULEマクロが何をしているのかを知ることができた。 NODE_MODULEマクロは_module変数を定義し、_module変数を引数にDLLロード時にnode_module_register関数を呼び出す関数を定義す…

io.jsでネイティブ・アドオンが動かない原因を調べる - エラーが何を示しているのかを調べる。

このエラーについて調べてみた。 H:\pj\gyptest>node.exe np.js module.js:335 Module._extensions[extension](this, filename); ^ Error: Module did not self-register. at Error (native) at Module.load (module.js:335:32) at Function.Module._load (m…

音声ファイルから動画ファイルを生成する(67) – フレーム描画

ちょっと花粉症がきついせいもあって体調が悪く、家に帰るとぐったりしてすぐ寝てしまうのでプログラムする時間がほとんどない。薬が効いているので鼻水や目がかゆいということはほとんどないのだが、なぜかこの時期頭痛やふらつきが多く、風邪のような熱が…

音声ファイルから動画ファイルを生成する(66) – 非同期エージェントによる描画

描画を別スレッドにする スワップチェインは周期的に全画面を書き換えるようなアプリ、つまりゲームには向いているが、元の画像から部分的に書き換えるようなというか、部分的な書き換えがランダムな間隔で発生するようなUI描画には向いていない。やはり描画…

音声ファイルから動画ファイルを生成する(65) – スワップチェインの部分更新

スワップチェインの部分更新 DXGI 1.2からDirty RectangleとScroll Areaがサポートされた。詳細は「Enhancing presentation with the flip model, dirty rectangles, and scrolled areas」にであるが、絵だけ引用すると となっている。これにより、更新が必…

音声ファイルから動画ファイルを生成する(64) – タイトルバーのカスタマイズ~ウィンドウ自前描画

タイトルバーにタブを置く方法を試してみる。 Chromeのようにタブをタイトルバーに置きたいので、「Custom Window Frame Using DWM」ここに書いてある方法を試してみた。 手順としては下記の通りだ。 WM_CREATEメッセージをハンドルし、SWP_FRAMECHANGEDフラ…

音声ファイルから動画ファイルを生成する(63) - Win8.1 DesktopでのHigh DPI ・DWM

High DPI High DPIにもそれなりに対応していると思っていたのもつかの間、High DPIのドキュメントを見ているとWin 8.1で少しHigh DPIの対応方法が変わっているのに気付いた。詳細は下記に書いてある。 Writing DPI-Aware Desktop and Win32 Applications Tut…

音声ファイルから動画ファイルを生成する(62) - コード整理

High DPI対応はコードを見直すとそこそこやっていたので、ちょこちょこ直すだけで終わった。続いて昨日、今日とUI周りのコード整理を行った。 ソースコード 元々UI周りのコードは、下記の設計だった。 ウィンドウハンドル=インスタンス ウィンドウハンドルを…

DirectX12

とうとう出た。 DirectX12がとうとうアナウンスされた。DirectX Developer Blogによると主としてパフォーマンス改善のための「Pipleline State Object」「Command lists and bundles」「Descriptor heaps and tables」と、「順序に依存しない透明度」「衝突…

音声ファイルから動画ファイルを生成する(61) - High DPI対応

今Windows Desktop UIのAPI周りのコードを整理して、High DPI対応にするのを忘れていたを発見した。さらにいうとディスプレイの回転対応もなされていない。回転対応はさておきHigh DPI対応はやっておかないとあとで面倒なことになりそうなので対応することに…

音声ファイルから動画ファイルを生成する(60) - Custom Window Frame Using DWM

QSVカスタムMFTを作り、試すためにはTopoeditのような編集機能が欲しくなってきた。そろそろ私の環境もSinkWrtierからMedia Sessionに移行するときが来たように思う。というかMedia Sessionを理解しないことにはMedia Foundationを十分に使いこなすことはで…

音声ファイルから動画ファイルを生成する(59) - Quick Sync Encoder MFT

Quick Sync Encoder MFTが使えるのかどうか確かめるために、topoedit.exeを動かしてみた。MFTとしてはきちんと認識しているようである。 しかし追加しようとするとエラーが発生してしまう。 Intel Media SDKのサンプルコードにはWindows Store Appsのサンプ…

音声ファイルから動画ファイルを生成する(58) - Sandy Bridgeでの内蔵・外付GPUの共存

内蔵・外付GPUの共存 結論から言うとSandy Bridgeから、内蔵GPUはPCI Expressスロットのビデオカードとマルチディスプレイによる共存可能となっていた。調べるとあちこちのBlogにはそのことが書いてあった。今更の話だが。 ■元麻布春男の週刊PCホットライン■…

音声ファイルから動画ファイルを生成する(57) - Quick Sync Video

Intel Quick Sync Video (QSV)を有効にするにはどうすればよいか調べたら、Sandy Bridgeから搭載されているQSVエンコーダは内蔵GPU(HD3000)にくっついているものらしい。内蔵GPUが無効な状態ではQSVは利用できないらしい。私はとりあえずデュアルモニタ環境…

音声ファイルから動画ファイルを生成する(56) - Quick Sync Video

今日はIntel Quick Sync Videoについて調べていた。Media Foundationで使うための Quick Sync Video Encoder MFTについてだ。これを使えばエンコードを速めてくれそうなので。 私の今のアプリがハードウェアエンコーダを使用しているのかを以下のコードを使…

音声ファイルから動画ファイルを生成する(55) 微分方程式

もうすっかりテーマから離れているような気もするが。微分方程式をわかりやすく解説しているドキュメントはないだろうかとググるとやっぱりあった。応用までの解説が非常にわかりやすい。 常微分方程式の講義ノート 微分方程式も偏微分方程式とかあったりす…

音声ファイルから動画ファイルを生成する(54) Quick Sync Video

私のPCのCPU Core i7 2700kではQuick Sync VideoというH.264のハードウェアエンコーダが利用できるらしい。一応Media Foundation用のMFTもあるようだが、MFTとしてインストールされているのか、ハードウェアエンコーダMFTをどうやれば使えるのかが、ここ数日…

音声ファイルから動画ファイルを生成する(53) – フーリエ級数と微分方程式

フーリエ級数 いやー不思議なもので単位ベクトルとか直交の意味がわかり、関数空間というのがわかってくるとフーリエ級数もなんとなくわかったような気になるのが不思議だ。最初見たときはもう意味不明で拒否反応いっぱいな数式が今はいい加減ながらも受け入…

音声ファイルから動画ファイルを生成する(52) – 畳み込み積分

言葉では知っているものの、なんだかよくわからない「畳み込み積分」。コンボリューションとかいうやつ。私はコンボリューション・リバーブというジャンルのVSTエフェクトをいくつか知っているが、それと関係はあるのだろうか。関係あるんだろうなやっぱり。…

音声ファイルから動画ファイルを生成する(51) – 数学の勉強とか

数学のお勉強 AVXによる高速化対象はやっぱりFFTの部分かなと思う。しかしそれを行うにはFFTについて精通している必要がある。FFTに精通するためにはDFTについて精通する必要がある。DFTについて精通するためにはフーリエ変換について精通している必要がある…

音声ファイルから動画ファイルを生成する(50) – X64 & IA-32

メモリ間コピーをXbyakを使ってAVXで書き直してみた。結果から言うとパフォーマンス的にはあまり変わらなかった。もともとSIMDに適した部分ではないのでしょうがないが、勉強にはなった。 // Xbyakでのメモリコピーコード video_writer::copy_image::copy_im…

音声ファイルから動画ファイルを生成する(49) – X64 & IA-32

今日は「インテル® 64 アーキテクチャーおよび IA-32 アーキテクチャー最適化リファレンス・マニュアル」を読んでいた。このドキュメントは800ページくらいあり途方もない情報量であり、インテル・アーキテクチャについて詳細に記述されている。 例によって…

音声ファイルから動画ファイルを生成する(48) – AVXとアラインメント

AVXで勉強がてら実装してみようと思っているのは以下の部分である。 // テクスチャをメディアバッファに書き込む void video_writer::set_texture_to_sample(ID3D11DeviceContext1* context, ID3D11Texture2D* texture) { // タイムスタンプの設定 CHK(sampl…

音声ファイルから動画ファイルを生成する(47) - AVXとアラインメント

このようなアプリの出来具合で何なのだが、DirectX MathやらイントリンシックやらXbyakとかを使って少しSIMDなコードを作ってみたくなってとちょっとやり始めてみている。まずはXbyakを使ってMFCopyImageのY方向逆転コピー版をまず作ろうかなと着手したとこ…

音声ファイルから動画ファイルを生成する(46)

音声ファイルを読みだして、それをもとに動画生成するというところから脇道にそれているが、できたらいいなとか考えていることを列挙してみる。 基盤地図情報を基にして富士山画像を生成する 国土地理院が公開している基盤地図情報データの標高データを使用…

音声ファイルから動画ファイルを生成する(45)

Ocean Rendererもようやくまともに動くようになった。ソースコード中に出てくる言葉を調べていると、さまざまな技術を使ってこの波は作られていることがわかる。ちょっとあげてみると、 フレネル反射 パーリンノイズ ガウシアンノイズ Phillips spectrum デ…

音声ファイルから動画ファイルを生成する(44) – Ocean Renderer

Skyboxの部分が回転時に揺れるBugはようやく直った。原因はビューポート座標の手前のZ座標のせいだった。しかしなんでそれで直るのかはわからない。。理屈のわかっていないものの悲しさである。 いい加減波面生成の理屈を理解しないとね。。

音声ファイルから動画ファイルを生成する(43) – Ocean Renderer

注視点を回転させてみているのだがSkyboxの部分がめちゃめちゃ揺れて表示されるのである。 元々のサンプルでは回転させてもこのような揺れはなかった。波の部分はちゃんと回転されている。空はskyboxというキューブマップを使った疑似的な表現法なのであるが…

音声ファイルから動画ファイルを生成する(42) – Ocean Renderer

8×MSAAによる画質の向上を試みたが、あんまり変化はなかった。波の奥がちらちらしていたのはビューポートの奥行上限値が小さすぎたからだった。あとは海の色を少し明るめにして緑成分を多くしてみた。視線方向も変えてみている。 MSAAのテクスチャはそのまま…

音声ファイルから動画ファイルを生成する(41) – Ocean Renderer

次にやろうとしているのはMSAAを使って画質向上を図ることだが、このやり方が今一つわからないのである。 今は下記の方法で描画テクスチャを読みだしてMP4ファイルにしている。 スワップチェインに対するMSAAのサンプルは結構あるのだけれども、対テクスチャ…

音声ファイルから動画ファイルを生成する(40) – Ocean Renderer

Nvidia Graphics SDKの「FFT Ocean」を自分のアプリに移植した。 結果は下の動画である。 移植はスマポ化・DXUTの依存排除・ベクトル演算部分のSimpleMath&DirectX Math化、自分のライブラリへのつなぎコードの作成くらいである。またもや凡ミスでなかなか波…

音声ファイルから動画ファイルを生成する(39) – Ocean Renderer

昨日のOcean Rendererだけれども、ソースコード&バイナリがNVIDIA Graphics SDK 11に入っていることがわかった。さっそくダウンロードして実行してみた。 なるほどこれはすごい。ちゃんと波が動いている。ソースコードもついているので自分のプロジェクト・…

音声ファイルから動画ファイルを生成する(38) – Ocean Renderer

fluidcs11サンプルは主要な演算はCompute Shader、つまりGPUによって行われている。FFT処理もGPUで行えば、音声データを視覚化するのもかなり高速になるのではないかと思った。CPU -> GPU間のメモリ転送も発生しなくなりそうだしね。 すでにGPUを使ってFFTを…

音声ファイルから動画ファイルを生成する(37) - FluidCS11サンプルの移植

そういうことでDirectX SDKの中でお気に入りのサンプルであるFluidCS11サンプルを自分のアプリに移植してみた。結果は下の動画である。 移植するといってもDXUTへの依存部分を排除しスマポ化するぐらいの簡単なものだ。しかし些細なことで時間をかけてしまっ…

音声ファイルから動画ファイルを生成する(36)

ちょっとDirectX11 SDKのシェーダーサンプルコードを動かしてみようとしたら、dxsdkver.hが見つからないとコンパイラからお叱りを受けた。fluidCS11というコンピュート・シェーダーのプログラムである。 これはパーティクルを使用した流体シミュレーションの…

音声ファイルから動画ファイルを生成する(35)

スペアナもどきはできそうな気がしてきたところで、映像表現にも少し凝ってみようとシェーダープログラミングをしようかなと思っているところだ。ただちょっとメンタル的に疲れていて、やる気が萎え気味である。またさらに進捗がゆっくりになると思う。てな…

音声ファイルから動画ファイルを生成する(34) - スペアナ表示を作る

少し問題というか FFTによる表示も少し手慣れてきたところで、ちょっと問題が発生した。たんなる知識不足のせいかもしれないけれども。 いまどうやっているかというと、曲を1470サンプル(1/30秒)ずつずらしながら4096サンプルごとにFFTを実施して、その結…

音声ファイルから動画ファイルを生成する(33) – スペアナ表示を作る

1回あたりのフーリエ変換のサンプル数を増やすためにアルゴリズムを見直し、さらに横軸の周波数の刻みを等間隔ではなく低域は緩く、高域は細かく刻むように表示してみた。

音声ファイルから動画ファイルを生成する(32) – スペアナ表示を作る

表示部分を改良してみた。データに閾値を設けてそれ以下は音量0とみなすようにした。15Khz位までを画面に表示するようにし、さらに振幅の大きさに合わせて色を変えたり、透明度を変えてみた。 実行し再生してみると、一番音が動くのは5KHz位までのようで、そ…

音声ファイルから動画ファイルを生成する(31) – スペアナ表示を作る

一応表示できるようになったものの、理屈の理解不足のためにいろいろ問題がある。昨日はっぴぃえんどの「朝」という曲をカバーしたくなって簡単にコードとかを入れて歌ってみたのだが、スペクトルの表示がおかしい。音量が大きくなると逆に小さく表示される…

音声ファイルから動画ファイルを生成する(30) – スペアナ表示を作る

フーリエ変換周りの勉強は続けつつ、「山岡忠夫 Home」サイトの記事を参考にしつつ、そこからリンクされていたFFTプログラムを利用させていただきスペアナ表示もどきを作ってみた。 ソースコード 出力テスト結果は以下である。 フーリエ変換の理屈はむずかし…

音声ファイルから動画ファイルを生成する(29) – スペアナ表示を作る

スペアナだった 前回グライコ表示を作るといったが、正確にはスペアナ表示であった。スペアナといっても昔のステレオについていたEL表示の10段階くらいのやつをイメージしている。 これを作るためには、入力波形からスペアナの各棒グラフの帯域の成分がどの…

音声ファイルから動画ファイルを生成する(28) – プレビュー画像を表示する。

UIを少し追加・整理した。動画タイトルを入力するテキストボックスおよびプレビュー表示の追加である。 プレビューは実際に動画作成用にGPU側に持っているテクスチャを100msごとに縮小して表示しているだけである。ただウィンドウのバックグラウンドいっぱい…

音声ファイルから動画ファイルを生成する(27) – WM_COMMANDを子ウィンドウに転送する

OSが用意してくれているボタンやテキストボックスのラッパーとして以下のようなクラスを作ってみている。これはコントロールを作成してサブクラス化し、subclass_func_tファンクタにメッセージを転送するものである。SubClassFuncの内容をメンバ関数に転送す…

オブジェクト指向とかCとかC++とか

C++

Linus氏がC++嫌いなのを今日知ったのである。私はC++は好きだが深入りしたくはあまりない。つまりLinus氏のいう一般以下に位置する者である。私はLinus氏の意見は批判というよりはOSのカーネルを書くにはC言語以外にないと言っているだけのような気もする。…

音声ファイルから動画ファイルを生成する(26) – コピーコードを書き直した。

ということでテクスチャーと昨日コピーコードをMFCopyImageから自前のコードに書き直した。 // テクスチャをメディアバッファに書き込む void video_writer::set_texture_to_sample(ID3D11DeviceContext1* context, ID3D11Texture2D* texture) { // タイムス…

音声ファイルから動画ファイルを生成する(25) – 描画 → H.264ファイル化コードが完成した。

ようやくコードができ動くようになった。しかし上下が反転している。これはどうもD3Dテクスチャと動画フレームのY座標が逆のために発生するようだ。そうするとMFCopyImageは使えなくなるな。。Windows Store Appのときは強引に反転して描画してしのいでいた…

C++テンプレートはコードの抽象度を高める機能である。

ここしばらくC++コードをこちょこちょ書いているのであるけれども、テンプレートはコードの抽象度を高める上で必要だなぁと再認識した。 C++が持つオブジェクト指向にしてもやっぱり抽象度を高める機能だし。抽象度を高めるというのはコードの再利用性を高め…

音声ファイルから動画ファイルを生成する(24) – 描画 → H.264ファイル化コードを書いている

何となくUIはChildWindowの上にUIコントロール(テキストボックスやボタン等の入力系)を並べ、それとDirect2D/3Dとかで書いたビットマップ(サーフェース)をDirectCompositionで合成する形でいこうかなと。 UIの道筋が見えてきたのでDirect2D/3Dで描画 → H…

音声ファイルから動画ファイルを生成する(23) - Direct Composition

Direct Composition UI作りに役立ちそうだということで、またDirect Compositionをいじっている。これは親ウィンドウ上で複数のビットマップ(サーフェース)を合成して表示できるライブラリである。重ね合わせする際にオフセット座標を設定して表示位置をずら…