12

Windows 7 で個々のプログラムのピーク メーターの読み取り値を取得することは可能ですか。

WASAPI を使用すると、ループバック デバイスを介してシステム オーディオ全体をキャプチャできますが、これは異なるプログラムからの出力を区別しません。この質問は、指定された 1 つのアプリケーションのオーディオのキャプチャに関するものですが、オーディオを個別に再生しているすべてのプログラムをキャプチャする場合、答えは法外に思えます。下の画像に示すように、SndVol がそれを実行できるため、これは可能であるに違いありません。問題は、それがどのように達成されているかです。それは公開されていない API 呼び出しを介して行われているのでしょうか、それとも WASAPI を介してこのようなことを実際に達成することは可能でしょうか?

ここに画像の説明を入力

ありがとう。

4

3 に答える 3

13

オーディオ セッションを列挙し、IAudioSessionControlインターフェイスを取得しています (MSDNコード スニペット)。不足している部分は、既に保持しているIAudioMeterInformationインターフェイスからクエリを実行できることです。IAudioSessionControl

オーディオ エンドポイントがピーク メーターをサポートしている場合、このインターフェイスを取得してIMeterInformation::GetPeakValue、個々のセッションに使用できます。そして、これはおそらく SndVol が行っていることです。

これを行うコードは次のとおりです。

CComPtr<IAudioSessionControl> pSessionControl;
...
CComQIPtr<IAudioMeterInformation> pMeterInformation = pSessionControl;
FLOAT fPeakValue;
pMeterInformation->GetPeakValue(&fPeakValue);
_tprintf(_T("nSessionIndex %d, fPeakValue %.2f\n"), nSessionIndex, fPeakValue);
于 2013-01-16T21:05:59.413 に答える
0

WASAPI を見ると、特定のクライアントからオーディオをキャプチャするためのインターフェイスがありますが、ピーク レベルを決定するためのより高いレベルのインターフェイスは見当たりません。この WASPI で高レベルのオーディオ作業を行うために誰かが作成したライブラリがない限り、そのためにコードを書く必要があるかもしれません。乾杯!

于 2013-01-14T05:55:44.787 に答える
0

これは別のショットです: IChannelAudioVolume::GetChannelVolume。SndVol から MSDN のスレッドをたどったところ、ここにたどり着きました。Web ページからの引用: 「GetChannelVolume メソッドは、オーディオ セッションで指定されたチャネルの音量レベルを取得します。」このストリームからピーク値を抽出するには、何らかのソフトウェアを作成する必要があります。私の簡単な推測は、現在の値が最後の最大値よりも大きいかどうかを比較することです。その場合、現在の値がピークになります。

乾杯!

于 2013-01-16T18:52:32.550 に答える