首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式进行音频降噪?

如何以编程方式进行音频降噪?
EN

Stack Overflow用户
提问于 2011-11-24 02:48:27
回答 2查看 3.7K关注 0票数 6

我正在开发一个显示水平仪的iPhone 4 (iOS 4)应用程序。

这个应用程序可以测量人类的声音。但它有一个问题。当有很多噪音时,它就不能工作了。它还测量背景噪声。

为了测量声音,我使用这个:

代码语言:javascript
复制
- (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) {
            ;
        }
    }
}

有没有办法去除背景噪音?

EN

回答 2

Stack Overflow用户

发布于 2011-11-25 08:39:35

降噪通常包括对声音进行采样(作为原始PCM样本),并进行一些重要的数字信号处理(DSP)。人们需要对噪声以及它与期望信号(频带、时间、外部选通函数等)的不同之处有一个明确的描述。为了让这一切变得容易处理。

您不能只使用AVAudioRecorder计量。

票数 1
EN

Stack Overflow用户

发布于 2011-11-24 03:09:23

当没有人说话时,你可以测量噪音水平(要么要求安静,要么简单地选择最低的测量水平),然后从瞬时水平中减去。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8247496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档