目前我正在寻找方法来确定音频设备是否可以进行音量配置。
我尝试使用kAudioDevicePropertyVolumeRangeDecibels属性获取范围,如果最小值和最大值等于确认为不可更改的音量。但不幸的是,我根本无法获得这个价值。
AudioObjectPropertyAddress addr;
addr.mSelector = kAudioDevicePropertyVolumeRangeDecibels;
addr.mScope = kAudioDevicePropertyScopeOutput;
addr.mElement = kAudioDevicePropertyScopeOutput;
UInt32 size;
AudioValueRange range;
OSStatus status = AudioObjectGetPropertyDataSize(self.audioDeviceID, &addr, 0, NULL, &size);
if (status != noErr)
{
NSLog(@"error during size retrieval");
}else {
status = AudioObjectGetPropertyData(self.audioDeviceID, &addr, 0, NULL, &size, &range);
if (status != noErr)
{
NSLog(@"error during value retrieval");
}
}
在尺寸检索过程中我总是遇到错误。 (正确检索所有其他数据,如音量,通道数等)。
感谢任何解决方案。
答案 0 :(得分:1)
我通过检查设备是否支持kAudioDevicePropertyVolumeScalar
属性来完成此操作。有些设备(但不是很多)支持主通道,因此请先检查kAudioObjectPropertyElementMaster
。如果失败,请检查您要使用的各个频道:
AudioObjectPropertyAddress propertyAddress = {
kAudioDevicePropertyVolumeScalar,
kAudioDevicePropertyScopeOutput,
kAudioObjectPropertyElementMaster
};
if(AudioObjectHasProperty(deviceID, &propertyAddress))
// YES
// Assume stereoChannels is a 2-deep array of the device's preferred stereo channels
propertyAddress.mElement = stereoChannels[0];
if(!AudioObjectHasProperty(deviceID, &propertyAddress))
// NO
propertyAddress.mElement = stereoChannels[1];
if(!AudioObjectHasProperty(deviceID, &propertyAddress))
// NO
// YES