我有一段代码,它应该静音/取消静音。我已经修补了很多,所以现在它枚举所有渲染设备来切换它们的静音状态。但是,尽管它完全取消静音,但对于静音,混音器会显示设备已静音,但声音仍在播放。在我的笔记本电脑上,我有一个 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;
如果有人知道出了什么问题...没有一个呼叫失败,而且一切看起来都被静音了,所以我真的很困惑...我也使用类似的代码来提高和降低音量,它工作得很好。