|
| VolumeControl (std::shared_ptr< const Context > context, const VolumeControlParameters ¶ms={}) |
| Construct stream.
|
|
|
virtual AudioObjectPropertyScope | GetScope () const |
| Get the scope that the control is attached to. Can return kAudioObjectPropertyScopeInput or kAudioObjectPropertyScopeOutput. By default returns VolumeControlParameters::Scope.
|
|
virtual AudioObjectPropertyElement | GetElement () const |
| Get the element that the control is attached to. Typically should return kAudioObjectPropertyElementMain. By default returns kAudioObjectPropertyElementMain.
|
|
virtual SInt32 | GetRawValue () const |
| Get current volume, in raw units. Values are in range GetRawRange().
|
|
OSStatus | SetRawValue (SInt32 value) |
| Set current volume, in raw units. Values are in range GetRawRange(). Invokes by SetRawValueImpl() and NotifyPropertiesChanged().
|
|
virtual Float32 | GetDecibelValue () const |
| Get current volume, in decibel units. Values are in range GetDecibelRange().
|
|
virtual OSStatus | SetDecibelValue (Float32 value) |
| Get current volume, in decibel units. Values are in range GetDecibelRange(). Invokes by SetRawValue().
|
|
virtual Float32 | GetScalarValue () const |
| Get current volume, in scalar units. Values are in range [0; 1].
|
|
virtual OSStatus | SetScalarValue (Float32 value) |
| Set current volume, in scalar units. Values are in range [0; 1]. Invokes by SetRawValue().
|
|
virtual AudioValueRange | GetRawRange () const |
| Get minimum and maximum volume values, in raw units. Default implementation returns range based on VolumeControlParameters.
|
|
virtual AudioValueRange | GetDecibelRange () const |
| Get minimum and maximum volume values, in decibel units. Default implementation returns range based on VolumeControlParameters.
|
|
virtual Float32 | ConvertScalarToDecibels (Float32 value) const |
| Convert volume from scalar scale to decibel scale. Default implementation performs conversion based on VolumeControlParameters.
|
|
virtual Float32 | ConvertDecibelsToScalar (Float32 value) const |
| Convert volume from decibel scale to scalar scale. Default implementation performs conversion based on VolumeControlParameters.
|
|
|
virtual void | ApplyProcessing (Float32 *frames, UInt32 frameCount, UInt32 channelCount) const |
| Apply processing to given buffer. The provided buffer contains exactly frameCount * channelCount samples. The provides samples are scalled according to the current GetScalarValue().
|
|
|
AudioClassID | GetClass () const override |
| Get class ID.
|
|
AudioClassID | GetBaseClass () const override |
| Get base class ID.
|
|
bool | IsInstance (AudioClassID classID) const override |
| Check if this object is instance of given base class.
|
|
Boolean | HasProperty (AudioObjectID objectID, pid_t clientPID, const AudioObjectPropertyAddress *address) const override |
| Check whether given property is present.
|
|
OSStatus | IsPropertySettable (AudioObjectID objectID, pid_t clientPID, const AudioObjectPropertyAddress *address, Boolean *outIsSettable) const override |
| Check whether given property can be changed.
|
|
OSStatus | GetPropertyDataSize (AudioObjectID objectID, pid_t clientPID, const AudioObjectPropertyAddress *address, UInt32 qualifierDataSize, const void *qualifierData, UInt32 *outDataSize) const override |
| Get size of property value in bytes.
|
|
OSStatus | GetPropertyData (AudioObjectID objectID, pid_t clientPID, const AudioObjectPropertyAddress *address, UInt32 qualifierDataSize, const void *qualifierData, UInt32 inDataSize, UInt32 *outDataSize, void *outData) const override |
| Get property value.
|
|
OSStatus | SetPropertyData (AudioObjectID objectID, pid_t clientPID, const AudioObjectPropertyAddress *address, UInt32 qualifierDataSize, const void *qualifierData, UInt32 inDataSize, const void *inData) override |
| Change property value.
|
|
| Object (std::shared_ptr< const Context > context, const char *className="Object", AudioObjectID objectID=kAudioObjectUnknown) |
| Construct object. Class name is used for logging. It should be the name of the derived class. If objectID is kAudioObjectUnknown (zero), allocates new object ID. Otherwise uses given object ID.
|
|
| Object (const Object &)=delete |
|
Object & | operator= (const Object &)=delete |
|
std::shared_ptr< const Context > | GetContext () const |
| Get object context.
|
|
AudioObjectID | GetID () const |
| Get object ID. Returns objectID selected at construction time.
|
|
AudioObjectID | GetOwnerID () const |
| Get object owner. If the object has an owner, returns its ID. Otherwise, returns kAudioObjectUnknown (zero).
|
|
bool | HasOwner () const |
| Check if the object is part of the hierarchy. Returns true if GetOwnerID() is not equal to kAudioObjectUnknown.
|
|
std::vector< AudioObjectID > | GetOwnedObjectIDs (AudioObjectPropertyScope scope=kAudioObjectPropertyScopeGlobal, AudioClassID classID=0) const |
| Get owned objects. Returns the list of objects to which this object is the owner.
|
|
void | AddOwnedObject (std::shared_ptr< Object > object, AudioObjectPropertyScope scope=kAudioObjectPropertyScopeGlobal) |
| Add object to the list of owned objects. Also invokes SetOwner() on the added object.
|
|
void | RemoveOwnedObject (AudioObjectID objectID) |
| Remove object to the list of owned objects. Also invokes SetOwner() on the removed object.
|
|
void | NotifyPropertyChanged (AudioObjectPropertySelector selector, AudioObjectPropertyScope scope=kAudioObjectPropertyScopeGlobal, AudioObjectPropertyElement element=kAudioObjectPropertyElementMain) const |
| Notify HAL that a property was changed. This is automatically called by all setters.
|
|
void | NotifyPropertiesChanged (std::vector< AudioObjectPropertySelector > selectors, AudioObjectPropertyScope scope=kAudioObjectPropertyScopeGlobal, AudioObjectPropertyElement element=kAudioObjectPropertyElementMain) const |
| Notify HAL that some properties were changed. This is automatically called by all setters.
|
|
virtual std::vector< AudioServerPlugInCustomPropertyInfo > | GetCustomProperties () const |
| Get info about registered custom properties. Returns list of properties added using RegisterCustomProperty().
|
|
template<typename ObjectType , typename ValueType > |
void | RegisterCustomProperty (AudioObjectPropertySelector selector, ObjectType &object, GetterMethod< ObjectType, ValueType > getter, SetterMethod< ObjectType, ValueType > setter=nullptr) |
| Register custom property with getter and optional setter.
|
|
template<typename GetterFunc > |
void | RegisterCustomProperty (AudioObjectPropertySelector selector, GetterFunc getter) |
| Register custom property with getter and optional setter.
|
|
void | RegisterCustomProperty (AudioObjectPropertySelector selector, std::function< CFStringRef()> getter, std::function< void(CFStringRef)> setter) |
| Register custom property with getter and optional setter.
|
|
void | RegisterCustomProperty (AudioObjectPropertySelector selector, std::function< CFPropertyListRef()> getter, std::function< void(CFPropertyListRef)> setter) |
| Register custom property with getter and optional setter.
|
|
Volume control object.
Volumes can be represented using three scales:
- raw - integer amplitude amplifier, custom range
- decibels - floating point logarithmic scale, custom range
- scalar - floating point logarithmic scale, range [0; 1]
Decibels and raw scales are linearly related.
The raw scale is intended for computations. The scalar scale is used by macOS for volume sliders.
Default implementation of VolumeControl stores volumes in the raw scale and convert it on fly to/from other scales when requested.
Volume control does not affect I/O by its own. It just stores the volume and provides ApplyProcessing() method which modifies given samples according to the volume.
You can attach VolumeControl to Stream using Stream::AttachVolumeControl() method, and then stream will use it to process samples passed to stream. Alternatively, you can invoke VolumeControls manually the way you need.
Definition at line 64 of file VolumeControl.hpp.