当我设置:
[[AVAudioSession sharedInstance] setCategory:
AVAudioSessionCategoryPlayAndRecord error:NULL];
...录制和播放工作正常,只是播放音量比我在没有录制和设置PlayAndRecord的情况下播放相同声音时低约60%。
我需要获得高音量峰值(以检查用户是否在麦克风中吹气),因为我开始了录音会话。但是没有设置AVAudio..PlayandRecord,我不能在此期间播放任何声音。这就是我实现这个命令的原因。
任何帮助?
克里斯
答案 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以外的模式,请小心。