Android AudioRecord 禁用增益过滤器

标签 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 Hz 之前,我没有得到好的结果,只有振荡值。这让我觉得存在某种带状滤波器。

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

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

当我在静音场景下录制时,我得到了这个: Total Silence

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

从图中可以看出,从1000到7000Hz有一个非常小的增益。

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

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

注意:我使用的是 NEXUS 7 设备。

最佳答案

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

关于Android AudioRecord 禁用增益过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456509/

相关文章:

audio - 如何测量两个 Asterisk channel 之间的音频延迟?

javascript - 有没有可靠的解决方案可以在 HTML 页面中自动播放背景音乐?

r - 按三个条件中的两个过滤行

iphone - 根据日期过滤数据库值

android - Kotlin 协程、改造、Android

android - 从 QT PC 应用程序到 Android 手机的文件传输

android - Backendless - Twitter 登录时出现模糊引用错误

java - 在android中更改高度按钮java代码

javascript - HTML5-WebRTC如何记录

c++ - 霍夫变换后如何只过滤最长的线