麦克风无法在iOS 7上运行

时间:2013-10-02 07:10:38

标签: ios ios7

我想问一下简单的麦克风音量检测问题。我的代码适用于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。

3 个答案:

答案 0 :(得分: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!");
        }
    }];
}

希望它有助于提供线索。

干杯!

答案 1 :(得分:3)

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

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

如果你没有同意 - 或者你没有请求 - 你会在尝试在iOS 7上录制任何东西时保持沉默。

答案 2 :(得分: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];
}