Как отключить / включить звук BASS?

Как я могу немой а также Unmute 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 (WASAPI I / O в Windows Vista и более поздних версиях — это не кроссплатформенность).

0

Решение

Вот мое решение:

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() здесь — он установит громкость всей вашей системы!

Это оно!

4

Другие решения

Других решений пока нет …