2013-08-13 2 views
1

Я разрабатываю приложение для записи звука для iphone 6+.
проблема 1: (AVAudioRecorder) аудиозапись отлично работает в тренажере, но не работает в устройстве ..AVAudioRecorder Как получить уровень микрофона в iphone?

Настройки звука:

[settings setValue:[NSNumber numberWithInteger:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; 

[settings setValue:[NSNumber numberWithFloat:44100.0f] forKey:AVSampleRateKey]; 

[settings setValue:[NSNumber numberWithInteger:1] forKey:AVNumberOfChannelsKey]; 

[settings setValue:[NSNumber numberWithInteger:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey]; 

Проблема 2: Перед микрофоном работает хорошо в моем IPad. но когда я использую этот код

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
[audioSession setActive:YES error:&err]; 

микрофон не работает в IPad .. как сбросить или набрать мой микрофонный уровень в Ipad/Iphone

+0

У меня такие же проблемы. Обязательно отправьте ответ, когда я его обработаю. –

+0

Помог ли мой ответ? –

+0

да спасибо за ваш ответ :-) –

ответ

1

В моем - (void)setUpAudio методы я создал словарь, который содержит настройки для AVAudioRecorder (немного чище). Ваш код выше почти правильный, но не совсем. Смотри ниже.

// empty URL 
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"]; 

// define settings for AVAudioRecorder 
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithFloat: 44100.0],      AVSampleRateKey, 
          [NSNumber numberWithInt: kAudioFormatAppleLossless],  AVFormatIDKey, 
          [NSNumber numberWithInt:1],        AVNumberOfChannelsKey, 
          [NSNumber numberWithInt:AVAudioQualityMax],    AVEncoderAudioQualityKey, 
          nil]; 

NSError *error; 

// init and apply settings 
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; 

// This here is what you are missing, without it the mic input will work in the simulator, 
// but not on a device. 
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord 
        error:nil]; 

if (recorder) { 
    [recorder prepareToRecord]; 
    recorder.meteringEnabled = YES; 
    NSTimer *levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES]; 
    [recorder record]; 
} else { 
    NSLog([error description]); 
} 

Затем в методе обновления вы можете отслеживать уровни входа микрофона, как это.

- (void)levelTimerCallback:(NSTimer *)timer { 
    [recorder updateMeters]; 
    NSLog(@"Average input: %f Peak input: %f", [recorder averagePowerForChannel:0], [recorder peakPowerForChannel:0]); 

} 

Любые вопросы или способы я могу улучшить свой ответ, пожалуйста, дайте мне знать. Все еще довольно новый здесь.

Смежные вопросы