안드로이드 녹음 기능


앱 개발시 사용한 녹음 관련 코드들이다. 

구글링해서 가져온 코드인데, 어디서 가져왔는지...출처가 기억나지 않는다. 



      //녹음 시작

private void startRec()

{

mCurRecTimeMs = 0;

mCurProgressTimeDisplay = 0;

            mFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test/";


    // 파일명을 년도월일시간분초 로 생성 겹치는 상황 없애기

   SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmss");


   // 파일명 위에서 정한 파일명을 생성한 폴더에 저장

   mFileName = "test" + timeStampFormat.format(new Date()).toString() + "Rec.mp4";

   

   mPlayingFileName = mFileName.toString(); //play할 파일명 전달

   Log.e("startRec", "mFileName ==========> " +mFilePath + mFileName);

   

// SeekBar의 상태를 0.1초후 체크 시작

mProgressHandler.sendEmptyMessageDelayed(0, 100);

if (mRecorder == null)

{

mRecorder = new MediaRecorder();

}

mRecorder.reset();

try

{

//오디오 파일 생성

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

mRecorder.setOutputFile(mFilePath + mFileName);

mRecorder.prepare();

mRecorder.start();

}

catch(IllegalStateException e)

{

Toast.makeText(this, "IllegalStateException " +e.getMessage(), 1).show();

}

catch(IOException e)

{

Toast.makeText(this, "IOException " +e.getMessage(), 1).show();

}

}

//녹음 정지

private void stopRec()

{

mRecord.setSelected(false);

try

{

mRecorder.stop();

}

catch(Exception e)

{

}

finally

{

if(mRecorder != null)

{

mRecorder.release();

mRecorder = null;

}

}

mCurRecTimeMs = -999;

// SeekBar의 상태를 즉시 체크 

// mProgressHandler.sendEmptyMessageDelayed(0, 0);

// Toast.makeText(this, "폴더에 저장되었습니다.", Toast.LENGTH_SHORT).show();

}



//MediaPlayer

private void initMediaPlayer(String fullFilePath)

{

// 미디어 플레이어 생성

if (mPlayer == null)

{

mPlayer = new MediaPlayer();

}

mPlayer.reset();

mPlayer.setOnCompletionListener(this);

Log.e(TAG, "fullFilepath : "+ fullFilePath);

try

   {

     mPlayer.setDataSource(fullFilePath);

     mPlayer.prepare();   

     int point = mPlayer.getDuration();

//      mProgressbar.setMax(point);

     

     int maxMinPoint = point / 1000 / 60;

     int maxSecPoint = (point / 1000) % 60;

     int maxHourPoint = point / 1000 / 60 / 60;

     String maxMinPointStr = "";

     String maxSecPointStr = "";

     String maxHourPointStr = "";

     

     if (maxMinPoint < 10)

       maxMinPointStr = "0" + maxMinPoint + ":";

     else

       maxMinPointStr = maxMinPoint + ":";

     

     if (maxSecPoint < 10)

       maxSecPointStr = "0" + maxSecPoint;

     else

       maxSecPointStr = String.valueOf(maxSecPoint);

     

     if (maxHourPoint < 10)

    maxHourPointStr = "0" + maxHourPoint + ":";

     else

    maxHourPointStr = maxHourPoint + ":";

     

     mTotalTime = maxHourPointStr + maxMinPointStr + maxSecPointStr;

     mRecordingTime.setText("00:00:00 / " + mTotalTime);

//      mEndTime.setText(maxHourPointStr + maxMinPointStr + maxSecPointStr);

//      

//      mProgressbar.setProgress(0);

   }

   catch(Exception e)

   {

     Log.v("ProgressRecorder", "미디어 플레이어 Prepare Error ==========> " + e);

   }

}


Handler mProgressHandler = new Handler()

