Каков тип данных канонического аудиосэмпла в iOS 5? - PullRequest
6 голосов
/ 01 февраля 2012

В документации 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)?

Ответы [ 2 ]

7 голосов
/ 01 февраля 2012

Прочитайте содержимое ссылки, и снова эту строку в ваших заголовках:

#define kAudioUnitSampleFractionBits 24

Канонический тип для аудио вход и выход эквивалентен SInt16.

Канонический тип для другой обработки звука, такой как новый Аудиоустройства фильтра iOS 5, имеет фиксированную точку 8,24 со знаком.

Если вы выполняете свой собственный код DSP для обработки звука практически в реальном времени в iOS, сравните его с различными типами, как на некоторых новейших ядрах ARM, последовательности 32-битных операций с плавающей запятой часто выполняются быстрее, чем при использовании любого из вышеперечисленных канонические типы и закодированы в коде NEON ASM еще быстрее.

3 голосов
/ 28 апреля 2014

В Core Audio Essentials Apple уточняет Канонические форматы аудиоданных :

Канонические форматы аудиоданных В зависимости от платформы, Core Audio имеет одинили два «канонических» формата аудиоданных в том смысле, что эти форматы могут быть:

  • Требуется в качестве промежуточного формата в преобразованиях
  • Формат, для которого оптимизируется служба в Core Audio
  • Формат по умолчанию или предполагаемый формат, когда вы не указываете ASBD

Канонические форматы в Core Audio следующие:

  • Вход и выход iOS Linear PCM с 16-разрядными целочисленными сэмплами
  • Аудиоустройства iOS и другая обработка звука Линейный PCM с 8,24-битной дискретизацией с фиксированной запятой
  • Вход и выход Mac Linear PCM с 32сэмплов с плавающей запятой
  • аудиоустройства Mac и другая обработка звука Линейный PCM без чередования с 32-битными сэмплами с плавающей запятой

Но: Если вы посмотрите на CoreAudioTypes.h в iOS 8, вы найдете обсуждение этого:

«Канонические» флаги устарели.CA_PREFER_FIXED_POINT не рекомендуется, потому что производительность с плавающей точкой на iOS такова, что фиксированная точка больше не является действительно предпочтительной.Все поставляемые Apple AudioUnits поддерживают с плавающей запятой.Замена должна выполняться с тщательным учетом указанного или ожидаемого формата, но часто kAudioFormatFlagsCanonical можно заменить на kAudioFormatFlagsNativeFloatPacked, а kAudioFormatFlagsAudioUnitCanonical на kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved.

...