我有一个可以生成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级别也不要暴露它,所以也许我已经回答了我自己的问题。仍然有兴趣知道是否有更好的答案。
谢谢,史蒂夫
答案 0 :(得分:1)
我不认为他们可以分开。您可以移动到较新的IAudioClient界面,并使用两个WASAPI会话分别控制音量 - 一个用于wav,一个用于midi。这不适用于Vista tho以下的任何内容。
或者,您可以在代码中跟踪音量级别,只要您不播放wav和midi,同时在播放前重置它们。