0

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のドキュメントには、ミュート機能が1つだけあります。

BOOL BASS_WASAPI_SetMute(
    BOOL mute
);

ただし、これは良さそうに見えますが、残念ながらBASSWASAPIの一部です(WindowsVista以降のWASAPII / O-クロスプラットフォームではありません)。

4

1 に答える 1

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()でください-システム全体の音量が設定されます!

それでおしまい!

于 2013-02-13T18:27:08.610 に答える