2013-10-02 61 views
7

我想問一個簡單的麥克風音量水平檢測問題。我的代碼只是正常的iOS 6或更低,但並不適用於iOS 7,我的代碼看起來是這樣的:麥克風不能在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。

+1

我遇到同樣的問題,當我在Settings.app檢查我的應用程序_is_授權使用話筒。 – Shizam

+0

@EricPoon ...你能解決這個問題嗎?因爲我有一個應用程序,我無法錄製來自麥克風的聲音,但只能使用iPad Air和iOS 7. – Beto

回答

3

在iOS 7中,用戶必須同意訪問麥克風的應用程序。

在您使用AVAudioRecorder之前,您必須先徵得此同意。這是使用AVCaptureDevice上的requestAccessForMediaType:completionHandler:方法完成的。

如果你沒有同意 - 或者你還沒有要求它 - 當試圖記錄任何iOS上7

+1

作爲閱讀本文和Manuel回覆的任何人的參考,文檔還聲明「用AVMediaTypeAudio調用此方法」相當於調用'AVAudioSession'方法'requestRecordPermission:'。「。 – qix

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!"); 
     } 
    }]; 
} 

希望它有助於提供線索。

乾杯!

+0

浪費了4小時!感謝隊友 –

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

您在iPad Air中遇到了這個問題嗎?因爲我有一個應用程序,我無法錄製來自麥克風的聲音,但只能使用iPad Air。 – Beto