AudioTrack边录边播放

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();
        }
    }
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值