【问题标题】:How can I do audio noise reduction programmatically?如何以编程方式进行音频降噪?
【发布时间】:2012-01-05 01:23:57
【问题描述】:

我正在开发一个显示电平表的 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) {
            ;
        }
    }
}

有什么方法可以去除背景噪音?

【问题讨论】:

  • 你有解决办法吗?

标签: iphone audio avfoundation microphone noise-reduction


【解决方案1】:

降噪通常涉及对声音进行采样(作为原始 PCM 样本),并进行一些重要的数字信号处理 (DSP)。需要对噪声进行良好定义的表征,以及它与所需信号(频带、时间、外部选通功能等)的不同之处,以便完全易于处理。

您不能只使用 AVAudioRecorder 计量。

【讨论】:

  • 嗨,你有什么样品吗?
【解决方案2】:

您可以测量无人说话时的噪音水平(要求静音或简单地选择最低的测量水平),然后从瞬时水平中减去。

或者您可以使用 FFT 尝试通过仅选择“语音”频率来过滤背景噪声(不保证成功)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多