1

我有一个程序可以生成 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 级别也不公开它,所以也许我已经回答了我自己的问题。

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

谢谢,史蒂夫

4

1 回答 1

1

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

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

于 2013-11-12T21:42:36.517 回答