AVAudioRecorder&AVAudioPlayer - 内置扬声器的声音输出,如何更改?

问题描述:

我有AVAudioRecorder和AVAudioPlayer的问题。AVAudioRecorder&AVAudioPlayer - 内置扬声器的声音输出,如何更改?

当我同时使用播放器和录音(例如录音时播放声音)时,声音位于安静的内置扬声器中。我搜索计算器和所有我发现这个代码:

UInt32 *audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

但是,这并不能帮助我:( 当我copyPaste它,我得到了错误 我能做些什么来记录和播放外放的。底部?

我事先不使用任何类似SCLister奥德东西...

感谢

最大

只有我发现这个话题事情是这样的:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

当你,如果你想在同一时间播放录制音频必须设置。试一试,让我知道。

P.S.确保您将AudioToolboxAVFoundation框架添加到您的项目并将它们包含在.m文件中。

+1

是的,这是必要的,但我明白了。没有变化:( 函数本身是好的,你可以顺便吹麦克风和听到的声音,但只有与内部扬声器 – 2010-06-23 20:48:36

这有点旧了,但是这篇文章对我有所帮助,并且我想将它更新为任何未来可能需要它的人。上面贴的代码是正确的 - 它将通过电话扬声器播放安静的音频,并将其传送到底部的扬声器。代码中有一个小错字,这就是它出错的原因。这里是一个可以解决这个问题的正确片段:创建音频播放机/录像机前设置此,右后

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

请确保您还激活音频会话:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

最后,如果你将要播放和录制的同时,您可能还需要设置类别和混音功能。以下是设置类别,启用混音,将音频路由到主扬声器以及激活会话的整个片段。您只需在应用启动后立即执行此操作。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

OSStatus propertySetError = 0; 
UInt32 allowMixing = true; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

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

NSLog(@"Mixing: %x", propertySetError); // This should be 0 or there was an issue somewhere 

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

希望能帮助别人!

+0

,它应该是'错误:NULL'不是'错误:nil' – user102008 2010-12-09 05:22:35

+2

有相当多的苹果示例代码显示错误:nil以及错误:NULL,所以它似乎可以接受使用。它肯定不会造成任何问题。 – 2010-12-10 19:33:17

+0

感谢哥们它帮了我很多...! – Warewolf 2012-12-13 09:14:28

如果您当前正在播放通过安静的扬声器,并希望通过在iPhone底部的扬声器播放,使用此代码:

UInt32 doChangeDefaultRoute = 1; 

AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, 
         sizeof (doChangeDefaultRoute), 
         &doChangeDefaultRoute 
         ); 

这是老问题,但没有的其他答案帮助我......但是,我发现了一个解决方案,我将其发布供将来参考以防万一需要。

该解决方案在以下博客文章中有描述:iOS: Force audio output to speakers while headphones are plugged in

您需要在您的项目中创建新的Objective-C类AudioRouter。然后将AudioRouter.h导入到您启动音频功能的类的头文件中。现在在corrseponding .m文件中添加以下行viewDidLoad方法中:

AudioRouter *foobar = [[AudioRouter alloc] init]; 
[foobar initAudioSessionRouting]; 
[foobar forceOutputToBuiltInSpeakers]; 

现在你有音频*到扬声器(如AVAudioPlayer)输出!因为iOS7

AudioSessionSetProperty已经过时,但以下为我工作。

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 

我在这里找到答案,它已经:How to get AVAudioPlayer output to the speaker

总之,记录前使用此功能:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; 

...和播放前使用此功能(在扬声器或耳机,如果他们插入)

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 
+0

你是男人! – CSawy 2014-08-11 21:38:56