2012-01-31 15 views
6

En la documentación iOS 5.0 se indica que el tipo de datos de audio canónica es de tipo int con signo de 16 bits (link):¿Cuál es el audio de tipo de datos de la muestra canónica en IOS 5

El audio Tipo de muestra de datos canónico para entrada y salida.

typedef SInt16 AudioSampleType;

Discusión

El tipo de muestra de audio canónica para entrada y salida en iPhone OS es PCM lineal con las muestras de números enteros de 16 bits.

Sin embargo, si right-click "saltar a la definición" en la AudioSampleType veo la siguiente definición, en CoreAudioTypes.h:

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

y otra vez cuando salto-a-def para CA_PREFER_FIXED_POINT veo:

#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 

Al comprobar en mi código en tiempo de ejecución, veo que CA_PREFER_FIXED_POINT se define como 1, tanto en el simulador como en mi iPod.

lo tanto, mi pregunta:

  • Qué es del tipo canónico? ¿Es siempreSInt16 en el dispositivo?
  • ¿En qué caso la tercera línea anterior se evalúa como "verdadera"? Quiero decir, ¿qué dispositivo ejecuta iPhone OS y usa uno de los CPU enumerados?
  • ¿Existe un caso de uso donde debería volver a definir CA_PREFER_FIXED_POINT en 0 (cuando se programa para iPhone)?

Respuesta

7

leer el contenido del enlace, y esta línea en los encabezados de nuevo:

#define kAudioUnitSampleFractionBits 24 

El tipo canónico de audio de entrada y salida es equivalente a Sint16.

El tipo canónico para otro procesamiento de audio, como el nuevo filtro de iOS 5 Audio Units, es 8.24 firmado de punto fijo.

Si utiliza su propio código DSP para el procesamiento de audio iOS casi en tiempo real, compárelo con los diferentes tipos, como en algunos de los núcleos ARM más nuevos, las secuencias de flotantes de 32 bits son a menudo más rápidas que utilizando cualquiera de por encima de los tipos canónicos, y codificados en código ASM NEON incluso más rápido.

3

En su Core Audio Essentials de Apple aclara sobre canónicas Formatos de datos de audio:

canónicas Formatos de datos de audio Dependiendo de la plataforma, Core Audio ha uno o dos formatos de datos “canónicos” de audio en el sentido de que éstos formatos pueden ser:

  • Requerido como formato intermedio en las conversiones
  • El formato f o el que un servicio de Core Audio está optimizado
  • un defecto, o asumido, formato, cuando ni de otra forma especifica un ASBD

Los formatos canónicos en Core Audio son los siguientes:

  • entrada y salida PCM lineal iOS con las muestras de números enteros de 16 bits
  • unidades de audio ios y otro procesamiento de audio PCM lineal Noninterleaved con muestras
  • entrada Mac y salida de punto fijo 8,24 bits PCM lineal con muestras de punto flotante de 32 bits
  • unidades de audio de Mac y otra de procesamiento de audio PCM lineal Noninterleaved con muestras de punto flotante de 32 bits

Pero: Si usted tiene una mirada hacia el CoreAudioTypes.h en iOS 8 encontrará un debate sobre eso:

Las banderas "canónicas" están en desuso. CA_PREFER_FIXED_POINT es desaconsejado porque el rendimiento de coma flotante en iOS es tal que el punto fijo ya no es realmente preferido. Todos los suministrados por Apple AudioUnits admiten punto flotante. Reemplazo debe hacerse con cuidadosa consideración del formato que se especifica o se espera, pero a menudo kAudioFormatFlagsCanonical se puede sustituir por kAudioFormatFlagsNativeFloatPacked y kAudioFormatFlagsAudioUnitCanonical con kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved.

Cuestiones relacionadas