7

我想问一个简单的麦克风音量检测问题。我的代码适用于 iOS 6 或更低版本但不适用于 iOS 7,我的代码如下所示:

-(void)viewDidLoad{


NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithFloat: 44100.0],                 AVSampleRateKey,
                              [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
                              [NSNumber numberWithInt: 1],                         AVNumberOfChannelsKey,
                              [NSNumber numberWithInt: AVAudioQualityMax],         AVEncoderAudioQualityKey,
                              nil];

    NSError *error;

    recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];

    if (recorder) {
        [recorder prepareToRecord];
        recorder.meteringEnabled = YES;
        [recorder record];


    } else{
        NSLog([error description]);
    }

}
// then call periodically with the following method, volumeLevelSampling
-(void)volumeLevelSampling{

    [recorder updateMeters];
    NSLog(@"Average input: %f Peak input: %f", [recorder averagePowerForChannel:0], [recorder peakPowerForChannel:0]);


}

它在 iOS 6 中运行良好,但在 iOS 7 中没有采样。结果始终为 -120。

4

3 回答 3

6

如果您已激活应用程序的权限,请检查设置。这类似于推送通知。

一旦警报被回答,它就不会再次弹出。你必须去: Settings -> Privacy -> Microphone然后检查你的应用程序的状态。

如果您在那里看不到您的应用程序,则表示您未正确请求访问麦克风。尝试这个。

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]) {
    [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
        if (!granted) {
            NSLog(@"User will not be able to use the microphone!");
        }
    }];
}

希望它作为线索有所帮助。

干杯!

于 2013-10-02T07:54:55.513 回答
3

在 iOS 7 中,用户必须同意访问麦克风的应用程序。

在您可以使用之前,AVAudioRecorder您必须先请求此同意。这是使用requestAccessForMediaType:completionHandler:on 方法完成的AVCaptureDevice

如果您未征得同意 - 或者您没有请求 - 在 iOS 7 上尝试录制任何内容时,您将获得静音。

于 2013-10-02T07:33:14.273 回答
0

我遇到了同样的问题,这是我如何使它工作的:

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

if([audioSession respondsToSelector:@selector(requestRecordPermission:)]){
    //ios7
    [audioSession requestRecordPermission:^(BOOL granted) {
        if(granted){
            [self recordNow];
        }else{
            NSLog(@"RECORD NOT AUTHORIZED");
        }
    }];
}else{
    //before ios7
    [self recordNow];
}
于 2013-11-11T05:45:28.590 回答