Có hai tùy chọn có sẵn. Bước đầu tiên là xác định thiết bị nào bạn muốn và nhận ID của thiết bị đó. Giả sử các thiết bị đầu ra mặc định, mã sẽ giống như thế:
AudioObjectPropertyAddress propertyAddress = {
kAudioHardwarePropertyDefaultOutputDevice,
kAudioObjectPropertyScopeGlobal,
kAudioObjectPropertyElementMaster
};
AudioDeviceID deviceID;
UInt32 dataSize = sizeof(deviceID);
OSStatus result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, &dataSize, &deviceID);
if(kAudioHardwareNoError != result)
// Handle the error
Tiếp theo, bạn có thể sử dụng kAudioHardwareServiceDeviceProperty_VirtualMasterVolume
bất động sản để có được âm lượng tổng thể ảo của thiết bị:
AudioObjectPropertyAddress propertyAddress = {
kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,
kAudioDevicePropertyScopeOutput,
kAudioObjectPropertyElementMaster
};
if(!AudioHardwareServiceHasProperty(deviceID, &propertyAddress))
// An error occurred
Float32 volume;
UInt32 dataSize = sizeof(volume);
OSStatus result = AudioHardwareServiceGetPropertyData(deviceID, &propertyAddress, 0, NULL, &dataSize, &volume);
if(kAudioHardwareNoError != result)
// An error occurred
Ngoài ra, bạn có thể sử dụng kAudioDevicePropertyVolumeScalar
để tải âm lượng cho một kênh cụ thể:
UInt32 channel = 1; // Channel 0 is master, if available
AudioObjectPropertyAddress propertyAddress = {
kAudioDevicePropertyVolumeScalar,
kAudioDevicePropertyScopeOutput,
channel
};
if(!AudioObjectHasProperty(deviceID, &propertyAddress))
// An error occurred
Float32 volume;
UInt32 dataSize = sizeof(volume);
OSStatus result = AudioObjectGetPropertyData(deviceID, &propertyAddress, 0, NULL, &dataSize, &volume);
if(kAudioHardwareNoError != result)
// An error occurred
Sự khác biệt giữa hai kênh được giải thích trong tài liệu của Apple:
kAudioHardwareServiceDeviceProperty_VirtualMasterVolume
Một giá trị float32 đại diện cho giá trị của điều khiển âm lượng. Phạm vi cho giá trị của thuộc tính này là 0.0 (im lặng) đến 1.0 (đầy đủ cấp). Ảnh hưởng của thuộc tính này phụ thuộc vào thiết bị phần cứng được kết hợp với đối tượng âm thanh HAL. Nếu thiết bị có điều khiển âm lượng chính , thuộc tính này sẽ kiểm soát nó. Nếu thiết bị có các điều khiển âm lượng kênh riêng lẻ , thì thuộc tính này áp dụng cho được xác định bởi bố cục đa kênh ưa thích của thiết bị hoặc cặp stereo ưa thích nếu thiết bị chỉ có âm thanh nổi. Điều khiển này duy trì sự cân bằng tương đối giữa các kênh mà nó ảnh hưởng.
Vì vậy, có thể khó xác định chính xác khối lượng thiết bị là gì, đặc biệt đối với các thiết bị đa kênh có bản đồ kênh không chuẩn.
Không có một "mức âm lượng hiện tại". Có một thiết bị cho mỗi thiết bị, thường là một * mỗi kênh * trên thiết bị và có hai thiết bị meta (ít nhất là cho đầu ra): “thiết bị đầu ra mặc định” (đối với hầu hết đầu ra âm thanh) và “thiết bị đầu ra cảnh báo” (đối với âm thanh cảnh báo, âm thanh giao diện, v.v.). –