2013-10-02 20 views
7

Chciałbym zapytać o problem z wykrywaniem poziomu głośności prostego mikrofonu. Mój kod działa dobrze z iOS 6 lub niższej, ale nie iOS 7, mój kod wygląda następująco:Mikrofon nie działa na 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]); 


} 

To działa perfekcyjnie w iOS 6, jednak nie jest to próbkowanie niczego w iOS 7. Wynik jest zawsze - 120.

+1

mam przeżywa ten sam problem i kiedy sprawdzić w Settings.app moja aplikacja _jest_ upoważniony do korzystania z mikrofon. – Shizam

+0

@EricPoon ... Czy możesz to naprawić? Ponieważ mam aplikację, w której nie mogę nagrać dźwięku z mikrofonu, ale tylko z iPad Air i iOS 7. – Beto

Odpowiedz

3

Użytkownicy iOS 7 muszą wyrazić zgodę na aplikacje uzyskujące dostęp do mikrofonu.

Przed użyciem numeru AVAudioRecorder należy najpierw poprosić o tę zgodę. Odbywa się to za pomocą metody requestAccessForMediaType:completionHandler: na requestAccessForMediaType:completionHandler: na requestAccessForMediaType:completionHandler:.

Jeśli nie ma zgody - lub jeżeli jej nie wymagane - dostaniesz ciszy, gdy próbuje nagrać coś na iOS 7.

+1

Jako FYI dla każdego, kto czyta to i odpowiedź Manuela, docs również stwierdza: "Wywołanie tej metody z' AVMediaTypeAudio' jest odpowiednik wywołania metody "AVAudioSession" requestRecordPermission: '." – qix

6

sprawdź w ustawieniach, jeśli uaktywniona uprawnienia dla aplikacji . Działa to tak, jak powiadomienia push.

Po otrzymaniu alertu nie pojawi się ponownie. Musisz przejść do: Settings -> Privacy -> Microphone Następnie sprawdź stan swojej aplikacji.

Jeśli nie widzisz swojej aplikacji, oznacza to, że nie żądasz prawidłowego dostępu do mikrofonu. Spróbuj tego.

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

Mam nadzieję, że pomaga jako wskazówka.

Pozdrawiam!

+0

zmarnowane 4 godziny za to !!! Dzięki kolego –

0

miałem ten sam problem i tutaj jest to, jak udało mi się zrobić to praca:

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

Czy masz problem z tą procedurą w iPadzie Air? Ponieważ mam aplikację, w której nie mogę nagrać dźwięku z mikrofonu, ale tylko z iPadem Air. – Beto

Powiązane problemy