Android AudioRecord禁用增益过滤器

时间:2013-07-03 19:25:20

标签: android audio filter audiorecord

我正在尝试编程语音检测器。到现在为止,我能够使用audiorecord读取音频数据,但我获得了一个奇怪的频率响应。

我正在阅读数据:

private int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private int sampleRate = 44100;
private int frameByteSize = 1024;
short[] buffer;

int recBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfiguration, audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfiguration, audioEncoding, recBufSize);
buffer = new short[frameByteSize];

audioRecord.read(buffer, 0, frameByteSize);

为了校准,我使用FFT将输入音频转换到频域并获得最大值。 然后,我在Matlab中创建音频音调,就像在这里How do you generate dual tone frequencies in MATLAB?一样,然后播放它们。我获得了300到20000赫兹的良好读数。在300赫兹之前我没有得到好的结果,只有振荡值。这让我觉得有某种带滤波器。

另外,我一直面临着其他问题。频率响应也有较低频率的增益。

我录制的音频总是有静音,有声音和背景噪音,这就是频率响应。

当我在沉默情景下录制时,我得到了这个: Total Silence

我录制语音时得到这个: voice

从图中可以看出,增益非常小,如1000至7000Hz。

我的问题是,是否有办法避免或禁用Android默认的可能增益或过滤器。

注意:我尝试将媒体录制器更改为语音识别(MediaRecorder.AudioSource.VOICE_RECOGNITION)并且它具有相同的行为。

注意:我正在使用NEXUS 7设备。

1 个答案:

答案 0 :(得分:0)

您可以使用低通滤波器或任何其他平滑滤波器来滤除尖峰。