2010-07-25 47 views
1

我正在开发一个应用程序,只需要简单地将音频以下属性:iPhone AudioSession性能

  1. 可以记录,并在同一时间
  2. 播放声音可以混合与其他应用程序,例如音频输出当,当它在

插入我用下面的代码耳机是不是在耳机

  • 音频输出插在音箱的iPod
  • 音频输出。

    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    NSError *audioSessionError; 
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError]; 
    
    UInt32 mix = 1; 
    AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(mix), &mix); 
    
    UInt32 route = kAudioSessionOverrideAudioRoute_Speaker; 
    AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route); 
    
    [audioSession setActive:YES error:&audioSessionError]; 
    

    但是,我可以达到1-3,但在4时失败。当耳机插入时,音频仍然通过扬声器来。然后我尝试设置kAudioSessionProperty_OverrideCategoryDefaultToSpeaker而不是kAudioSessionProperty_OverrideAudioRoute,但是这导致暂停iPod而不是混合两个音频。任何人都可以请帮忙指出上述代码有什么问题吗?

    感谢您的任何帮助。

  • +0

    你试过收听音频路径更改通知,并设置kAudioSessionOverrideAudioRoute_Speaker只有当耳机没有插入,和取消它时,它在插入? – lucius 2010-07-25 18:31:24

    +0

    进行这项工作需要进口什么? – 2011-01-15 12:11:11

    回答

    0

    我想这:

    UInt32 route = kAudioSessionOverrideAudioRoute_Speaker; 
    AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route); 
    

    具体是指使用扬声器。默认操作(插入时使用耳机)应该是:

    UInt32 route = kAudioSessionOverrideAudioRoute_None;