AudioTrack边录边播放

it2024-07-27  36

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(); } } };
最新回复(0)