2012-01-29 9 views
5

Estoy intentando utilizar un AU de filtro de paso bajo. Sigo recibiendo un error kAudioUnitErr_FormatNotSupported (-10868) al configurar el formato de flujo en la unidad de filtro, pero si solo uso la unidad Remote IO no hay ningún error.Qué formato de secuencia deben usar las unidades de efectos iOS5

El formato de flujo que estoy usando es (Actualizado):

myASBD.mSampleRate = hardwareSampleRate; 
myASBD.mFormatID = kAudioFormatLinearPCM;  
myASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger; 
myASBD.mBitsPerChannel = 8 * sizeof(float); 
myASBD.mFramesPerPacket = 1;           
myASBD.mChannelsPerFrame = 1;   
myASBD.mBytesPerPacket = sizeof(float) * myASBD.mFramesPerPacket;                    
myASBD.mBytesPerFrame = sizeof(float) * myASBD.mChannelsPerFrame; 

Y estoy estableciendo el flujo de filtro de la siguiente manera:

// Sets input stream type to ASBD 
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &myASBD, sizeof(myASBD)); 
NSLog(@"Filter in: %i", setupErr); 

//NSAssert(setupErr == noErr, @"No ASBD on Finput"); 


//Sets output stream type to ASBD 
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &myASBD, sizeof(myASBD)); 
NSLog(@"Filter out: %i", setupErr); 
NSAssert(setupErr == noErr, @"No ASBD on Foutput"); 

Respuesta

3

El formato canónico para las unidades de audio filtro de IOS es 8.24 punto fijo (PCM lineal), que es de 32 bits por canal, no 16.

+0

He intentado usar los canales 32 bits y sigo teniendo errores de formato de flujo. Me han dicho en otra parte que los efectos incorporados de AU en iOS5 tampoco usan un formato canónico. He intentado obtener el formato de flujo de la unidad de filtro usando AudioUnitGetProperty, pero cada vez que intento recibo un error. ¿Sería una mejor idea usar una devolución de llamada de render y simplemente usar la ASBD actual? –

+0

¿Ha establecido el tipo de punto fijo o flotante? Esa es una diferencia entre el formato canónico en Mac versus iOS. – hotpaw2

+0

Lo he cambiado, así que no estoy usando un flotador, pero sigo recibiendo el error. No estoy seguro de si estoy configurando el filtro ASBD correctamente, ya que es aquí donde recibo el error. –

2

¿qué formato está funcionando con la unidad de reverberación ??? Estoy recibiendo errores extraños intentando grabar un búfer .... ¿alguna noticia sobre este tema?

0

Pruebe esto para el formato canónico.

size_t bytesPerSample = sizeof (AudioUnitSampleType); //Default is 4 bytes 
myASBD.mSampleRate  = hardwareSampleRate; 
myASBD.mFormatID   = kAudioFormatLinearPCM; 
myASBD.mFormatFlags  = kAudioFormatFlagsAudioUnitCanonical; //Canonical AU format 
myASBD.mBytesPerPacket = bytesPerSample; 
myASBD.mFramesPerPacket = 1; 
myASBD.mBytesPerFrame  = bytesPerSample; 
myASBD.mChannelsPerFrame = 2; //Stereo 
myASBD.mBitsPerChannel = 8 * bytesPerSample; //32bit integer 

Usted tendrá que asegurarse de que todos sus AudioUnits ASBDs se configuran de manera uniforme.

Si está realizando un procesamiento de audio pesado, flotadores (compatibles con iOS5) tampoco es una mala idea.

size_t bytesPerSample  = sizeof (float); //float is 4 bytes 
myASBD.mSampleRate  = hardwareSampleRate; 
myASBD.mFormatID   = kAudioFormatLinearPCM; 
myASBD.mFormatFlags  = kAudioFormatFlagIsFloat; 
myASBD.mBytesPerPacket = bytesPerSample; 
myASBD.mFramesPerPacket = 1; 
myASBD.mBytesPerFrame  = bytesPerSample; 
myASBD.mChannelsPerFrame = 2; 
myASBD.mBitsPerChannel = 8 * bytesPerSample; //32bit float 
Cuestiones relacionadas