KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to use AVAudioRecorder's averagePowerForChannel method to monitor input levels on the microphone for an iPad/iPhone app. I have a callback which polls the average level in a loop — on the iPhone it works fine and returns sensible levels, but for some reason on the iPad it always returns -120.0. Here's some of my setup code: - (void) setupMic { if (micInput) { [micInput release]; micInput = nil; } NSURL *newURL = [[NSURL alloc] initFileURLWithPath:@"/dev/null"]; NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init]; [recordSettings setObject:[NSNumber numberWithInt:kAudioFormatAppleLossless] forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:22050.0] forKey: AVSampleRateKey]; // [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey]; [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityLow] forKey: AVEncoderAudioQualityKey]; micInput = [[AVAudioRecorder alloc] initWithURL:newURL settings:recordSettings error:nil]; // [micInput setMeteringEnabled:YES]; [newURL release]; [recordSettings removeAllObjects]; [recordSettings release]; } As well as my start recording method: - (void) startRecording { NSLog(@"startRecording!"); [micInput pause]; [micInput prepareToRecord]; micInput.meteringEnabled = YES; [micInput record]; [micInput updateMeters]; levelTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.0] interval:0.03 target:self selector:@selector(levelTimerCallback:) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:levelTimer forMode:NSDefaultRunLoopMode]; } and a bit of the levelTimer callback: - (void)levelTimerCallback:(NSTimer *)timer { [micInput updateM
Tags (comma-separated)
Save Edits
Cancel