録音と再生のIOストリームで入力した音をリアルタイム再生する

録音の仕方
データストリームとして音声データを読み込む - Androidプログラマへの道 〜 Moonlight 明日香 〜 - Seesaa Wiki(ウィキ)
再生の仕方
音声を使って楽しげなものを作りたい。再生をする。 - 素人のアンドロイドアプリ開発日記
オーディオのオブジェクトの取得の仕方
android - AudioRecord object not initializing - Stack Overflow

一部意味などは分かっていませんが
この3つを組み合わせてできました

package com.example.recodeplay;

import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder.AudioSource;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	AudioRecord audioRec = null;
	Button btn = null;
	boolean bIsRecording = false;
	int bufSize;
	int samplingRate;
	private AudioTrack audioTrack;

	private void recodingAndPlay() {
		if (bIsRecording) {
			bIsRecording = false;
		} else {
			// 録音開始
			Log.v("AudioRecord", "startRecording");
			audioRec.startRecording();
			bIsRecording = true;
			// 録音スレッド
			new Thread(new Runnable() {
				@Override
				public void run() {
					byte buf[] = new byte[bufSize];
					// TODO Auto-generated method stub
					while (bIsRecording) {
						// 録音データ読み込み
						audioRec.read(buf, 0, buf.length);
						audioTrack.write(buf, 0, buf.length);
						// Log.v("AudioRecord", "read " + buf.length +
						// " bytes");
					}
					// 録音停止
					Log.v("AudioRecord", "stop");
					audioRec.stop();
				}
			}).start();
		}
	}

	private static int[] mSampleRates = new int[] { 8000, 11025, 22050, 44100 };

	public AudioRecord findAudioRecord() {
		for (int rate : mSampleRates) {
			for (short audioFormat : new short[] {
					AudioFormat.ENCODING_PCM_8BIT,
					AudioFormat.ENCODING_PCM_16BIT }) {
				for (short channelConfig : new short[] {
						AudioFormat.CHANNEL_IN_MONO,
						AudioFormat.CHANNEL_IN_STEREO }) {
					try {
						Log.d("TAG", "Attempting rate " + rate + "Hz, bits: "
								+ audioFormat + ", channel: " + channelConfig);
						int bufferSize = AudioRecord.getMinBufferSize(rate,
								channelConfig, audioFormat);

						if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
							// check if we can instantiate and have a success
							AudioRecord recorder = new AudioRecord(
									AudioSource.DEFAULT, rate, channelConfig,
									audioFormat, bufferSize);

							if (recorder.getState() == AudioRecord.STATE_INITIALIZED)
								bufSize = bufferSize;
							samplingRate = rate;
							return recorder;
						}
					} catch (Exception e) {
						Log.e("TAG", rate + "Exception, keep trying.", e);
					}
				}
			}
		}
		return null;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// AudioRecordの作成
		audioRec = findAudioRecord();

		audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, samplingRate,
				AudioFormat.CHANNEL_CONFIGURATION_MONO,
				AudioFormat.ENCODING_PCM_16BIT, bufSize, AudioTrack.MODE_STREAM);
		audioTrack.play();
		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				recodingAndPlay();
			}
		});
	}

}

普通に出した声が耳の所で聞こえる!!
つまりこれができるってことはラインみたいな音声通話って結構簡単にできそう。。。
takam