我一直在搞乱 Android API 的 AudioRecord 功能,并发现了一些奇怪的行为。
背景信息:我的手机是 HTC Incredible 我正在使用 Eclipse 插件与模拟器一起进行 Android 开发。目标平台或操作系统是 2.2... 因为这是我的手机使用的。
一些代码:
bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
这是我用来设置 AudioRecord API 的代码。现在,对于模拟器来说,它喜欢将 FREQUENCY 设置为 8000 以使其工作。返回缓冲区大小 640。对于手机,我使用 44100。这里的一个问题是,波形的结果 PCM 数据似乎是八位有符号波形。我得到从 -127 到 128 的值。我认为该值AudioFormat.ENCODING_PCM_16BIT
会产生不同的结果。
我用线程处理音频,
public void run() {
while(isRecording) {
audioRecord.startRecording();
byte[] data = new byte[bufferSize];
audioRecord.read(data, 0, bufferSize);
listener.setData(data);
handleData(data);
}
audioRecord.release();
}
我有一种方法可以使用SurfaceView
. MIC 似乎有很多噪音。我也从模拟器和手机中得到这种噪音。我是否需要通过某种过滤器运行数据?我想用这些数据来计算一些有趣的 FFT 和一些东西,只是为了玩波。但我需要以某种方式减少噪音。
有没有其他人也经历过这种情况。有没有人有办法解决吗?
感谢您的时间和回复,谢谢,dk