😸

プロセス別に音を取得しよう!(C++で使用可能)

2023/02/03に公開

はじめに

この記事では、「この関数をこんな『雰囲気』で使うといいよ!」という超のクソも使えない記事です。ご理解いただけた方は、ご覧ください。

やったこと

この「プロセス別に音を取得」という機能は、今までのWindowsにない機能でしたが、2021年8月あたり?にリリースされた「Windows 10 Build 20348」から使用できます。
つまり Windows11以上の限定機能 です。
分かりやすく言うと、Windows11 Version 21H2以降(かなり曖昧に言っています)なら大丈夫ということです。

※ そこそこ新しい機能なので、2022年1月時点では、一部の音声系ライブラリ(SDLやNAudio)では実装されていません。

読むべきものというか、ここに全て書かれている

このgithubリポジトリに全てが書かれています。
※ このgithubのコードは、WRL関数が含まれているので、このコードをそのままUWPでは使えません。頭回して、実装してください。

頭が良い諸君なら説明する必要はないと思うが、ここに書かれているコードを超軽く解説すると、「ActivateAudioInterfaceAsync」に、AUDIOCLIENT_ACTIVATION_PARAMSに数値を設定した上で、放り込むと、そのプロセスIDの音が取得できるというものです。
なお、「ActivateAudioInterfaceAsync」の時、IActivateAudioInterfaceCompletionHandlerというインターフェースを使うので、キャプチャーで使うクラスには、IActivateAudioInterfaceCompletionHandlerを継承して、ActivateCompleted関数を実装する必要があります。気をつけてね!

調査した理由

OBSというオープンソースのキャプチャーソフトが、この機能に対応していて、「あれ?どうなっているだ?これ?」と思ったのが発端です。疑問って大事ですね!

\(^o^)/おわり

Discussion