В документации iOS 5.0 указано, что канонический тип аудиоданных имеет 16-разрядное целое число со знаком ( ссылка ):
Тип выборки канонических аудиоданных для ввода и вывода.
typedef SInt16 AudioSampleType;
Обсуждение
Канонический тип аудиосэмпла для ввода и вывода в iPhone OS
линейный PCM с 16-разрядными целочисленными выборками.
Однако, если я щелкну правой кнопкой мыши «перейти к определению» на 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
и снова при переходе на def для 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
определено как 1, как на симуляторе, так и на моем iPod.
Итак, мои вопросы:
- Что является каноническим типом? Это всегда
SInt16
на устройстве?
- В каком случае 3-я строка выше оценивается как 'true'? Я имею в виду, какое устройство работает под управлением iPhone OS и использует один из перечисленных процессоров?
- Есть ли случай, когда мне нужно переопределить
CA_PREFER_FIXED_POINT
в 0 (при программировании для iPhone)?