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

Max*_*yer 8 iphone

我有AVAudioRecorder和AVAudioPlayer的问题.

当我同时使用播放器和录音时(例如,录音时播放声音)声音在安静的内置扬声器中.我搜索了stackoverflow,我找到的就是这段代码:

UInt32 *audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
Run Code Online (Sandbox Code Playgroud)

但这对我没有帮助:(当我复制它时,我有错误.我能做些什么来录制和播放底部的扬声器?

我没有像SCLister那样使用任何东西......

提前致谢

马克斯

Cor*_*eke 16

这有点旧了,但是这篇帖子对我有帮助,我想为将来可能需要它的其他人更新它.顶部贴出的代码是正确的 - 它将通过手机扬声器播放安静的音频并将其传送到底部的扬声器.代码中有一个小错字,这就是它给出错误的原因.以下是解决此问题的正确代码段:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
Run Code Online (Sandbox Code Playgroud)

在创建音频播放器/录像机之前,请确保在设置此项后立即激活音频会话:

[[AVAudioSession sharedInstance] setActive:YES error:nil];
Run Code Online (Sandbox Code Playgroud)

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

[[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];
Run Code Online (Sandbox Code Playgroud)

希望有人帮助!

  • 有相当多的Apple示例代码显示错误:nil以及错误:NULL因此似乎可以使用任何一个.它肯定不会引起任何问题. (2认同)

iwa*_*bed 1

我发现的关于这个主题的唯一信息是:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
Run Code Online (Sandbox Code Playgroud)

如果您想同时播放,则必须在录制音频时进行设置。尝试一下,让我知道。

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