2013-10-02 35 views
7

Tôi muốn hỏi về sự cố với phát hiện mức âm lượng micrô đơn giản. Mã của tôi làm việc tốt với iOS 6 hoặc thấp hơn nhưng không phải iOS 7, mã của tôi trông như thế này:Micrô không hoạt động trên 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]); 


} 

Nó hoạt động hoàn toàn tốt đẹp trong iOS 6, tuy nhiên nó không lấy mẫu bất cứ điều gì trong iOS 7. Kết quả luôn luôn là - 120.

+1

Tôi đang gặp vấn đề này giống nhau và khi tôi kiểm tra trong Settings.app ứng dụng của tôi _is_ phép sử dụng mic. – Shizam

+0

@EricPoon ... Bạn có thể sửa lỗi này không? Vì tôi có một ứng dụng mà tôi không thể ghi âm từ micrô, nhưng chỉ với iPad Air và iOS 7. – Beto

Trả lời

3

Trong người dùng iOS 7 phải đồng ý với các ứng dụng truy cập micrô.

Trước khi bạn có thể sử dụng AVAudioRecorder, trước tiên bạn phải yêu cầu sự đồng ý này. Việc này được thực hiện bằng phương pháp requestAccessForMediaType:completionHandler: trên AVCaptureDevice.

Nếu bạn không có sự đồng ý - hoặc bạn đã không yêu cầu nó - bạn sẽ nhận được sự im lặng khi cố gắng ghi lại bất cứ điều gì trên iOS 7.

+1

Là một FYI cho bất kỳ ai đọc câu trả lời này và Manuel, các tài liệu cũng nêu "Gọi phương thức này bằng' AVMediaTypeAudio' là tương đương với việc gọi phương thức 'AVAudioSession'' requestRecordPermission: '." – qix

6

Kiểm tra trong Cài đặt nếu bạn đã kích hoạt quyền truy cập cho ứng dụng của bạn . Điều này hoạt động giống như các thông báo đẩy.

Khi cảnh báo được trả lời, nó sẽ không bật lên nữa. Bạn phải truy cập: Settings -> Privacy -> Microphone Sau đó kiểm tra trạng thái ứng dụng của bạn.

Nếu bạn không thể thấy ứng dụng của mình ở đó, điều đó có nghĩa là bạn không yêu cầu quyền truy cập vào micrô một cách chính xác. Thử cái này.

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

Hy vọng nó sẽ giúp làm đầu mối.

Chúc mừng!

+0

Đã lãng phí 4 giờ cho điều này !!! Cảm ơn bạn đời –

0

Tôi đã có cùng một vấn đề và đây là cách tôi đã có thể làm cho nó hoạt:

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]; 
} 
+0

Bạn có gặp vấn đề với thói quen này trong iPad Air không? Bởi vì tôi có một ứng dụng mà tôi không thể ghi lại âm thanh từ micrô, nhưng chỉ với iPad Air. – Beto

Các vấn đề liên quan