我遇到AVAudioRecorder和AVAudioPlayer的问题。
当我同时使用播放器和录音时(例如,录音时播放声音)声音在安静的内置扬声器中。我搜索了stackoverflow,我找到的就是这段代码:
UInt32 *audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
但这对我没有帮助:( 当我复制它时,我有错误。 如何在底部录制和播放扬声器?
我没有像SCLister那样使用任何东西......
提前致谢
最高
答案 0 :(得分:16)
这有点旧,但是这篇文章对我有帮助,我想为将来可能需要它的其他人更新它。顶部贴出的代码是正确的 - 它将通过手机扬声器播放安静的音频并将其传送到底部的扬声器。代码中有一个小错字,这就是它给出错误的原因。以下是解决此问题的正确代码段:
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];
希望能帮助别人!
答案 1 :(得分:2)
我已经在这里回答:How to get AVAudioPlayer output to the speaker
简而言之,请在录制前使用此功能:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil];
...并在播放前使用此功能(如果插入扬声器或耳机,则使用此功能)
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
答案 2 :(得分:1)
我发现这个主题的唯一内容是:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
如果要同时播放,必须在录制音频时设置。试一试并知道。
P.S。确保将AudioToolbox
和AVFoundation
框架添加到项目中,并将它们包含在.m文件中。
答案 3 :(得分:0)
如果您目前正在通过安静的扬声器播放,并希望通过iPhone底部的扬声器播放,请使用以下代码:
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof (doChangeDefaultRoute),
&doChangeDefaultRoute
);
答案 4 :(得分:0)
这是一个老问题,但其他答案都没有帮助我......但是,我找到了一个解决方案,我将其发布以备将来参考,以防有人需要。
以下博文中介绍了该解决方案: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)输出强制为扬声器!
答案 5 :(得分:0)
自iOS7以来,不推荐使用AudioSessionSetProperty,但以下内容对我有用。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];