kAudioDevicePropertyNominalSampleRate 的 AudioObjectAddPropertyListener
AudioObjectAddPropertyListener for kAudioDevicePropertyNominalSampleRate
我正在使用启用输入的 AUHAL 音频单元接收来自我的内置 imac 麦克风的输入。这行得通(在我的回调中,我将样本写入文件并产生了完美的录音)。
现在,因为输入 AUHAL 的采样率可能与其连接的设备不同,我希望我的音频单元对设备上的采样率变化做出反应.为了测试这一点,我在 Audio Midi Setup 中更改了麦克风的采样率(实际上,AUHAL 崩溃了)。
我已经使用 AudioObjectAddPropertyListener
和 kAudioDevicePropertyNominalSampleRate
注册了一个回调,但它从未被调用过。我的断点不会中断,并且 "callback"
永远不会出现在我的控制台上。有人可以指出我做错了什么吗?我用错范围了吗?选择器错误?
将选择器更改为 kAudioDevicePropertyVolumeScalar
会触发回调(当然是在更改音量时),所以我假设设置回调本身工作正常。
static OSStatus deviceSampleRateChanged(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress* inAddresses, void* __nullable inClientData)
{
cout << "callback" << endl;
return noErr;
}
AudioObjectPropertyAddress address;
address.mSelector = kAudioDevicePropertyNominalSampleRate;
address.mScope = kAudioObjectPropertyScopeInput;
address.mElement = kAudioObjectPropertyElementMaster;
AudioObjectAddPropertyListener(unit, &address, &deviceSampleRateChanged, this);
kAudioDevicePropertyNominalSampleRate
和 kAudioObjectPropertyScopeGlobal
的组合将使回调正常工作。不过,这个选择器 (CoreAudio/AudioHardware.h) 的文档没有告诉我要使用什么范围。如果有人为此找到 proof/reason 的来源,请随时编辑。
情况也令人困惑,因为用 kAudioDevicePropertyNominalSampleRate
调用 AudioObjectSetPropertyData()
并且 kAudioObjectPropertyScopeInput
或 kAudioObjectPropertyScopeOutput
将 也 导致成功的采样率切换(有人可能会认为这是错误行为)。
我正在使用启用输入的 AUHAL 音频单元接收来自我的内置 imac 麦克风的输入。这行得通(在我的回调中,我将样本写入文件并产生了完美的录音)。
现在,因为输入 AUHAL 的采样率可能与其连接的设备不同,我希望我的音频单元对设备上的采样率变化做出反应.为了测试这一点,我在 Audio Midi Setup 中更改了麦克风的采样率(实际上,AUHAL 崩溃了)。
我已经使用 AudioObjectAddPropertyListener
和 kAudioDevicePropertyNominalSampleRate
注册了一个回调,但它从未被调用过。我的断点不会中断,并且 "callback"
永远不会出现在我的控制台上。有人可以指出我做错了什么吗?我用错范围了吗?选择器错误?
将选择器更改为 kAudioDevicePropertyVolumeScalar
会触发回调(当然是在更改音量时),所以我假设设置回调本身工作正常。
static OSStatus deviceSampleRateChanged(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress* inAddresses, void* __nullable inClientData)
{
cout << "callback" << endl;
return noErr;
}
AudioObjectPropertyAddress address;
address.mSelector = kAudioDevicePropertyNominalSampleRate;
address.mScope = kAudioObjectPropertyScopeInput;
address.mElement = kAudioObjectPropertyElementMaster;
AudioObjectAddPropertyListener(unit, &address, &deviceSampleRateChanged, this);
kAudioDevicePropertyNominalSampleRate
和 kAudioObjectPropertyScopeGlobal
的组合将使回调正常工作。不过,这个选择器 (CoreAudio/AudioHardware.h) 的文档没有告诉我要使用什么范围。如果有人为此找到 proof/reason 的来源,请随时编辑。
情况也令人困惑,因为用 kAudioDevicePropertyNominalSampleRate
调用 AudioObjectSetPropertyData()
并且 kAudioObjectPropertyScopeInput
或 kAudioObjectPropertyScopeOutput
将 也 导致成功的采样率切换(有人可能会认为这是错误行为)。