一个简单的录制和播放音量控制类






3.64/5 (11投票s)
2001年10月28日
2分钟阅读

304207

3687
一个使设置录制和播放音量更简单的类。
引言
有时我们需要控制声卡的音量,而微软提供了一个API waveOutSetVolume()
来实现这一点。不幸的是,这个API只能设置播放音量。当我们想要设置其他线路的音量,例如麦克风或MIDI,或者用于录音的线路输入时,却没有API可以帮助我们!
起初,我以为DirectMedia可能会提供一个接口来做到这一点,它确实提供了,但我在编写和测试代码后,结果并不理想。接口 IAMAudioInputMixer
只能处理录音,而不能处理播放,而且最重要的是
"每个引脚的名称,例如“线路输入”或“麦克风”,反映了输入类型"
但是,在不同的机器上,名称并不相同!
例如
我想设置麦克风的音量,所以我通过名称“麦克风”找到引脚并控制它,这在我的电脑上可以工作。当我尝试在另一台机器上测试时,它失败了,因为引脚的名称是“麦克风音量”!
我尝试了许多方法,最终我找到了使用MIXER的方法。
可能有些人也为同样的问题头疼过,所以我发布了我的解决方案。希望对您有所帮助。
用法
- 将 Mixer.h 和 Mixer.cpp 包含到您的项目中;
- 添加如下代码
CMixer mixer(MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, CMixer::Record); ...... mixer.GetVolume(); mixer.SetVolume(...);
备注
构造函数接受两个参数,第一个是 MIXERLINE
中的 ComponentType
(有关所有可能的值,请参阅 MSDN),第二个是一个 enum
类型,可以是 Record 或 Play。以上控制录音(waveIn)音量,您也可以使用
CMixer mixer(MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, CMixer::Play);
请注意,没有默认构造函数,不接受任何参数,因此,如果您在 C++ 类中使用它,应该这样编写代码
// MyClass.h ////////////////////////// class CMixer; class CMyClass { CMyClass(); private: CMixer m_mixer; .... } //MyClass.cpp /////////////////////////// CMyClass::CMyClass():m_mixer(MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, CMixer::Play) { } ....
如果您有任何建议或改进,请告诉我:whoo@isWhoo.com