我们的应用程序使用remoteIO(音频单元)从麦克风和DSP上实时获取音频输入,它具有回调功能,可以为我提供缓冲区,并且我可以使用它。
与此同时,我们需要通过avAudioPlayer播放声音。
我把我的初始版本放入:(将声音传送到扬声器并播放并录制)
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
然后我看到了一些奇怪的东西。这些声音是从小型扬声器播放的 - 用于通话的耳机。
然后我做了一个技巧。 我已经看到,为了真正将声音传送到扬声器,我必须播放一些东西,同时执行上面的4行。 如果我这样做了一次,那么声音会回到扬声器永远。 我用一个调用方法的计时器做了这个,当这个方法执行它们时,我用avaudioPlayer播放声音,然后它修复它并向扬声器发出声音路径。
任何人对此有任何解决方案或解释吗? 我真的需要通过扬声器播放声音,没有技巧。
答案 0 :(得分:3)
它永远播放的原因是麦克风拾取播放的声音并进入循环播放Larsen effect
您可以使用
将声音强制到底部扬声器-(void)setSpeaker
{
OSStatus error;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
error = AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), &audioRouteOverride);
if (error) NSLog(@"Couldn't route audio to speaker");
}
您还可以向用户提供用户界面以选择带有MPVolumeView