2011-11-21 114 views
0

我的Mac OS X的应用程序,我想知道如何端口的代码下一块用于iPhone:我端口的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

请给出有关该问题的更多信息。哪部分代码不适用于iPhone版本?你是否得到任何编译器错误? – jrturton

回答

1

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

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

对于RemoteIO,您可以使用以下方法请求首选缓冲区大小:AudioSessionSetProperty with kAudioSessionProperty_PreferredHardwareIOBufferDuration。你必须将大小转换为等效的时间(根据你的采样率等)。但是这个请求可能会或不会被iOS所承认。

相关问题