结合AvaudioSessionCategoryPlay和Record的低录制音量

结合AvaudioSessionCategoryPlay和Record的低录制音量,audio,ios,avaudiosession,Audio,Ios,Avaudiosession,当我设定: [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:NULL]; …录制和播放效果很好,只是播放音量比我只播放相同的声音而不录制和设置播放和录制时低60%左右 我需要获得高音量峰值(以检查是否有用户吹入麦克风),因为我开始了录音会话。但是如果没有设置AVAudio..播放和录制,我无法同时播放任何声音。这就是我执行这个命令的原因 有什么帮助吗 Thx

当我设定:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];
…录制和播放效果很好,只是播放音量比我只播放相同的声音而不录制和设置播放和录制时低60%左右

我需要获得高音量峰值(以检查是否有用户吹入麦克风),因为我开始了录音会话。但是如果没有设置AVAudio..播放和录制,我无法同时播放任何声音。这就是我执行这个命令的原因

有什么帮助吗


Thx Chris

对于每个有相同问题的人,请将输出重定向到扬声器:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
    sizeof(audioRouteOverride), &audioRouteOverride);

那就行了。

别忘了导入语句。对于更有经验的程序员来说,这也许是显而易见的

#import <AudioToolbox/AudioServices.h>
#导入

此外,需要通过右键点击框架->添加->现有框架,将AudioToolbox和AVFoundation框架添加到项目中

否则可能会得到链接器错误:“\u AudioSessionSetProperty”,引用自: -[OpenBook startRecording]在OpenBook.o

中,我发现(参见中的清单7-9),上面建议的覆盖音频路由的解决方案在插入和拔下耳机后停止工作

因此,如果您希望音频路由的更改在当前音频会话(中的清单7-10)中是永久性的,您可以使用

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
//Set the general audio session category
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryErr];

//Make the default sound route for the session be to use the speaker
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);

//Activate the customized audio session
[[AVAudioSession sharedInstance] setActive: YES error: &activationErr];
当然,还要确保链接AudioToolbox框架并使用

#import <AudioToolbox/AudioServices.h>
#导入

我今天遇到了这个问题,这个答案似乎有点过时了。AudioSessionSetProperty(…)现在已不推荐使用

不过,以下方法似乎可行,通过扬声器提供全音量,但如果在应用程序运行前已插入耳机,则会自动将音频路由到耳机:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];
如果您希望在插入耳机的情况下通过扬声器以最大音量播放音频,这也可以:

[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

在我的情况下,除了使用AVAudioSessionCategoryOptionDefaultToSpeaker选项外,我还必须将更改的audioSession模式从AVAudioSessionModeDefault删除为AVAudioSessionModeMeasurement


因此,如果您使用的是AVAudioSessionModeDefault以外的模式,请小心。

我今天遇到了这个问题,大多数答案似乎不适用于最近的iOS更改。Lucian在上面使用defaultToSpeaker选项的回答是正确的,尽管在模拟器中和设备上的表现似乎仍然不同。对我有帮助的是在一次通话中设置类别、模式和选项,这在iOS 10+中可用,如下所示:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeDefault, options: .defaultToSpeaker)

使用此音频已达到最大值,并一直保持这种状态。

谢谢!这解决了我在AVAudioSessionCategoryPlay和AvaudioSessionCategoryRecord之间切换滞后的问题。当您尝试将其与耳机同时使用时,会出现很多错误。但当背景音频在耳机中播放时,在录音的同时,音频通过扬声器播放,我们如何才能阻止这种情况?谢谢!这是一个很好的解决方案。AudioSessionSetProperty在iOS 7.0汉克斯中不受欢迎!这让我快发疯了!你节省了我的时间+1@lucian