2012-01-31 13 views
6

W dokumentacji iOS 5.0 jest powiedziane, że kanoniczny dźwięku typ danych to 16-bitowa int (link):Jaki jest kanoniczny dźwięku próbka typ danych w iOS 5

Kanoniczna dźwięku typ próbki danych dla wejście i wyjście.

typedef SInt16 AudioSampleType;

Dyskusja

Kanoniczna dźwięku typ próbki dla wejścia i wyjścia w iPhone OS jest liniowy PCM 16-bitowych próbek całkowitych.

Jednak jeśli mam rację kliknij "skakać do definicji" na AudioSampleType widzę następującą definicję w CoreAudioTypes.h:

#if !CA_PREFER_FIXED_POINT 
typedef Float32  AudioSampleType; 
typedef Float32  AudioUnitSampleType; 
#else 
typedef SInt16  AudioSampleType; 
typedef SInt32  AudioUnitSampleType; 
#define kAudioUnitSampleFractionBits 24 
#endif 

i ponownie, gdy skok do def dla CA_PREFER_FIXED_POINT widzę:

#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 

Sprawdzanie mojego kodu w czasie wykonywania, widzę, że CA_PREFER_FIXED_POINT jest zdefiniowany jako 1, zarówno na symulatorze i na moim iPodzie.

Więc moje pytania:

  • Co jest typ kanoniczne? Czy na urządzeniu jest zawsze zawszeSInt16?
  • W jakim przypadku trzecia linijka powyżej oznacza "prawda"? Chodzi mi o to, które urządzenie uruchamia iPhone OS i używa jednego z wymienionych procesorów?
  • Czy istnieje przypadek, w którym powinienem ponownie zdefiniować CA_PREFER_FIXED_POINT na 0 (podczas programowania dla iPhone'a)?

Odpowiedz

7

Czytaj zawartość link i ten wiersz w nagłówkach ponownie:

#define kAudioUnitSampleFractionBits 24 

Typ kanoniczny audio wejściowego i wyjściu jest równoważna SInt16.

Kanoniczny typ dla innych procesów przetwarzania dźwięku, takich jak nowe jednostki audio filtru iOS 5, wynosi 8,24 podpisanego punktu stałego.

Jeśli tworzysz własny kod DSP do przetwarzania dźwięku w czasie prawie iOS w czasie rzeczywistym, porównuj go z różnymi typami, tak jak w przypadku niektórych najnowszych rdzeni ARM, sekwencje 32-bitowych elementów pływających są często szybsze niż przy użyciu dowolnego z tych elementów. powyżej typów kanonicznych i kodowanych w kodzie NEON NEONE jeszcze szybciej.

3

W Core Audio Essentials Apple, wyjaśnia o kanoniczne audio formatów danych:

kanoniczne audio formatów danych w zależności od platformy Core Audio jeden lub dwa „kanonicznych” formatów danych audio, w tym sensie, że te formaty mogą być:

  • wymagane w formie pośredniej w konwersji
  • format f lub które usługa w Core Audio jest zoptymalizowany
  • domyślny, lub zakłada, format, gdy nie inaczej określić ASBD

kanoniczne formaty w Core Audio są następujące:

  • iOS wejście i wyjście liniowe PCM z 16-bitowych próbek całkowitą
  • iOS urządzenia audio i inne przetwarzanie dźwięku Noninterleaved liniowy PCM z 8,24-bitowych próbek stałoprzecinkowych
  • wejścia i wyjścia Mac Linear PCM z 32-bitowych próbek zmiennoprzecinkowych
  • radioodtwarzacze Mac i inne przetwarzanie dźwięku Noninterleaved PCM liniowy z 32-bitowych próbek zmiennoprzecinkowych

Ale: Jeśli masz spojrzenie w CoreAudioTypes.h w iOS 8 znajdziesz dyskusję na ten temat:

Flagi "kanoniczne" są przestarzałe. CA_PREFER_FIXED_POINT jest odradzane, ponieważ wydajność zmiennoprzecinkowa w systemie iOS jest taka, że ​​stały punkt nie jest już tak naprawdę preferowany. Wszystkie dostarczone przez Apple AudioUnits obsługują zmiennoprzecinkowe. Wymiana powinna odbywać się z rozwagą formatu są wymienione ani spodziewane, ale często kAudioFormatFlagsCanonical można zastąpić kAudioFormatFlagsNativeFloatPacked i kAudioFormatFlagsAudioUnitCanonical z kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved.