iOS 5中的规范音频样本数据类型是什么

Ita*_*atz 6 iphone audio core-audio ios

在iOS 5.0文档中,声明规范音频数据类型是16位符号int(链接):

用于输入和输出的规范音频数据样本类型.

typedef SInt16 AudioSampleType;

讨论

iPhone OS中用于输入和输出的规范音频样本类型是具有16位整数样本的线性PCM.

但是,如果我右键单击"跳转到定义",AudioSampleType我会看到以下定义CoreAudioTypes.h:

#if !CA_PREFER_FIXED_POINT
typedef Float32     AudioSampleType;
typedef Float32     AudioUnitSampleType;
#else
typedef SInt16      AudioSampleType;
typedef SInt32      AudioUnitSampleType;
#define kAudioUnitSampleFractionBits 24
#endif
Run Code Online (Sandbox Code Playgroud)

CA_PREFER_FIXED_POINT我看到跳转到def时:

#if !defined(CA_PREFER_FIXED_POINT)
    #if TARGET_OS_IPHONE
        #if (TARGET_CPU_X86 || TARGET_CPU_X86_64 || TARGET_CPU_PPC || TARGET_CPU_PPC64) && !TARGET_IPHONE_SIMULATOR
            #define CA_PREFER_FIXED_POINT 0
        #else
            #define CA_PREFER_FIXED_POINT 1
        #endif
    #else
        #define CA_PREFER_FIXED_POINT 0
    #endif
#endif
Run Code Online (Sandbox Code Playgroud)

在运行时检查我的代码,我发现CA_PREFER_FIXED_POINT在模拟器和iPod上都定义为1.

所以,我的问题:

  • 什么规范类型?它总是 SInt16在设备上吗?
  • 在什么情况下,上面的第3行评估为'true'?我的意思是,哪个设备运行iPhone OS并使用列出的CPU之一?
  • 是否有一个用例我应该重新定义CA_PREFER_FIXED_POINT为0(为iPhone编程时)?

hot*_*aw2 7

阅读链接的内容,然后再次在标题中输入以下内容:

#define kAudioUnitSampleFractionBits 24
Run Code Online (Sandbox Code Playgroud)

音频输入输出的规范类型等同于SInt16.

其他音频处理的规范类型,例如新的iOS 5过滤器音频单元,是8.24签名的定点.

如果使用不同类型做了近实时的iOS音频处理,基准它自己的DSP代码,如在一些最新的ARM内核的32位浮点序列往往比使用上述任何一种典型类型的快,并以更快的速度编码NEON asm代码.