サウンドをミュート/ミュート解除するコードがあります。多くのパッチを適用したので、すべてのレンダリング デバイスを列挙して、ミュート ステータスを切り替えるようになりました。ただし、ミュートの場合は完全にミュート解除されますが、サウンドミキサーはデバイスがミュートされていることを示しますが、サウンドはまだ再生されています。私のラップトップには、音がミュートされているかどうかを示すLEDがあり、ミュートされていることも示しています...
同じことを達成するために同様のC++コードを見てきましたが、違いが見つかりません...
var
deviceEnumerator: IMMDeviceEnumerator;
MMDevice: IMMDevice;
EndpointVolume: IAudioEndpointVolume;
Muted: BOOL;
R: Integer;
MMDC: IMMDeviceCollection;
DC: UINT;
I: Integer;
begin
CoCreateInstance(CLSID_MMDeviceEnumerator, nil, CLSCTX_ALL, IID_IMMDeviceEnumerator, deviceEnumerator);
if (deviceEnumerator.EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, MMDC) = S_OK) then
begin
if MMDC.GetCount(DC) = S_OK then
begin
for I := 0 to DC - 1 do
begin
if (MMDC.Item(I, MMDevice) = S_OK) then
begin
MMDevice.Activate(IID_IAudioEndpointVolume, CLSCTX_ALL, nil, @EndpointVolume);
if EndpointVolume = nil then
begin
OutputDebugString('Unable to get endpoint!!!');
end
else
begin
R := EndpointVolume.GetMute(Muted); // R = S_OK, always
R := EndpointVolume.SetMute(not Muted, nil); // R = S_OK always, too
end;
end;
end;
end;
end
end;
誰かが何が問題なのか考えているなら... 単一の通話が失敗することはなく、すべてがミュートされているように見えるので、私は本当に困惑しています... 同様のコードを使用して音量を上げたり下げたりしますが、完全に機能します。