class RecordPlayThread extends Thread {
public void run() {
try {
int audiosource = MediaRecorder.AudioSource.MIC;
if (Build.VERSION.SDK_INT > 19){
audiosource = MediaRecorder.AudioSource.MIC;
}
// audioRecord = new AudioRecord(audiosource, frequency,
// channelConfiguration, audioEncoding, recBufSize*2);
int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE_HZ,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT) * 2;
audioRecord = new AudioRecord(audiosource,
SAMPLE_RATE_HZ,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize);
// audioTrack = new AudioTrack(AudioManager.USE_DEFAULT_STREAM_TYPE, frequency,
// channelConfiguration, audioEncoding,
// playBufSize, AudioTrack.MODE_STREAM);
int audioBufSize = AudioTrack.getMinBufferSize(8000,
AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000,
AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT,
audioBufSize,
AudioTrack.MODE_STREAM);
audioTrack.setStereoVolume(0.7f, 0.7f);//设置当前音量大小
byte[] buffer = new byte[recBufSize];
audioRecord.startRecording();//开始录制
//startRecording();
audioTrack.play();//开始播放
while (isRecording) {
//从MIC保存数据到缓冲区
int bufferReadResult = audioRecord.read(buffer, 0,
recBufSize);
byte[] tmpBuf = new byte[bufferReadResult];
System.arraycopy(buffer, 0, tmpBuf, 0, bufferReadResult);
//写入数据即播放
audioTrack.write(tmpBuf, 0, tmpBuf.length);
}
audioTrack.stop();
audioRecord.stop();
audioTrack.release();
audioRecord.release();
} catch (Throwable t) {
Toast.makeText(testRecord.this, t.getMessage(), Toast.LENGTH_LONG).show();
}
}
};