我正在开发一个显示水平仪的iPhone 4 (iOS 4)应用程序。
这个应用程序可以测量人类的声音。但它有一个问题。当有很多噪音时,它就不能工作了。它还测量背景噪声。
为了测量声音,我使用这个:
- (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) {
;
}
}
}有没有办法去除背景噪音?
发布于 2011-11-25 08:39:35
降噪通常包括对声音进行采样(作为原始PCM样本),并进行一些重要的数字信号处理(DSP)。人们需要对噪声以及它与期望信号(频带、时间、外部选通函数等)的不同之处有一个明确的描述。为了让这一切变得容易处理。
您不能只使用AVAudioRecorder计量。
发布于 2011-11-24 03:09:23
当没有人说话时,你可以测量噪音水平(要么要求安静,要么简单地选择最低的测量水平),然后从瞬时水平中减去。
或者,您可以使用FFT尝试通过仅选择“语音”频率来过滤背景噪声(不能保证成功)。
https://stackoverflow.com/questions/8247496
复制相似问题