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