2012-01-31 2 views
6

Nella documentazione iOS 5.0 si afferma che il tipo di dati audio canonico è a 16 bit int firmato (link):Qual è l'audio tipo di dati di esempio canonico in iOS 5

L'audio tipo di campione di dati canonico per ingresso e uscita.

typedef SInt16 AudioSampleType;

Discussione

Il tipo campione audio canonica per l'input e l'output in iPhone OS è PCM lineare con campioni interi a 16 bit.

Tuttavia, se right-click "Vai a definizione" su AudioSampleType vedo la seguente definizione, in CoreAudioTypes.h:

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

e di nuovo quando jump-to-def per CA_PREFER_FIXED_POINT vedo:

#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 

Controllando il mio codice in fase di esecuzione, vedo che CA_PREFER_FIXED_POINT è definito come 1, sia sul simulatore che sul mio iPod.

Quindi, le mie domande:

  • Che è tipo canonica? È sempreSInt16 sul dispositivo?
  • In quale caso la terza riga sopra è "vera"? Voglio dire, quale dispositivo esegue il SO iPhone e usa una delle CPU elencate?
  • C'è un caso d'uso in cui avrei dovuto ridefinire CA_PREFER_FIXED_POINT-0 (in fase di programmazione per iPhone)?

risposta

7

leggere il contenuto del collegamento, e questa linea nelle intestazioni di nuovo:

#define kAudioUnitSampleFractionBits 24 

Il tipo canonica per l'audio in ingresso e uscita è equivalente a SInt16.

Il tipo canonico per altre elaborazioni audio, come le nuove unità audio con filtro iOS 5, ha un punto fisso firmato 8.24.

Se si esegue il proprio codice DSP per l'elaborazione audio iOS quasi in tempo reale, confrontarlo con i diversi tipi, come su alcuni dei più recenti core ARM, le sequenze di float a 32 bit sono spesso più veloci rispetto all'utilizzo di uno dei due sopra i tipi canonici e codificati nel codice NEON asm ancora più velocemente.

3

Nella sua Core Audio Essentials di Apple chiarisce su canonici formati di dati audio:

formati di dati audio canoniche A seconda della piattaforma, Core Audio ha uno o due formati “canonici” audio dati, nel senso che questi formati possono essere:

  • richiesto come formato intermedio conversioni
  • Il formato f o che un servizio di Core Audio è ottimizzato
  • Un default, o presunti tali, il formato, quando non altrimenti specificato un ASBD

I formati canonici a Core Audio sono i seguenti:

  • iOS ingresso e uscita PCM lineare con campioni interi a 16 bit
  • unità audio iOS e altre elaborazione audio Noninterleaved PCM lineare con campioni
  • ingresso Mac e uscita a virgola fissa 8.24 bit PCM lineare con i campioni in virgola mobile a 32 bit
  • unità audio Mac e altri elaborazione audio Noninterleaved PCM lineare con i campioni in virgola mobile a 32 bit

Ma: Se si dispone di uno sguardo al CoreAudioTypes.h in iOS 8 troverai una discussione al riguardo:

I flag "canonici" sono deprecati. CA_PREFER_FIXED_POINT è sconsigliato perché le prestazioni in virgola mobile su iOS sono tali che il punto fisso non è più realmente preferito. Supporto in virgola mobile supportato da Apple AudioUnits. La sostituzione deve essere fatto con la precisazione o previsto un attento esame del formato, ma spesso kAudioFormatFlagsCanonical può essere sostituito con kAudioFormatFlagsNativeFloatPacked, e kAudioFormatFlagsAudioUnitCanonical con kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved.

Problemi correlati