class GainControl

Defined at line 1077 of file fidling/gen/sdk/fidl/fuchsia.media.audio/fuchsia.media.audio/hlcpp/fuchsia/media/audio/cpp/fidl.h

Enables control and monitoring of audio gain. This interface is typically

a tear-off of other interfaces. For example, `fuchsia.media.audio.Renderer`

has a `BindGainControl` method that binds to a gain control that controls

gain for the renderer.

Public Methods

void ~GainControl ()
void SetGain (float gain_db)

Sets the gain in decibels.

void SetGainWithRamp (float gain_db, int64_t duration, ::fuchsia::media::audio::RampType rampType)

Smoothly changes gain from its current value to specified value, over the

specified duration (in milliseconds). If 'duration_ns' is 0, gain changes

immediately. Otherwise, gain changes only while the stream is running.

Any active or pending ramp is cancelled by subsequent call to SetGain.

There can be at most 1 active ramp at any time. Any active or pending

ramp is replaced by a later call to SetGainWithRamp (even if duration is

0). In this case gain would ramps directly from its most recent

(mid-ramp) value to the newly-specified one, over the new duration,

using the new easing.

Usage example (using time in seconds):

Time 0

SetGainWithRamp(`MUTED_GAIN_DB`, 0, SCALE_LINEAR) // Ramp 1

SetGainWithRamp(0.0f, `ZX_SEC`(4), SCALE_LINEAR) // Ramp 2

Time 3

PlayNoReply(kNoTimestamp, any_media_time)

Time 4

PauseNoReply()

Time 7

PlayNoReply(kNoTimestamp, any_media_time)

Time 8

SetGainWithRamp(`MUTED_GAIN_DB`, ZX_SEC(1), SCALE_LINEAR) // Ramp 3

Time 0: Ramp 1 completes immediately, changing the gain to `MUTED_GAIN_DB`.

Ramp 2 is pending, since we are not in playback.

Time 3, Ramp 2 begins ramping from `MUTED_GAIN_DB` to 0 dB

(scale 0.0=>1.0).

Time 4: Ramp 2 pauses (3s remain). Per `SCALE_LINEAR`, scale is approx.

0.25.

Time 7: Ramp 2 resumes from most recent value toward the target.

Time 8: Ramp 3 replaces Ramp 2 and starts from current scale

(approx 0.5).

Time 9: Ramp 3 completes; current scale value is now 0.0 (`MUTED_GAIN_DB`).

void SetMute (bool muted)

Sets the mute value. Ramping and mute are fully independent, although

they both affect the scaling that is applied.