我如何静音和取消静音 BASS播放(平台独立)?到目前为止,我在静音之前保存当前音量,将音量设置为0并在取消静音时将其设置回来。
示例:
我的C ++类的一部分
volume_t lastVolume; // 0.0f = silent, 1.0f = max (volume_t = float)
// ...
bool mute(bool mute)
{
if( mute )
{
lastVolume = getVolume(); // Save current volume
return setVolume(0.0f); // Set volume to silent
}
else
{
return setVolume(lastVolume); // restore last volume before muting
}
}
有更好的方法吗?在BASS Api文档中,只有一个静音功能:
BOOL BASS_WASAPI_SetMute(
BOOL mute
);
然而,这看起来很不错,但遗憾的是它是 BASSWASAPI 的一部分(Windows Vista及更高版本的WASAPI I / O - 这不是跨平台)。
答案 0 :(得分:4)
这是我的解决方案:
class PlayerBASS : public virtual AbstractPlayer
{
public:
// ...
/**
* Set volume on current channel.
*
* @param volume volume (0.0f - 1.0f)
*/
bool setVolume(volume_t volume)
{
return BASS_ChannelSetAttribute(streamHandle, BASS_ATTRIB_VOL, volume);
}
/**
* Get volume on current channel.
*
* @return volume (0.0f - 1.0f)
*/
volume_t getVolume()
{
float value;
BASS_ChannelGetAttribute(streamHandle, BASS_ATTRIB_VOL, &value);
return value;
}
/**
* Mute / Unmute the volume on current channel.
*
* @return 'true' if successful, 'false' if error
*/
bool mute(bool mute)
{
if( mute == muted ) // dont mute if already muted (and vice versa)
return true;
bool rtn; // returnvalue
if( mute ) // mute
{
lastVolume = getVolume(); // save current volume
rtn = setVolume(0.0f); // set volume to 0.0f (= mute)
muted = true; // set mute-state
}
else // unmute
{
rtn = setVolume(lastVolume); // restore volume
muted = false; // set mute-state
}
return rtn; // returnvalue
}
// ...
private:
// ...
HSTREAM streamHandle; // Streamhandle
bool muted; // flag for mute-state ('true': muted, 'false': unmuted) - init with 'false'
volume_t lastVolume; // lastVolume
};
不要在这里使用BASS_SetVolume()
/ BASS_GetVolume()
- 它会设置整个系统的音量!
多数民众赞成!