我有一个Mac OS X的应用程序。我想知道如何移植iPhone的下一块代码:
AudioObjectPropertyAddress addr;
addr.mSelector = kAudioDevicePropertyBufferFrameSize;
addr.mScope = kAudioDevicePropertyScopeOutput;
addr.mElement = kAudioObjectPropertyElementWildcard;
uint32_t size = sizeof(uint32_t);
uint32_t buff_size = 0;
if(AudioObjectGetPropertyData(devId, &addr, 0, 0,
&size, &buff_size) == noErr)
return buff_size;
我认为音频会话服务在这种情况下会很有用,但我找不到让我在参考文件中获得缓冲区大小的函数。
答案 0 :(得分:1)
如果您使用的是Audio Queue API,则使用AudioQueueAllocateBuffer()提供您确定的大小的缓冲区。 (请注意,这些AQ缓冲区可能会从不同且不透明的大小的音频驱动程序缓冲区中填充。)
如果您正在使用RemoteIO音频单元,操作系统会决定实际的缓冲区大小,操作系统可以在运行时更改缓冲区大小,并且您的音频回调必须足够灵活,以便处理给定的缓冲区大小,即使大小从回调变为回调。
对于RemoteIO,您可以使用以下命令请求首选缓冲区大小:AudioSessionSetProperty with kAudioSessionProperty_PreferredHardwareIOBufferDuration。您必须将大小转换为等效的持续时间(给定您的采样率等)但iOS可能会或可能不会尊重此请求。