Objective c OverrideCategoryDefaultToSpeaker未使用iPod Touch响应

Objective c OverrideCategoryDefaultToSpeaker未使用iPod Touch响应,objective-c,ios,audio,ipod-touch,Objective C,Ios,Audio,Ipod Touch,一点背景: 我正在开发一款iOS应用程序,它可以录制音频,并使用音频会话类别AVAudioSessionCategoryPlayAndRecord。该应用程序还播放我想在用户不录音时通过设备主扬声器播放的声音效果。为了在录音时停止通过主扬声器播放输出音频,我使用以下代码段: UInt32 defaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,

一点背景:

我正在开发一款iOS应用程序,它可以录制音频,并使用音频会话类别AVAudioSessionCategoryPlayAndRecord。该应用程序还播放我想在用户不录音时通过设备主扬声器播放的声音效果。为了在录音时停止通过主扬声器播放输出音频,我使用以下代码段:

UInt32 defaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
                        sizeof (defaultRoute),
                        &defaultRoute);
[MPMusicPlayerController iPodMusicPlayer].volume = 0.0;
当用户开始录制时,我使用默认路由0再次运行相同的代码,这会导致输出音频停止通过扬声器播放,因此不包括在录制中。这种方法在iPhone上运行良好

问题是:

当我在第四代iPod Touch上运行相同的代码时,kAudioSessionProperty_OverrideCategoryDefaultToSpeaker属性似乎没有任何影响。结果是,当用户在iPod Touch上录制音频时,音效仍将通过扬声器播放,并包含在录音中

有人知道为什么会发生这种情况,或者如何修复它吗?我想让iPod Touch上的行为与iPhone上的行为相匹配:录制时,输出音频不会通过主扬声器播放

注:

我得到的最接近解决方案是检测设备是否为iPod Touch,如果是,则在开始录制时使用以下代码段将系统音频静音:

UInt32 defaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
                        sizeof (defaultRoute),
                        &defaultRoute);
[MPMusicPlayerController iPodMusicPlayer].volume = 0.0;
这不是一个理想的解决方案,因为当执行此代码时,会弹出卷覆盖视图,显示卷已被关闭。这增加了UI的混乱,并不是一个足够好的解决方案

任何帮助都将不胜感激