OverrideCategoryDe​​faultToSpeaker没有响应iPod Touch

时间:2011-12-10 00:16:40

标签: objective-c ios audio ipod-touch

一点背景:

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

UInt32 defaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
                        sizeof (defaultRoute),
                        &defaultRoute);

当用户开始录制时,我使用defaultRoute 0再次运行相同的代码,这会导致输出音频停止通过扬声器播放,因此不会包含在录音中。这种方法在iPhone上运行良好。

问题:

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

有谁知道为什么会这样,或者如何修复它?我希望iPod Touch上的行为与iPhone上的行为相匹配:录制时输出音频无法通过主扬声器播放。

注意:

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

[MPMusicPlayerController iPodMusicPlayer].volume = 0.0;

这不是一个理想的解决方案,因为执行此代码时,会弹出音量叠加视图,显示音量已被调低。这增加了UI的混乱,并不是一个足够好的解决方案。

任何帮助将不胜感激!

0 个答案:

没有答案