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

S.F. Page

Programming,Music,etc...

音声ファイルから動画ファイルを作成する(5) – 凡ミスだった。

OpenAsyncでハマっていた例外は、内部的に発生しているものできちんとキャッチされているから障害ではないことがわかった。どうもデバッガの例外オプションで、すべての例外を発生時にブレークするように設定していたために、気にしなくても良い例外までブレ…

音声ファイルから動画ファイルを作成する(5) – StorageFile::OpenAsyncでまだハマっている。

今日もOpenAsyncが出す例外でハマり続けている。今日は下記のコードを書いて試してみた。 create_task(Windows::Storage::KnownFolders::MusicLibrary->CreateFileAsync (L"test.m4v", Windows::Storage::CreationCollisionOption::ReplaceExisting)) .then(…

音声ファイルから動画ファイルを作成する(4) - StorageFile::OpenAsyncでハマっている

FileOpenPickerを使ってWAVファイルを選択してOpenAsyncでファイルを開こうとしている。簡単なコードなのだがよくわからない例外が発生して悩んでいる。 void sfmfMain::OpenFile() { auto openPicker = ref new Windows::Storage::Pickers::FileOpenPicker(…

Box2D + WinRTでゲームを作る (3) – 動画出力方法を考える

今日はMedia Foundationドキュメントをみながらスワップチェインをどう出力するのかを考えていた。GPUメモリ -> CPUメモリの転送も極力減らしたいし、 拡大縮小もGPUにやらせたい。で以下の手順でいけるのではないかと。 スワップチェインと同じ大きさのテク…

Box2D + WinRTでゲームを作る (2) - 動画出力を試みる

作成中の画面を動画にしていたのだが、ちょっと処理速度的に厳しくなってきた。 アマレココでもExpression Encoderでも15FPSで処理がもたつく。デスクトップのキャプチャーは結構重い処理なのであろう。 Media FoundationのSink Writerを使って、スワップチ…

Box2D + WinRTでゲームを作る

「XAML DirectX 3D shooting game sample」をスケルトン化し、Box2DのコードおよびDirect2Dによる描画コードを追加した。 ソースコード この後でGDC2013 Game テンプレートなるものも見つけ、これでやり直そうかなと思ったけど、サウンドやメッシュ・入力周り…

キャプチャしながら再生するプログラムの作成(10)

マイク入力をキャプチャする部分のBUGも大きなものは取れた。まだ挙動は怪しいが。キャプチャ・インターフェースの初期化に失敗したときの処理がまったく入っていなかったのが原因だった。キャプチャ入力を早く試したかったので初期化は成功するという前提で…

キャプチャしながら再生するプログラムの作成(9)

非同期エージェントライブラリでスレッド部分を書き換えてみた。スレッド制御クラスをagent継承クラスに置き換えただけだけどね。 ソースコード なかなか面白いライブラリだ。非同期メッセージブロックとかこういうのに近いのは自前で用意していたけど、ライ…

キャプチャしながら再生するプログラムの作成(8)

ぼちぼちと直していたのだが、オーディオ・キャプチャ部分以外は割と動くようになった。ほとんどがBUG。エラー処理をきちんとしていないとか、COMポインタのRelease忘れとかそんなのだ。 ソースコード

キャプチャしながら再生するプログラムの作成(7)

出力・入力デバイスの管理クラスを作り直しているところ。DeviceWatcherを使ってでデバイスの情報取得・変更管理を行おうとしている。 やはりDeviceInformationからDeviceClassの値を得ることはできないようなので、DeviceInformation::CreateWatcherすると…

DeviceInformationからDeviceClassの情報は得られない?

DeviceInformation::PropertiesのKeyを列挙してみると下記の通りであった。 System.ItemNameDisplay System.Devices.Icon {51236583-0C4A-4FE8-B81F-166AEC13F510} 123 System.Devices.IsDefault System.Devices.DeviceInstanceId System.Devices.InterfaceE…

DeviceInformationからDeviceClassを得る方法

これがよくわからないんだな。 DeviceWatcher::Start()直後からEnumrationCompleteイベントまで既存のデバイスの情報がAddイベントの2番目の引数、DeviceInformationで通知される。その通知されるDeviceInformationがどのDeviceClassに属するか知りたい。列…

キャプチャしながら再生するプログラムの作成(6) – DeviceWatcherAdapter

結局TypedEventHandlerのアダプタはやめて、DeviceWatcherクラスのアダプタとして、イベントをboost.signalに変換するようにしてみた。 namespace en = Windows::Devices::Enumeration; namespace f = Windows::Foundation; ref class DeviceWatcherAdapter …

Using Advanced Query Syntax Programmatically (Windows)

Using Advanced Query Syntax Programmatically (Windows). DeviceInformation::CreateWatcherの引数で出てくるAQSなるもの。まだよくわかっていない。

キャプチャしながら再生するプログラムの作成(5) – イベント(デリゲート)をstd::functionに変換するラッパクラス | S.F.Page

前回作成したクラス(アダプタクラス typed_event_handler_adapterに改名)を使ってみたところ一応コンパイルは通ったが、ref newしたクラスの生存期間が?でかなり危険なコードのような気がする。 watcher_ = DeviceInformation::CreateWatcher(); watcher_…

キャプチャしながら再生するプログラムの作成(4) – イベント(デリゲート)をstd::functionに変換するラッパクラス

イベント(デリゲート)をstd::functionに変換するラッパクラスを作ってみた。 template <typename TSender,typename TResult> ref class typed_event_handler_wrapper { internal: typedef std::function<void (TSender,TResult)> wrapped_method_type; typed_event_handler_wrapper(wrapped_method_type wrapped_method</void></typename>…

キャプチャしながら再生するプログラムの作成(3) – デリゲートに使用できる関数ポインタ

DeviceWatcherのイベントにバインドするには、TypedEventHandlerにthisポインタとメンバ関数ポインタを引数にセットしてバインドすればいい。 watcher_ = DeviceInformation::CreateWatcher(); watcher_->Added += ref new TypedEventHandler<DeviceWatcher^,DeviceInformation^>(this,&wasapi_d</devicewatcher^,deviceinformation^>…

キャプチャしながら再生するプログラムの作成(2) - DeviceWatcherクラスを使ってデバイスの列挙・監視をする。

サウンドデバイス列挙するのにDeviceInformationCollectionを使っていたけど、サウンドデバイスの抜き差しにも対応したいのでDeviceWatcherクラスを使ってデバイスの列挙・監視をしてみようと思う。 Core Audio APIを使えばIMMDeviceCollection,IMMDevice,IM…

Using Windows 8* WinRT API from desktop applications | Intel® Developer Zone

C++ Desktop AppからWinRT APIを使う方法はここに書いてあった。 Using Windows 8* WinRT API from desktop applications | Intel® Developer Zone. egtraさんにも下記サイトを教えてもらったがこれはC#からの情報だった。C++/CLIからだとこの情報は使えるか…

CryptographicBuffer class

CryptographicBuffer class. 昨日URLエンコード・デコードを調べていたら見つけたクラス。スタティックメソッドのみで、IBufferに関する下記の操作を提供するユーティリティ・クラスだ。 メソッド名内容 Compare2つのIBuffer^を比較する。 ConvertBinaryToS…

Twitterのアプリ承認部分の実装を進める

OAuthとかWeb認証とかそのあたり。まああんまり詳しくないので基本的なところから勉強している。コードについてはサンプル・コードを見ながらMVVMっぽくなるようにスクラッチで作るつもり。もちろんAPIでカバーできるところは使うけれど。

リソース管理で混乱する

XAMLでUI作っていくとWinRTオブジェクトが当然登場するのだけれども、これと旧COMを混同したりとか、スマポとか従来C++のリソース管理がごちゃごちゃしてきて頭の中がこんがらがってくる。3つの異なるリソース管理をしないといけないのは面倒だね。

COMとWinRTが頭の中でごっちゃになっている

「ActivateAudioInterfaceがdeprecateになってしまった」件で、私はIActivateAudioInterfaceAsyncOperationがIAsyncOperationの継承インターフェースかなと思っていたんだけど違っていた。IActivateAudioInterfaceAsyncOperationはレガシーCOMスタイルのイン…

SurfaceImageSource

SurfaceImageSourceって、UIコントロールかなと思っていたんだけど、イメージブラシのソースなんですな。よくわかってなかった。。 XAMLの中でDirectXを扱うのは楽になったんだけど、それでも面倒くさいねぇ。。

出た!STAの例外

wasapi管理クラスをテストしたら出た!STAに関する例外! スレッドモデルのルールに抵触しそうなことはまだしてないんだけどね。。というかまだルールもわかっていないので抵触しているのかさえもわからない状態。スレッドモデルのところはきっちり押さえと…

Windows ランタイムの非同期性により高速で滑らかなアプリにする - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs

Windows ランタイムの非同期性により高速で滑らかなアプリにする - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs. 非同期処理に関すること。ほんとにWinRTは非同期処理しまくりだ。

DeviceInformationクラスのIsDefaultプロパティについて

DeviceInformationクラスにIsDefaultというプロパティがある。これを参照して既定のデバイスを特定しようとしたが、返された結果はすべてfalseで特定することはできなかった。 どうしたものかとAPIリファレンスを見ているとWindows::Media::Devices::MediaDe…

Keeping apps fast and fluid with asynchrony in the Windows Runtime - Windows 8 app developer blog - Site Home - MSDN Blogs

Keeping apps fast and fluid with asynchrony in the Windows Runtime - Windows 8 app developer blog - Site Home - MSDN Blogs. WinRTの非同期処理に関してのエントリ。ちょっと今日は疲れたので明日チェックすることにする。

DeviceEnumerationサンプルをチェックする。

Windows 8 のサンプルコード、DeviceEnumerationを見ていたら、XMLへのシリアライズコードが入っていた。ライブラリでシリアライズを支援しているのか?と期待したがそうではなく、プロパティのキーと型をXMLファイルに落として復元するというものであった。…

XAML と DirectX の統合 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs

XAML と DirectX の統合 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs. おお、ようやく翻訳されたか。

コードの変更

以前作ったCore Audio管理クラス群をWindows8に移植し始めた。今のところ、 __com_ptrはMicrosoft::WRL::ComPtrに変更 MMDeviceによるデバイス列挙はWindows::Devices::Enumerationに変更 IAudioClient2のActivateはActivateAudioInterfaceに変更 eDataFlow…

PPLとConcurrency Runtime

「PPL を使用した C++ での非同期プログラミング」を 読んだ。 PPLとはマルチコア用の並列処理ライブラリかなと思っていたけれどそれにかぎらず非同期操作を簡潔に処理するという目的も併せ持っているのですな。 ポイントとなるのはtaskクラス。これは非同期…

STAとMTA

STAとMTA. Metro StyleであってもSTA/MTAの考え方は健在なようだ。XAML UIはやっぱり伝統のSTAなのかな? このあたりかなりいい加減な知識なので整理して覚えておきたい。

#Win8 #Metro の WinRT と .NET Framework と WinMD と Windows Store と… (ややこしいっ!!): biac の それさえもおそらくは幸せな日々@nifty

WinRT と従来の .NET Framework は、 まったく切り離されているように描かれています。 が、 実際にはそうではありません。引用元: [Metro Style] #Win8 #Metro の WinRT と .NET Framework と WinMD と Windows Store と… (ややこしいっ!!): biac の それさ…

Sleepの代替

Sleepが使えないというのはちょっとした話題になっていたようだ。 How used sleep function in windows 8 consumer preview version Thread.Sleep in Win8 Is there a supported API in Metro for replacing "Sleep" ? Sleepの代替としては.NET4.5のTask.Del…

Sleepが見当たらない

Metro Styleで古いソースコードをコンパイルしたところSleepが存在しないと怒られた。Sleepは使えないようだ。代替のAPIはどれなんだろう?ひとしきりドキュメントを見てみたんだけど見当たらないんだよね。。Windows 8は眠らないのかね。。

ActivateAudioInterfaceは使える。

ドキュメント化されていないActivateAudioInterfaceの件。このAPIからIAudioClient2インターフェースを取得することができる。 DeviceInformationからIAudioClient2を取得する方法が分かったので、以前作ったものをベースにWASAPI管理クラスを作っていくこと…

非同期プログラミング - PPL を使用した C++ での非同期プログラミング

非同期プログラミング - PPL を使用した C++ での非同期プログラミング. Windows 8ではPPLを多用しそうだ。勉強せねば。。

IAudioClientをActivateするには?

Windows::Devices::Enumerationでサウンドデバイスを列挙することができることはわかったが、DeviceInformationからどのようにしてIAudioClientを得るのかがよくわからない。おそらくActivateAudioInterfaceなのだろうがドキュメント化されていない。ヘッダ…

task&lt;T&gt;().then()による列挙

デバイス列挙サンプル中のDeviceInformationの列挙はtask<T>で行っていたので真似してみた。これだとすっきり書ける。ついでにデータバインドもやってみた。ソースはほとんどコピペ状態。 FakeDAW::FakeDAW() { InitializeComponent(); task<DeviceInformationCollection^>( DeviceInformation</deviceinformationcollection^></t>…

DeviceInformationCollectionの列挙はrange-based forでも列挙できた。

DeviceInformationCollectionの列挙はrange-based forでもできた。 DeviceInformation::FindAllAsync(DeviceClass::AudioRender)->Completed = ref new AsyncOperationCompletedHandler<DeviceInformationCollection^>( [=] (IAsyncOperation<DeviceInformationCollection ^>^ asyncInfo, AsyncStatus asyncStatus) { if(as</deviceinformationcollection></deviceinformationcollection^>…

WinRTでオーディオデバイスを列挙してみた

WinRTを使ってオーディオレンダリングデバイスを列挙してみた。ソースはこんな感じ。もうC++に見えませんな。。 DeviceInformation::FindAllAsync(DeviceClass::AudioRender)->Completed = ref new AsyncOperationCompletedHandler<DeviceInformationCollection^>( [=] (IAsyncOperation<DeviceInformationCollection ^>^ a</deviceinformationcollection></deviceinformationcollection^>…

ハリボテの作成

とりあえずUIエディタでハリボテを作ってみた。 Windows Phone SDKですでに分かっていたが、このUIエディタは使いやすい。

驚き最小の原則

Developer Preview から Consumer Preview へのアプリの移行 - Windows 8 アプリ開発者ブログ - Site Home - MSDN Blogs. 「簡略化された WinRT スレッド モデル」セクションに書かれていた問題点の箇条書きのところ。 自動マーシャリング動作が、驚き最小の…

Windows 8でBoost 1.49.0をビルド

とりあえずやってみたら、まずBootstrap.batでこけた。しょうがないのですでにコンパイル済みのB2.exeを使ってビルド。何個かエラーが発生したものの、びるどは完了。コンパイルが必要なもので使っているのはthreadとかserializationだけれど、それはコンパ…

Under the Covers of WinRT Using C++ - All Your Base Are Belong To Us

Under the Covers of WinRT Using C++ - All Your Base Are Belong To Us. WinRTはIUnknownを継承したIInspectableインターフェースがベースになっているらしい。IInspectableはIDispatchに変わるものっぽい。C++ではIInspectableは使わず、JavaScriptで使わ…

WinRTとはすべてではない。

WinRTはWin32APIに変わるものと思っていたけど、今のところそうではないのだね。COMでないAPIの置き換え+非同期処理+Metro UIサポートといった感じだ。例えばAudioの低レベルAPIはCore Audioだしね。Direct3D/2Dもちゃんと使える。COM API部分はほとんどその…

Step 3: Connect the DirectX swap chain

Direct3D sprite sampleのソースコードを眺めてみている。DirectXBaseクラスというのがDirect2D/3Dをラップしているものである。Direct2D/Direct3D/ウィンドウが持つサーフェースとの相互連携の方法がWindows7と随分異なっている。新しいインターフェースや…

Microsoft::WRL::ComPtr

Direct3Dサンプルのソースコードをちら見するとMicrosoft::WRL::ComPtrなるものが。CComPtrとか__com_ptr_tの後継か。使い方はほぼ同じ。

Using the Windows Runtime from C++ | BUILD2011 | Channel 9

Using the Windows Runtime from C++ | BUILD2011 | Channel 9. Build2011でのHerb Sutterさんのプレゼン動画。