2015-01-26 1 views
1

Пусть код:AudioUnitInitialize возвращает -10851 (kAudioUnitErr_InvalidPropertyValue)

... 
status = AudioUnitSetProperty(
    unit, 
    kAudioUnitProperty_StreamFormat, 
    kAudioUnitScope_Input, element, 
    &format, 
    sizeof(AudioStreamBasicDescription)); 
... 
status = AudioUnitInitialize(unit); 

Ошибка проявляется в AudioUnitInitialize возвращающегося kAudioUnitErr_InvalidPropertyValue следующее сообщение печатается в консоли отладчика:

[pool] <aurioc> 806: failed: -10851 (enable 2, outf< 2 ch, 48000 Hz, Int16, inter> inf< 2 ch,  0 Hz, Float32, non-inter>) 

Если вы» ve установит формат потока для kAudioUnitScope_Input, то вариация этого сообщения будет:

[pool] <aurioc> 806: failed: -10851 (enable 2, outf< 2 ch, 48000 Hz, Int16, inter> inf< 2 ch, 48000 Hz, Int16, inter>) 

ответ

0

Код ошибки -10851 соответствует kAudioUnitErr_InvalidPropertyValue.

Видимо, ошибка решается путем выполнения этой инициализации перед выполнением AudioUnitInitialize:

AVAudioSession *mySession = [AVAudioSession sharedInstance]; 
[mySession setCategory: AVAudioSessionCategoryPlayAndRecord error:nil]; 

Кроме того, Apple рекомендует установить частоту дискретизации, которые вы собираетесь использовать в течение приложения:

[mySession setPreferredSampleRate:audio_sample_rate error:nil]; 
// make sure we got what we wanted 
audio_sample_rate = [mySession sampleRate]; 
0

Этот проблема возникает, когда вы не задали категорию и режим для AudioSession. Попробуйте обновить, как показано ниже:

- (void)configureAudioSession { 
    // Configure the audio session 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    // we are going to play and record so we pick that category 
    NSError *error = nil; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 

    // set the mode to voice chat 
    [session setMode:AVAudioSessionModeVoiceChat error:&error]; 

/*  TODO: 
    +  // add interruption handler 
    +  [[NSNotificationCenter defaultCenter] addObserver:self 
    +             selector:@selector(handleInterruption:) 
    +              name:AVAudioSessionInterruptionNotification 
    +             object:sessionInstance]; 
    + 
    +  // we don't do anything special in the route change notification 
    +  [[NSNotificationCenter defaultCenter] addObserver:self 
    +             selector:@selector(handleRouteChange:) 
    +              name:AVAudioSessionRouteChangeNotification 
    +             object:sessionInstance]; 
    + 
    +  // if media services are reset, we need to rebuild our audio chain 
    +  [[NSNotificationCenter defaultCenter] addObserver: self 
    +             selector: @selector(handleMediaServerReset:) 
    +              name: AVAudioSessionMediaServicesWereResetNotification 
    +             object: sessionInstance]; 
    +*/ 
    NSLog(@"setupAudioSession"); 

}

Не используйте ActivateSession линию, ниже линий ответственных генерировать ошибку.

//[session setActive:YES error:&error];