这是我正在处理的相关代码的示例:
AudioRecord recorder = setupAudio();
recorder.startRecording();
设置音频方法:
public AudioRecord setupAudio() {
AudioRecord recorder;
minBufferSizeInBytes = AudioRecord.getMinBufferSize(
RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
Log.e("MoverAudio","BufferSize: " + minBufferSizeInBytes);
recorder = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER,
RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSizeInBytes);
return recorder;
}
RECORDER_SAMPLERATE = 8000;
我试图找出是否有任何方法可以改善初始化所需的时间。
目前我正在使用 3 台设备对其进行测试,结果如下:
银河 S3
- 设置音频:~200ms
- startRecording() : ~280ms
银河 S3 迷你
- 设置音频:~10ms
- startRecording() : ~290ms
银河连结
- 设置音频:~10ms
- startRecording() : ~235ms
缓冲区大小:
- 连结:704
- s3:1024
- s3迷你:640
然而,只有来自银河系的数据是可用的。为了我的应用程序的目的,我必须能够尽快获得音频数据。使用当前值,只有 Nexus 在可接受的时间内。
S3 mini 可能看起来很快,因为它只需要比 Nexus 多一点的时间,但是前约 200 毫秒的样本被列为 0,因此它不可用。
根据我在分析收集到的数据后的理解,S3 和 S3 mini 上的音频似乎以某种方式被过滤,看到生成的 FFT 更加干净,低频声音总是不那么明显。以下是 S3mini 和 Galaxy Nexus 录制音频的示例:
http://img41.imageshack.us/img41/4177/ox7h.png S3 Mini
http://img690.imageshack.us/img690/8717/iya6.png Galaxy Nexus