gpt4 book ai didi

c++ - 如何静音/取消静音 BASS?

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:16 25 4
gpt4 key购买 nike

如何静音取消静音 BASS 播放(平台独立)?到目前为止,我在静音前保存当前音量,将音量设置为 0,如果取消静音则将其设置回来。

示例:
我的 C++ 类(class)的一部分

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 - 不是跨平台的)。

最佳答案

这是我的解决方案:

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() - 它会设置整个系统的音量!

就是这样!

关于c++ - 如何静音/取消静音 BASS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14735111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com