{

public void handleMessage(Message msg)

{

mCurRecTimeMs = mCurRecTimeMs + 100;

mCurProgressTimeDisplay = mCurProgressTimeDisplay + 100;

if(nState == RECORDING_STATE)

{

// mProgressbar.setMax(300000);

 

Log.e("LoadProfile", "====== mCurRecTimeMs : "+mCurRecTimeMs + " mCurProgressTimeDisplay : "+mCurProgressTimeDisplay);

// 녹음시간이 음수이면 정지버튼을 눌러 정지시켰음을 의미하므로 

// SeekBar는 그대로 정지시키고 레코더를 정지시킨다. 

if (mCurRecTimeMs < 0)

{}

// 녹음시간이 아직 최대녹음제한시간보다 작으면 녹음중이라는 의미이므로

// SeekBar의 위치를 옮겨주고 0.1초 후에 다시 체크하도록 한다. 

else// if (mCurRecTimeMs < 300000)

{

int maxMinPoint = mCurProgressTimeDisplay / 1000 / 60;

   int maxSecPoint = (mCurProgressTimeDisplay / 1000) % 60;

   int maxHourPoint = mCurProgressTimeDisplay / 1000 / 60 / 60;

   String maxMinPointStr = "";

   String maxSecPointStr = "";

   String maxHourPointStr = "";

   

   if (maxMinPoint < 10)

     maxMinPointStr = "0" + maxMinPoint + ":";

   else

     maxMinPointStr = maxMinPoint + ":";

     

   if (maxSecPoint < 10)

     maxSecPointStr = "0" + maxSecPoint;

   else

     maxSecPointStr = String.valueOf(maxSecPoint);

     

   if (maxHourPoint < 10)

    maxHourPointStr = "0" + maxHourPoint + ":";

   else

    maxHourPointStr = maxHourPoint + ":";

   

   mRecordingTime.setText(maxHourPointStr + maxMinPointStr + maxSecPointStr);

     

Log.e("LoadProfile", "mCurProgressTimeDisplay : "+mCurProgressTimeDisplay);

// mProgressbar.setProgress(mCurProgressTimeDisplay);

mProgressHandler.sendEmptyMessageDelayed(0, 100);

}

// 녹음시간이 최대 녹음제한 시간보다 크면 녹음을 정지 시킨다. 

// else

// {

//

// stopRec();

// }

}

else if(nState == PLAYING_STATE)

{

if (mPlayer == null) return;

     

try

{

if (mPlayer.isPlaying())

{

int maxMinPoint = mCurProgressTimeDisplay / 1000 / 60;

   int maxSecPoint = (mCurProgressTimeDisplay / 1000) % 60;

   int maxHourPoint = mCurProgressTimeDisplay / 1000 / 60 / 60;

   String maxMinPointStr = "";

   String maxSecPointStr = "";

   String maxHourPointStr = "";

   

   if (maxMinPoint < 10)

     maxMinPointStr = "0" + maxMinPoint + ":";

   else

     maxMinPointStr = maxMinPoint + ":";

     

   if (maxSecPoint < 10)

     maxSecPointStr = "0" + maxSecPoint;

   else

     maxSecPointStr = String.valueOf(maxSecPoint);

     

   if (maxHourPoint < 10)

    maxHourPointStr = "0" + maxHourPoint + ":";

   else

    maxHourPointStr = maxHourPoint + ":";

   

   mRecordingTime.setText(maxHourPointStr + maxMinPointStr + maxSecPointStr + " / " + mTotalTime);

// mProgressbar.setProgress(mPlayer.getCurrentPosition());

mProgressHandler.sendEmptyMessageDelayed(0, 100);

}

}

catch (IllegalStateException e)

{}

catch (Exception e)

{}

}

}

};

@Override

public void onCompletion(MediaPlayer mp) {

// TODO Auto-generated method stub

nState = NORMAL_STATE;

mRecordingTime.setText(mTotalTime +" / " + mTotalTime);

mPlay.setText("재생");

// 재생이 종료되면 즉시 SeekBar 메세지 핸들러를 호출한다.

   mProgressHandler.sendEmptyMessageDelayed(0, 0);

   

   mRecord.setEnabled(true);

   mList.setEnabled(true);

}





블로그 이미지

미네르바98

안드로이드와 영화 리뷰, 생활정보에 관한 내용을 기재합니다.

,