苹果演示版iPhone应用程序SpeakHere赢得';t对kAudioSessionOverrideAudioRoute_无回应

苹果演示版iPhone应用程序SpeakHere赢得';t对kAudioSessionOverrideAudioRoute_无回应,iphone,audio,speakerphone,Iphone,Audio,Speakerphone,我在试用苹果的示例应用SpeakHere,想通过扬声器而不是耳朵扬声器收听 我可以使用以下代码打开扬声器: UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); UInt32 au

我在试用苹果的示例应用SpeakHere,想通过扬声器而不是耳朵扬声器收听

我可以使用以下代码打开扬声器:

    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 
但此后,该应用程序将不再录制。它结冰了。此代码没有任何好处:

    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

天啊,如果你能用最上面的代码打开扬声器,你应该能用其他代码关闭它。秘密是什么?

在音频队列运行时,您是否正在尝试执行此操作?或者您是否在更改音频会话之前停止音频队列并在之后重新启动它


您是否查看了所有音频会话和音频队列调用的错误返回值,以查看是否报告了错误?如果是,错误值是多少?

我没有注意到音频队列。我刚刚将“扬声器打开”代码附加到按下播放按钮时执行的代码,将“扬声器关闭”代码附加到按下录制按钮时执行的代码。在更改音频会话类型之前,请尝试关闭音频队列。如果用户希望声音输出移动,则不会注意到故障。检查会话更改的错误状态后重新启动队列。