IPhone SDK:音频会话错误:-12986 ....升级到3.1后

Mas*_*ief 2 iphone core-audio

我正在使用Audio Sessions构建iPhone音频应用程序.Prototype正在运行,直到我决定升级到3.1

经过大量的搜索后,我终于发现会话激活调用失败了,错误代码为12986.我无法在任何地方找到原因.NSError对象不提供任何细节.我使用本地化的*API来获取更多信息,这就是我得到的:

localizedDescription:无法完成操作.(OSStatus错误-12986.)localizedFailureReason: <blank>

localizedRecoverySuggestion: <blank>

任何人都知道如何找到有关此类错误代码的更多信息?

同时,如果状态发生变化,我会继续挖掘和更新.

我的好奇代码是 -

NSError *myErr;
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
bSuccess= [audioSession setActive: YES error: &myErr];  
Run Code Online (Sandbox Code Playgroud)

Mas*_*ief 6

不知道12986的确切含义,但它现在似乎与设备的音频功能有关.我有一个解决方案!

我注意到只有当我使用iTouch而不是在iPhone上时才出现此错误.由于我设置会话类为PlayAndRecord两个我决定进去看看这是搞乱它的iTouch的.使代码更智能,以检测是否AudioInputIsAvailable相应地设置类别(PlayBack在ITouch和PlayAndRecordiPhone上).修好了!

所以看起来在之前的SDK中忽略了这一点.我之前没有改过任何东西.:-)

修正后的代码如下:

NSError *myErr;
BOOL    bSuccess = FALSE;
BOOL    bAudioInputAvailable = FALSE;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
bAudioInputAvailable= [audioSession inputIsAvailable];

if( bAudioInputAvailable)
{
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&myErr];
}
else {
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&myErr];
}
bSuccess= [audioSession setActive: YES error: &myErr];  

if(!bSuccess)
{
    NSLog(@"Unable to Start Audio Session. Terminate Application.");
    NSLog([myErr localizedDescription]);
    NSLog([myErr localizedFailureReason]);
    NSLog([myErr localizedRecoverySuggestion]);
}
Run Code Online (Sandbox Code Playgroud)