//project package ~
import android.app.*;
import android.graphics.*;
import android.media.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
//퍼미션<uses-permission android:name="android.permission.RECORD_AUDIO"/>
public class AudioProcessingActivity extends Activity implements OnClickListener {
boolean started = false;
RecordAudio recordTask;
ImageView imageView;
Bitmap bitmap;
Canvas canvas;
Paint paint;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //main : 주 UI XML 파일명
final Button startStopButton =
(Button) findViewById(R.id.StartStopButton);
startStopButton.setOnClickListener(this);
// ImageView 및 관련 객체 설정 부분
imageView = new ImageView(this);
bitmap = Bitmap.createBitmap((int) 256, (int) 100,
Bitmap.Config.ARGB_8888);//256 x 100 크기의 비트맵생성
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setColor(Color.GREEN);
imageView.setImageBitmap(bitmap);
((LinearLayout) findViewById(R.id.LinearLayout1)).addView(imageView);
}
private class RecordAudio extends AsyncTask<Void, short[], Void> {
final int 샘플링주파수 = 8000;
final int 녹음채널수 = AudioFormat.CHANNEL_CONFIGURATION_MONO; //Mono : 1개 , Streo : 2개
final int 인코딩방식 = AudioFormat.ENCODING_PCM_16BIT; //양자화 방식 & 녹음방식
@Override
protected Void doInBackground(Void... params) {
try {
int bufferSize = AudioRecord.getMinBufferSize(샘플링주파수, 녹음채널수, 인코딩방식);
final int blockSize = bufferSize ;//버퍼에서 한번에 읽어올 크기
AudioRecord audioRecord = new AudioRecord( MediaRecorder.AudioSource.MIC, 샘플링주파수,
녹음채널수, 인코딩방식 , bufferSize);
short[] buffer = new short[blockSize]; //샘플링된 데이터가 이곳에 담김.
audioRecord.startRecording();
while (started) {
int bufferReadResult =
audioRecord.read(buffer, 0, blockSize);
// publishProgress를 호출하면 onProgressUpdate가 호출된다.
publishProgress(buffer);
}
audioRecord.stop();
} catch (Throwable t) {
Log.e("AudioRecord", "Recording Failed");
}
return null;
}
// onProgressUpdate는 우리 엑티비티의 메인 스레드로 실행된
// 인터페이스와 상호작용할 수 있다.
@Override
protected void onProgressUpdate(short []... buffer) {
canvas.drawColor(Color.BLACK);
double scale =
(double)canvas.getHeight()/Short.MAX_VALUE;
for (int i = 0; i < buffer[0].length; i++) {
int xloc = i + 50 ;
int yloc = (int)(canvas.getHeight()/2
+ scale .*buffer[0][i]);
canvas.drawLine(xloc,yloc-1,xloc,yloc+1);
}
imageView.invalidate();
}
}
@Override
public void onClick(View arg0) {
final Button startStopButton
= (Button) findViewById(R.id.StartStopButton);
if (started) {
started = false;
startStopButton.setText("Start");
recordTask.cancel(true);
} else {
started = true;
startStopButton.setText("Stop");
recordTask = new RecordAudio();
recordTask.execute();
}
}
}
이소스를 가지고 마이크 입력 처리를 할려고하는데 무엇을 어떻게 해야 할지 모르겠습니다. ㅠ
답변좀 부탁드립니다 .




if (어떻게 해야 할지 모른다 == true) {
if (나는 초보다 == true) {
책을 사본다.
} else {
구글링을 한다.
}
}