windows audio waveOutSetVolume交叉连接midiOutSetVolume

时间:2013-03-07 08:06:59

标签: windows audio

我有一个可以生成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

for midi

问题是,控制midi音量设置波量和签证,就像它们在窗户里粘在一起

有没有人知道是否有办法解开它们?

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

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

谢谢,史蒂夫

1 个答案:

答案 0 :(得分:1)

我不认为他们可以分开。您可以移动到较新的IAudioClient界面,并使用两个WASAPI会话分别控制音量 - 一个用于wav,一个用于midi。这不适用于Vista tho以下的任何内容。

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