I am developing an iPhone 4 application (iOS 4) that shows a level meter.
This application measures the human voice. But this is a problem. When there is a lot of noise, it does not work. It also measures background noise.
To measure sound, I use this:
- (void) initWithPattern:(Pattern *)pattern { mode = figureMode; [self showFigureMeter]; patternView.pattern = pattern; NSURL *url = [NSURL fileURLWithPath:@"/dev/null"]; NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithFloat: 44100.0], AVSampleRateKey, [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey, [NSNumber numberWithInt: 2], AVNumberOfChannelsKey, [NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey, nil]; NSError *error; if (recorder == nil) recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; if (recorder) { [recorder prepareToRecord]; recorder.meteringEnabled = YES; [recorder record]; levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES]; } } - (void)levelTimerCallback:(NSTimer *)timer { [recorder updateMeters]; float peakPower = [recorder peakPowerForChannel:0]; if (mode == figureMode) { if (peakPower < -40) { ; } else if ((peakPower > -40) && (peakPower < -30)) { ; } else if ((peakPower > -30) && (peakPower < -20)) { ; } else if ((peakPower > -20) && (peakPower < -10)) { ; } else if (peakPower > -10) { ; } } }
Is there a way to remove background noise?
source share