iOS 7下的AVAudioRecorder和AVAudioPlayer不能正常工作

20

我在使用AVFoundation框架时遇到了问题。

我用iOS 6写了一个演示应用程序来记录音频,播放它并计算分贝。在内置的xcode 4.6.3 iOS模拟器和我的iOS 6.1.3 iPhone上都可以正常工作。

现在我已经升级到版本5并重新测试了该应用程序。在内置模拟器上可以正常工作(无论是iOS 6.1还是iOS 7模拟器)。但是当我将应用程序部署到我的iOS 7.0 iPhone上时,它不再工作。

我正在使用AVAudioRecorderAVAudioPlayer

我不知道可能出现什么问题。有什么建议吗?谢谢!


这正是我遇到的问题。我的所有应用程序在iOS 6上运行良好,但在iOS 7上使用AVAudioRecorder和AVAudioPlayer时都无法正常工作。在我的情况下,它们甚至在模拟器上也无法工作。 - Sam B
Sam,你的应用程序也无法播放音频吗?请检查我的答案,看看我是如何解决录音问题的,但在修复之前,我的播放仍然正常工作。 - Mr.Hardy
4个回答

60

我遇到了同样的问题...看起来苹果现在要求在使用AVAudioRecorder之前先使用AVAudioSession。 我找不到任何关于这种要求变化的文档,但是我的应用程序的录音部分现在可以工作了。

我所做的就是创建一个audioSession,设置类别并将其设为活动状态。我在调用prepareToRecord之前和之后都尝试了一下,两种方法都可以正常工作。

希望这可以解决您的问题!

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];

我在我的代码上尝试了这个,但它仍然不起作用。我需要先请求使用麦克风的权限吗?谢谢。 - atbebtg
@atbebtg 你可能需要将类别替换为 AVAudioSessionCategoryPlayback - Hank
这些帮助我解决问题。非常感谢。应该加点盐。最后两个方法有返回值。忽略返回值不是一个好的做法,即使在示例片段中也是不可接受的。 - Valeriy Van

5

同样的问题。

我通过使用AVAudioSession进行了修复。此外,正确设置AVAudioSession的类别:

录制时使用:

[self.audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

当播放时使用:

[self.audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];

如果我在播放时不切换类别,那么音量会非常低。

祝你好运!


1

我也遇到了这个问题,所以首先我必须确保应用程序有使用麦克风的权限,方法是进入 设置 -> 隐私 -> 麦克风,然后就成功了。


0

可能您没有访问麦克风的权限。请使用以下代码:

if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
    [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
        }
        else {
            // Microphone disabled code
        }
    }];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接