2011-04-12 16 views
7

Estoy trabajando en un proyecto de iOS que necesita cancelación de eco acústico, por lo que el subtipo kAudioUnitSubType_VoiceProcessingIO parece ser una buena opción. A continuación se muestra la descripción de mi unidad de audioError de inicialización de gráfico de audio con kAudioUnitSubType_VoiceProcessingIO unidad de IO de audio subtipo

//io unit description 
AudioComponentDescription ioUnitDescription; 
ioUnitDescription.componentType = kAudioUnitType_Output; 
ioUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO; 
ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
ioUnitDescription.componentFlags = 0; 
ioUnitDescription.componentFlagsMask = 0; 

Y en base a mi experiencia con el subtipo RemoteIO, He activado el elemento de entrada:

UInt32 enable = 1; 
AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enable, sizeof(enable)); 

Sin embargo, ha obtenido un error al inicializar el gráfico de audio. El mismo gráfico de audio funciona bien si VoiceProcessingIO se reemplaza por RemoteIO.

¿Hay alguna diferencia entre RemoteIO y VoiceProcessingIO que necesita una atención especial?

Gracias, Chuankai

+0

siento a comentar en una única pregunta pero ¿ha de averiguar la cancelación de eco? Los documentos Apple siguen refiriéndose al procesamiento de voz IO que tiene esta característica, pero no puedo encontrar un ejemplo de ello en ninguna parte. Realmente lo apreciaría –

Respuesta

1

En mi experiencia de la unidad de audio VoiceProcessingIO es mucho más meticuloso en cuanto a tamaño de amortiguamiento y la frecuencia de muestreo. Pruebe con una frecuencia de muestreo inferior a 32000 Hz (quizás comience con 8000 Hz y avance hacia arriba) y un tamaño de búfer bastante grande (digamos 2048 muestras, más o menos). Esto no está documentado. El número de rdar vendrá una vez que tenga la oportunidad de presentar uno.

uso el siguiente formato durante la puesta a punto:

size_t bytesPerSample = sizeof(AudioSampleType); 
    AudioStreamBasicDescription canonicalFormat; 
    canonicalFormat.mSampleRate   = self.samplerate; 
    canonicalFormat.mFormatID   = kAudioFormatLinearPCM; 
    canonicalFormat.mFormatFlags  = kAudioFormatFlagsCanonical; 
    canonicalFormat.mFramesPerPacket = 1; 
    canonicalFormat.mChannelsPerFrame = 1; 
    canonicalFormat.mBitsPerChannel  = 8 * bytesPerSample; 
    canonicalFormat.mBytesPerPacket  = bytesPerSample; 
    canonicalFormat.mBytesPerFrame  = bytesPerSample; 
Cuestiones relacionadas