0

現時点では、オーディオ デバイスの音量を設定できるかどうかを調べる方法を探しています。

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");
    }
}

サイズの取得中に常にエラーが発生します。(音量、チャンネル数などの他のすべてのデータは正しく取得されます)。

解決策をありがとう。

4

1 に答える 1

2

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
于 2013-10-11T00:24:35.760 に答える