IAudioVolumeEndpoint setMute将取消静音,但从不真正静音(在听到声音时看起来静音)

时间:2013-04-21 18:49:37

标签: windows delphi winapi

我有一段代码,应该是静音/取消静音。我已经修补了很多,所以现在它枚举所有渲染设备来切换它们的静音状态。然而,尽管它完全取消静音,但对于静音,混音器将显示设备静音,但声音仍在播放。在我的笔记本电脑上,我有一个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;

如果有人知道什么是错的......没有一个电话失败,一切看起来都很静音,所以我真的很困惑...... 我也使用类似的代码来提高和降低音量,它运行得很好。

1 个答案:

答案 0 :(得分:0)

这听起来很愚蠢:)既然你听到了声音,那你就不会静音了。输出您正在静音的设备的名称;如果列表与C ++代码中的列表不匹配,则可以解决问题所在。

相关问题