与AVAudioSessionCategoryPlayAndRecord结合使用的低录音音量

时间:2010-02-11 17:44:48

标签: audio ios avaudiosession

当我设置:

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

...录制和播放工作正常,只是播放音量比我在没有录制和设置PlayAndRecord的情况下播放相同声音时低约60%。

我需要获得高音量峰值(以检查用户是否在麦克风中吹气),因为我开始了录音会话。但是没有设置AVAudio..PlayandRecord,我不能在此期间播放任何声音。这就是我实现这个命令的原因。

任何帮助?

克里斯

6 个答案:

答案 0 :(得分:26)

对于遇到同样问题的每个人,请将输出重定向到发言人:

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

有效。

答案 1 :(得分:24)

我今天遇到了这个问题,似乎这个答案有点过时了。 AudioSessionsSetProperty(...)现已弃用。

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

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];

即使插入了耳机,如果您更愿意通过扬声器以音量播放音频,也可以这样做:

[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

答案 2 :(得分:14)

我发现(参见the iOS documentation中的清单7-9),上面提到的覆盖音频路由的解决方案在插入和移除耳机后停止工作。

因此,如果您希望音频路由中的更改在当前音频会话中是永久性的(the iOS documentation中的清单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>

答案 3 :(得分:3)

不要忘记import语句。对于经验丰富的程序员来说,这可能是显而易见的......

#import <AudioToolbox/AudioServices.h>

答案 4 :(得分:0)

此外,需要通过Right-Cliking on Frameworks将AudioToolbox和AVFoundation框架添加到您的项目中 - &gt;添加 - &gt;现有框架。

否则可能会出现链接器错误:“_ AudioSessionSetProperty”,引自:        - OpenBook.o中的[OpenBook startRecording]

答案 5 :(得分:0)

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

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