2013-10-02 10 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 7で何をサンプリングしていない、のiOS 6で完全に正常に動作します - 120。

+1

私はこの同じ問題を経験していると私はSettings.appにチェックしたときに私のアプリが使用する権限を_is_マイク – Shizam

+0

@ EricPoon ...これを修正できますか?私はマイクからサウンドを録音することはできないので、iPad AirとiOS 7でのみ音を録音することができます。 – Beto

答えて

3

iOS 7では、ユーザーはマイクにアクセスするアプリに同意する必要があります。

AVAudioRecorderを使用する前に、この同意を最初に要求する必要があります。これは、AVCaptureDevicerequestAccessForMediaType:completionHandler:メソッドを使用して行われます。

あなたは同意していない場合 - またはあなたがそれを要求していない - [設定]であなたが沈黙を買ってあげるのiOS 7上に何かを記録しようとしている

+1

これとManuelの応答を読んだ人のためのFYIとして、「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

関連する問題