2009-03-10 16 views
7

Tengo actualmente mi salida de audio en la configuración de iPhone como esto:iPhone nativo formato de audio

AudioStreamBasicDescription audioFormat; 

audioFormat.mSampleRate = 48000; 

audioFormat.mFormatID = kAudioFormatLinearPCM; 

audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 

audioFormat.mFramesPerPacket = 1; 

audioFormat.mChannelsPerFrame = 2; 

audioFormat.mBitsPerChannel = 16; 

audioFormat.mBytesPerPacket = 4; 

audioFormat.mBytesPerFrame = 4; 

Sin embargo, cuando examino mis cifras de rendimiento a través de tiburón: Viendo a funciones tales como: SRC_Convert_table_i32_scalar_stereo

toma un buen pedazo de tiempo.

Esto me hizo pensar: ¿cuál es el formato de salida ideal y sugerido para el iPhone? El que requiere tan poco trabajo para que el dispositivo juegue.

+0

Cómo ¿Estás usando Shark con el iPhone? ¿Estás seguro de que no estás perfilando el simulador? RF –

+0

No, estoy perfilando el dispositivo. Aquí hay una página que le dice cómo configurar el tiburón en los iPhones de perfil: https://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/SharkUserGuide/Selecting Execution to SampleorTrace/chapter_6_section_9.html –

Respuesta

11

Shark funciona con el iPhone. Puede habilitar el perfil de iPhone seleccionando "Muestreo> Perfiles de red/iPhone ..." en el menú.

Definitivamente intente utilizar una frecuencia de muestreo de 44100 Hz. Con 48000 veo la misma función que publicado aparece en los callstacks - hay tal función aparece cuando se utiliza 44100. El formato de audio canónica para unidades de audio en el iPhone es no intercalada 8,24 PCM lineal:

streamFormat.mFormatID   = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags  = 
        kAudioFormatFlagIsSignedInteger 
       | kAudioFormatFlagsNativeEndian 
       | kLinearPCMFormatFlagIsNonInterleaved 
       | (24 << kLinearPCMFormatFlagsSampleFractionShift); 
streamFormat.mSampleRate  = mixing_rate; 
streamFormat.mBitsPerChannel = 32; 
streamFormat.mChannelsPerFrame = 2; 
streamFormat.mFramesPerPacket = 1; 
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel/8); 
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame * 
           streamFormat.mFramesPerPacket; 
3

De iphone dev centre (requiere login) los codecs de hardware suppoorted son

códecs de hardware iPhone Audio

aplicaciones iPhone OS pueden utilizar una amplia gama de formatos de datos de audio, como se describe en el Siguiente sección. Algunos de estos formatos usan codificación y decodificación basadas en software . Puede reproducir simultáneamente varios sonidos en estos formatos. Además, su aplicación y una aplicación de fondo (en particular, la aplicación iPod ) pueden reproducir simultáneamente sonidos en estos formatos.

Otros formatos de audio de SO del iPhone emplean un códec de hardware para su reproducción. Estos formatos son :

  • AAC
  • ALAC (Apple Lossless)
  • MP3
+0

Estoy menos interesado en los diferentes formatos que el iphone puede reproducir, más de lo que es el formato base de la salida. De esa forma puedo hacer coincidir mi tipo de salida y requerirá menos ciclos para que el iPhone convierta. –

+1

Hubiera supuesto que al utilizar un códec de hardware usaría menos ciclos de CPU ... podría estar equivocado, pruebe y díganos cómo va – hhafez

1

48000 es un formato extraño para el audio en general. Si bien es marginal (e imperceptiblemente) mejor que el estándar de CD 44.1Khz, no vale la pena el tamaño.

¿Hay alguna razón de peso en su aplicación para usar sonido estéreo de alta calidad? En otras palabras, ¿es probable que la aplicación se reproduzca en parlantes o buenos auriculares?

El formato LinearPCM es hardware nativo, por lo que debe ser óptimo. (Sin descompresión para violín). Por lo tanto, esa llamada puede ser una disminución de 44.1 Kb.

Cuestiones relacionadas