Error de propiedad del set AudioUnit (código de error -10868)

Estoy intentando establecer una propiedad en AudioUnit usando AudioStreamBasicDescription. Estoy intentando establecer el formatting para los datos de sonido. El código de error devuelto es -10868. Solo ocurre en iOS 3.1.3 o less, pero funciona en 3.2 o superior. Por lo tanto, funciona en el simulador, en un iPod Touch con 4.2, pero no en un iPod Touch de 1ª generación.

El error ocurre cuando bash configurar el formatting para la unidad de tono AudioUnit. El código se ve así (y es de cocoawithlove.com )

// Set the format to 32 bit, single channel, floating point, linear PCM const int four_bytes_per_float = 4; const int eight_bits_per_byte = 8; AudioStreamBasicDescription streamFormat; streamFormat.mSampleRate = sampleRate; streamFormat.mFormatID = kAudioFormatLinearPCM; streamFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved; streamFormat.mBytesPerPacket = four_bytes_per_float; streamFormat.mFramesPerPacket = 1; streamFormat.mBytesPerFrame = four_bytes_per_float; streamFormat.mChannelsPerFrame = 1; streamFormat.mBitsPerChannel = four_bytes_per_float * eight_bits_per_byte; err = AudioUnitSetProperty (toneUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &streamFormat, sizeof(AudioStreamBasicDescription)); // err now has error code -10868 

Revisé alnetworkingedor en encabezados y este código de error corresponde al error "kAudioUnitErr_FormatNotSupported". Entonces, ¿creo que el formatting que bash configurar no es compatible con iOS 3.1? ¿Dónde puedo encontrar formattings compatibles? ¿Alguna sugerencia en otros formattings que pueda probar?

La callback de renderizada utilizada:

 OSStatus RenderTone( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) { // Fixed amplitude is good enough for our purposes const double amplitude = 0.25; // Get the tone parameters out of the view controller ToneGeneratorViewController *viewController = (ToneGeneratorViewController *)inRefCon; double theta = viewController->theta; double theta_increment = 2.0 * M_PI * viewController->frequency / viewController->sampleRate; // This is a mono tone generator so we only need the first buffer const int channel = 0; Float32 *buffer = (Float32 *)ioData->mBuffers[channel].mData; // Generate the samples for (UInt32 frame = 0; frame < inNumberFrames; frame++) { buffer[frame] = sin(theta) * amplitude; theta += theta_increment; if (theta > 2.0 * M_PI) { theta -= 2.0 * M_PI; } } // Store the updated theta back in the view controller viewController->theta = theta; return noErr; } 

Creo que el problema principal es que el audio de punto flotante no fue compatible con iOS antes de la versión 4.0. No estoy seguro de cuál es el trato con el soporte flotante de ARM, pero recomendaría usar uno de los formattings de punto fijo para input y salida.