我在API级别11中以16位pcm缓冲区录制语音和播放同步 并使用纯java来回应取消我尝试了许多方式,例如在jni中使用android ndk的webrtc但是对我来说不成功感谢任何想法。
AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, audioBufferSize);
AudioTrack player = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, audioBufferSize, AudioTrack.MODE_STREAM);
recorder.startRecording();
player.play();
short [] buffer = new short[1024];
short [] buffer_tmp = new short[1024];
MobileAec aec = new MobileAec();
while (at_isRun)
{
recorder.read(buffer, 0, buffer.length);
aec.doAEC(buffer, buffer_tmp)// set AEC to reference of buffer.
player.write(buffer, 0, buffer.length);
for(int i=0; i<buffer.length; i++)
buffer_tmp[i] = buffer[i];
}
答案 0 :(得分:-1)
目前还不清楚您申请的目的是什么。录制音频并立即将其渲染回来将导致对AEC产生巨大影响的啸声。您可以阅读更多关于howling and AEC的内容。请详细说明项目的目的以及您想要实现的目标。
答案 1 :(得分:-1)
AudioSource有很多选项。 https://developer.android.com/reference/android/media/MediaRecorder.AudioSource
尝试其他人。 (MediaRecorder.AudioSource.VOICE_RECOGNITION等。)