Изменение объема аудиоустройств
Q: Как я изменяю объем аудиоустройства?
A: Для изменения объема аудио аппаратных средств, необходимо сначала получить AudioDevice и определить, имеет ли устройство регулятор громкости, который устанавливаем. Можно получить устройство вывода по умолчанию или системное устройство вывода при помощи метода AudioHardwareGetProperty и константы kAudioHardwarePropertyDefaultOutputDevice и kAudioHardwarePropertyDefaultSystemOutputDevice .
Перечисление 1 , Получающее устройство вывода по умолчанию
UInt32 size; |
AudioDeviceID outputDevice; |
AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, |
&size, |
&outputDevice); |
После получения устройства необходимо проверить, имеет ли это регулятор громкости и если это свойство writeable.
Перечисление 2 , Получающее функции устройств
bool CAAudioHardwareDevice::HasProperty( |
UInt32 inChannel, |
CAAudioHardwareDeviceSectionID inSection, |
AudioHardwarePropertyID inPropertyID) const |
{ |
OSStatus theError = AudioDeviceGetPropertyInfo(mAudioDeviceID, |
inChannel, inSection, inPropertyID, NULL, NULL); |
return theError == 0; |
} |
bool CAAudioHardwareDevice::PropertyIsSettable( |
UInt32 inChannel, |
CAAudioHardwareDeviceSectionID inSection, |
AudioHardwarePropertyID inPropertyID) const |
{ |
Boolean isWritable = false; |
OSStatus theError = AudioDeviceGetPropertyInfo(mAudioDeviceID, inChannel, |
inSection, inPropertyID, NULL, &isWritable); |
ThrowIfError(theError, CAException(theError), |
"CAAudioHardwareDevice::PropertyIsSettable: got " |
"an error getting info about a property"); |
return isWritable != 0; |
} |
bool CAAudioHardwareDevice::HasVolumeControl( |
UInt32 inChannel, |
CAAudioHardwareDeviceSectionID inSection) const |
{ |
return HasProperty(inChannel, inSection, kAudioDevicePropertyVolumeScalar); |
} |
bool CAAudioHardwareDevice::VolumeControlIsSettable( |
UInt32 inChannel, |
CAAudioHardwareDeviceSectionID inSection) const |
{ |
return PropertyIsSettable(inChannel, inSection, kAudioDevicePropertyVolumeScalar); |
} |
Тогда можно регулировать громкость устройства при помощи константы kAudioDevicePropertyVolumeScalar в AudioDeviceSetProperty. Необходимо указать значение Float32 между 0 и 1, который будет масштабировать объем устройства.
Перечисление 3 , Регулирующее громкость на основном канале
AudioDeviceSetProperty(theDevice, |
NULL, //time stamp not needed |
0, //channel 0 is master channel |
false, //for an output device |
kAudioDevicePropertyVolumeScalar, |
sizeof(Float32), |
&theValue ); |
Ссылки
CAAudioHardwareDevice-/Developer/Examples/CoreAudio/PublicUtility/CAAudioHardwareDevice
PublicUtility-/Developer/Examples/CoreAudio/PublicUtility/
История версии документа
| Дата | Примечания |
|---|---|
| 04.04.2013 | Передовая статья |
| 02.05.2006 | Новый документ, демонстрирующий регуляторы громкости для аудиоустройств |