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.确保您将AudioToolbox
和AVFoundation
框架添加到您的项目并将它们包含在.m文件中。
这有点旧了,但是这篇文章对我有所帮助,并且我想将它更新为任何未来可能需要它的人。上面贴的代码是正确的 - 它将通过电话扬声器播放安静的音频,并将其传送到底部的扬声器。代码中有一个小错字,这就是它出错的原因。这里是一个可以解决这个问题的正确片段:创建音频播放机/录像机前设置此,右后
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];
希望能帮助别人!
,它应该是'错误:NULL'不是'错误:nil' – user102008 2010-12-09 05:22:35
有相当多的苹果示例代码显示错误:nil以及错误:NULL,所以它似乎可以接受使用。它肯定不会造成任何问题。 – 2010-12-10 19:33:17
感谢哥们它帮了我很多...! – 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];
你是男人! – CSawy 2014-08-11 21:38:56
是的,这是必要的,但我明白了。没有变化:( 函数本身是好的,你可以顺便吹麦克风和听到的声音,但只有与内部扬声器 – 2010-06-23 20:48:36