windows audio waveOutSetVolume交叉连接midiOutSetVolume

windows audio waveOutSetVolume交叉连接midiOutSetVolume,windows,audio,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

我有一个程序,生成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)(wavvol*wavbal/100.0);
无符号短右=(无符号短)(wavvol*(100 wavbal)/100.0);

MMRESULT err=waveOutSetVolume(hWaveOut,left |)(right我认为它们不能分开。您可以移动到较新的界面,使用两个会话分别控制音量-一个用于wav,一个用于midi。这在Vista tho以下的任何情况下都不起作用


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

我认为它们不能分开。您可以移动到较新的界面,使用两个会话分别控制音量-一个用于wav,一个用于midi。这在任何情况下都不起作用兴秀寿

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

  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