【发布时间】:2012-02-23 14:00:39
【问题描述】:
在 iOS 5.0 文档中声明规范音频数据类型是 16 位有符号整数 (link):
输入和输出的规范音频数据样本类型。
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
当我看到 CA_PREFER_FIXED_POINT 跳转到定义时再次:
#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
在运行时检查我的代码,我发现CA_PREFER_FIXED_POINT 在模拟器和我的 iPod 上都被定义为 1。
所以,我的问题:
- 什么是规范类型?设备上是否总是
SInt16? - 在什么情况下上面的第 3 行评估为“真”?我的意思是,哪个设备运行 iPhone 操作系统并使用列出的 CPU 之一?
- 是否存在我应该将
CA_PREFER_FIXED_POINT重新定义为 0 的用例(为 iPhone 编程时)?
【问题讨论】:
标签: iphone ios audio core-audio