【问题标题】:windows audio waveOutSetVolume cross connects midiOutSetVolumewindows audio waveOut SetVolume 交叉连接 midi Out SetVolume
【发布时间】:2013-03-07 08:06:58
【问题描述】:

我有一个程序可以生成 midi 和 wav 音频。我需要能够分别控制 MIDI 和音频的音量和平衡,理论上,我需要做的似乎就是调用

  unsigned short left = (unsigned short)(wavvol*wavbal/100.0);
  unsigned short right = (unsigned short)(wavvol*(100-wavbal)/100.0);
  MMRESULT err = waveOutSetVolume(hWaveOut, left | (right<<16)); // for audio

  unsigned short left = (unsigned short)(midivol*midibal/100.0);
  unsigned short right = (unsigned short)(midivol*(100-midibal)/100.0);
  MMRESULT err = midiOutSetVolume(s_hmidiout, left | (right<<16)); // for midi

中音

问题在于,控制 midi 音量会设置波形音量和反式,就像它们在窗户内粘在一起一样

有谁知道有没有办法解胶?

顺便说一句,我在 Windows 7 上,我知道微软在 win7 中搞砸了音频。在 XP 上,我有一个音频控制面板,带有单独的 midi 和 wave 控件,这似乎已经消失了。我想他们现在只是在内部混合它,即使在 API 级别也不公开它,所以也许我已经回答了我自己的问题。

仍然有兴趣知道是否有更好的答案。

谢谢,史蒂夫

【问题讨论】:

    标签: windows audio


    【解决方案1】:

    我不认为他们可以分开。您可以移至较新的IAudioClient 界面并使用两个WASAPI 会话分别控制音量——一个用于wav,一个用于midi。这在 Vista 以下的任何东西上都不起作用。

    或者,您可以在代码中跟踪音量级别,只要您不同时播放 wav 和 midi,请在播放前重置它们。

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 2011-07-10
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多