AVAudioRecorder 没有声音

AVAudioRecorder hasn't sound

我在 某些条件 中遇到 AVAudioPlayer 的问题。 首先,我的录音机一般工作正常。但是在 VOIP 通话和播放来自 built_in_Speaker 的铃声并与音频会话一起工作后,挂断电话后,我无法先录制带声音的音频!但第二次一切正常。 问题

如果我提到我的音频被录制但没有声音!

我想知道它可能发生在什么情况下?

 self.audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[self.audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}

BOOL preparedToRecord = [self.audioRecorder prepareToRecord];
__block BOOL recordStarted = NO;

err = nil;
[self.audioSession setActive:YES error:&err];
if(err){
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}

if (preparedToRecord){
    recordStarted = [self.audioRecorder record];
}

录制音频需要用户的明确许可。当您的应用程序的音频会话在使用启用录音的类别时第一次尝试使用音频输入路由时,系统会自动提示用户获得许可。您可以通过调用 requestRecordPermission: 方法来明确地提前询问。在用户授予您的应用录音权限之前,您的应用只能录音。

参考这里: https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html

已解决

我找到了这个问题的原因。 我有自己的 addObserve 来捕捉 AVAudioSession 的通知,并检查 AudioSession interrupt/RoutChanging! 问题是在我打电话后,我尝试将音频路由更改为扬声器,但是为 AudioRoutChanging 通知添加的 class 试图阻止这种情况发生。所以音频会话路由每秒都在变化,无法录制音频。

结论 你应该这样做来录制音频:

1) 确定 权限

2)[self.audioSession setActive:YES error:&err];

3)[self.audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];

4) 确定你的路线在录制过程中不会改变。

4)确定你的目标补丁