【问题标题】:IAudioVolumeEndpoint setMute will unmute, but never really mute (looks muted while sounds is still heard)IAudioVolumeEndpoint setMute 将取消静音,但从不真正静音(在仍然听到声音时看起来静音)
【发布时间】:2013-04-14 15:14:14
【问题描述】:

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

如果有人知道出了什么问题...没有一个呼叫失败,而且一切看起来都已静音,所以我真的很困惑... 我也使用类似的代码来提高和降低音量,效果很好。

【问题讨论】:

  • 你说你“修补了很多”。您是否对其进行了太多补丁以使其不再起作用?或者代码是否曾经工作过?如果是前者,那么你做了什么改变打破了它?可比较的 C++ 代码是否有效?
  • 实际上,“很多”可能超出了事实。它从来没有用于静音。我修补了它,因为最初它只会尝试静音/取消静音默认设备。为了让它工作,我决定静音/取消静音所有设备。可比较的 C++ 代码有效(我自己没有编译它,但我有源代码和二进制文件,而且二进制文件确实使声音静音)。见这里:blogs.msdn.com/b/matthew_van_eerde/archive/2012/06/18/…。对我来说,它也是如此,并且还输出设备名称。

标签: windows delphi winapi


【解决方案1】:

这听起来很愚蠢 :) 因为你听到了声音,所以你没有静音。输出您正在静音的设备的名称;如果列表与 C++ 代码中的列表不匹配,则可以,那么您就知道问题出在哪里了。

【讨论】:

  • 好吧,我稍后再试一试,但基本上电脑上有2个渲染端点。 C++ 代码静音 2 显示其名称。我的代码也将 2 静音(或报告已静音)...嗯,它正确取消静音,Windows 混音器显示它们已正确静音...在使用我的静音代码后,C++ 静音代码仅显示未静音设备,执行时不再显示任何内容(因此它认为一切都已静音,尽管我仍然听到音乐)
猜你喜欢
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
相关资源
最近更新 更多