将Mac OS X App移植到iPhone

时间:2011-11-21 16:20:31

标签: c ios macos core-audio

我有一个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;

我认为音频会话服务在这种情况下会很有用,但我找不到让我在参考文件中获得缓冲区大小的函数。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Audio Queue API,则使用AudioQueueAllocateBuffer()提供您确定的大小的缓冲区。 (请注意,这些AQ缓冲区可能会从不同且不透明的大小的音频驱动程序缓冲区中填充。)

如果您正在使用RemoteIO音频单元,操作系统会决定实际的缓冲区大小,操作系统可以在运行时更改缓冲区大小,并且您的音频回调必须足够灵活,以便处​​理给定的缓冲区大小,即使大小从回调变为回调。

对于RemoteIO,您可以使用以下命令请求首选缓冲区大小:AudioSessionSetProperty with kAudioSessionProperty_PreferredHardwareIOBufferDuration。您必须将大小转换为等效的持续时间(给定您的采样率等)但iOS可能会或可能不会尊重此请求。