1

サウンドをミュート/ミュート解除するコードがあります。多くのパッチを適用したので、すべてのレンダリング デバイスを列挙して、ミュート ステータスを切り替えるようになりました。ただし、ミュートの場合は完全にミュート解除されますが、サウンドミキサーはデバイスがミュートされていることを示しますが、サウンドはまだ再生されています。私のラップトップには、音がミュートされているかどうかを示す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;

誰かが何が問題なのか考えているなら... 単一の通話が失敗することはなく、すべてがミュートされているように見えるので、私は本当に困惑しています... 同様のコードを使用して音量を上げたり下げたりしますが、完全に機能します。

4

1 に答える 1

0

これはばかげているように聞こえます :) 音が聞こえるので、何かをミュートしているわけではありません。ミュートしているデバイスの名前を出力します。リストが C++ コードのリストと一致しない場合は、問題がどこにあるかがわかります。

于 2013-04-22T21:24:25.303 に答える