在 iPhone 中为录制的音频实现噪声过滤算法

Posted

技术标签:

【中文标题】在 iPhone 中为录制的音频实现噪声过滤算法【英文标题】:Implement a noise filter algorithm for recorded audio in iPhone 【发布时间】:2011-09-28 10:37:02 【问题描述】:

我正在开发像 TomCat 这样的应用程序。我用有趣的声音录制了音频,并使用音频队列服务播放。我已经更改了 AVAudioRecorder 的设置,但是在我播放的时候有一些噪音或失真。

NSMutableDictionary *settings = [[NSMutableDictionary alloc] init]; 
[settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
[settings setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey]; 
[settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 


self.recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:self.audioPath] settings:settings error:nil];

self.recorder = [self.recorder retain];
[self.recorder prepareToRecord]; 
[self.recorder record]; 

我知道如何将分贝转换为幅度,或者如果频率太高则使用 LowPassFilter Blocks。如果频率太低,高通滤波器会阻塞。如何在 Objective-C 中实现这一点?

//convert decibels to amp
const double ALPHA = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [audioMonitor peakPowerForChannel:0]));
double audioMonitorResults;
audioMonitorResults= ALPHA * peakPowerForChannel + (1.0 - ALPHA) *audioMonitorResults;

【问题讨论】:

请帮帮我,我如何去除压缩音频中的噪音../ 嘿@Gupta 你的问题解决了吗?因为我在录制时遇到了同样的问题。 【参考方案1】:

你的问题不清楚。如果您希望确保遵守 Nyquist 采样标准,则需要在 ADC 之前实施滤波器,即,如果您的采样频率接近您打算记录的频谱,则在硬件中实施。

如果您确实有合适的 LPF 并且仍然听到有趣的噪音,我建议您输入音频电平太高。这又是一个硬件问题。降低输入音量。

另一个噪音来源可能是您的记录实际上并不是由一个连续的样本块组成而没有中断。或者,这也可能是播放问题。

很多事情都可能出错,导致“噪音或失真”......

【讨论】:

以上是关于在 iPhone 中为录制的音频实现噪声过滤算法的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 音频修改(过滤器/效果)

android中有啥方法可以使用FFMPEG库过滤掉噪声(低通滤波器)。有人能帮我吗

在 AudioKit 中过滤音频

如何通过在 iphone 中混合多个音频来录制音频?

在iphone上录制音频的教程?

在 iPhone 上以最小的文件大小录制音频